jane* docs
Design

Auto-annotate

Marked experimental: the surface can change.

Find the parts a construct is made of, from corpora that cite their own records, and put them on the map.

Reached byTools → Design → Auto-annotate
Sample projectFluorescent proteins · Feature files · Gibson (annotated parts)

What it does

Searches the open sequence — or every sequence file in the project — against six sourced corpora in one scan, and offers what it finds as annotations: plasmid parts (PlasMapper), antimicrobial resistance genes (NCBI AMRFinderPlus), fluorescent proteins (FPbase), plasmid proteins (Swiss-Prot, matched through translation, so a codon-shuffled gene is still found), curated GenBank plasmid elements, and structured RNAs from every family of the Rfam 15.1 release. A construct that arrived as bare bases, from a synthesis order, a colleague's FASTA or an assembly you just simulated, comes back with its promoters, origins, markers, tags, terminators and recombination sites labelled.

Every hit carries the record it came from, or says it has none. A promoter is not reported as "a promoter": it is reported as an entry in a named corpus, at a named version, under a named licence, and the panel prints that beside the hit. Hits from the one unsourced set that predates this rule are marked no source with a running count, because a claim you cannot trace is different in kind from one you can.

Nothing is written until you say so. Hits are drawn on the canvas as candidates in their own lane — never mixed into the record's real features — and the apply button names the count you are agreeing to before you press it.

When you'd use this

Used in: Design a CRISPR guide, check where else it binds, and measure the edit you got

  • A construct arrived as a FASTA. No annotations at all; this is the fastest route to a readable map. On a bare 8,355 bp backbone it returns 57 features across 9 types covering 62% of the molecule — the pBR322 and f1 origins, an ampicillin-resistance gene, a Zeocin-resistance gene, SV40 promoter and enhancer, the ARS1 origin, CYC1 and T7 terminators, lacZα, and the M13 primer sites.
  • After an assembly simulation. A ligation or Gibson product is a real sequence with no features on it. Annotating it makes the product legible and makes a later verification meaningful.
  • You inherited a plasmid and want to know what is on it. Run it over a file that already has features and compare: a part the file does not annotate but this finds is worth a look, and the apply policy lets you add without disturbing what is there.
  • Checking a Gateway or Cre/Lox construct. The recombination-site detectors find att and loxP sites structurally, which is what tells you whether the reaction you are planning has the sites it needs.
  • You have a folder of records and one question. The project scope runs the identical scan over every sequence file the project holds, open or not, and reports per file.

Either side: Edit annotation to correct a boundary a hit got nearly right, and Export to write the annotated record out.

What this computes

Independent sources, each reported separately with its own hit count, its own provenance and its own errors. The corpus list is read from the shipped manifest rather than fixed, so a corpus added upstream appears without the panel learning a new name.

  • PlasMapper 3 parts corpus — 471 records across twelve type codes: promoters, terminators, regulatory elements, replication origins, selectable markers, reporters, affinity tags, localization sequences, two-hybrid genes, genes, primers and miscellaneous. GPL-3.0, retrieved 2026-08-30, checksummed. On by default.

  • NCBI AMRFinderPlus reference gene catalogue — 9,786 nucleotide coding sequences of acquired antimicrobial-resistance genes, at allele level, each with its own RefSeq accession. Public domain (US Government work). Off by default, and the panel states the 13 MB download beside the switch so the cost is yours to accept. It is what calls tet(C) on pBR322 at 100% identity over 1,191 bp — a hit no exact-match parts library reaches.

  • FPbase fluorescent proteins — 993 engineered fluorescent proteins carrying a published sequence, of the 1,044 the database tracks; the other 51 have no sequence entered yet, and a record without one cannot be searched for. These are PROTEIN sequences, so they are matched by translating your DNA rather than by comparing it — see below. Free of copyright restrictions with attribution requested, retrieved 2026-09-17, checksummed. On by default.

  • Swiss-Prot plasmid-encoded proteins — 4,095 reviewed UniProtKB records, scoped by UniProt's own controlled vocabulary rather than by anybody's judgement: keyword KW-0614, which the authority defines as "protein encoded on a plasmid, a self-replicating circular DNA that is found in a variety of bacterial, archaeal, fungal, algal and plant species, and can be transferred from one organism to another". Only the reviewed half is taken — the same keyword covers 477,191 unreviewed records, whose names nobody has curated. These are PROTEIN sequences, matched by translation. CC BY 4.0, release 2026_03, retrieved 2026-09-19, checksummed. On by default, and the panel states its 3 MB download beside the switch.

    What it answers that the others do not. FPbase tells you what a construct EXPRESSES; this tells you what the BACKBONE carries — replication, mobilisation, partition, toxin-antitoxin and resistance proteins. On real pBR322 it names five: tetA and bla at 100% of the protein, the two uncharacterised open reading frames the record carries, and rop, the 63-residue regulator of primer — short enough that its DNA can drift past a nucleotide matcher, long enough to align as protein. Each hit cites its UniProt accession, so bla here is P62593 and can be looked up.

  • Common plasmid elements (GenBank) — 116 everyday parts: promoters from lac and T7 to CMV, CaMV 35S and NOS; terminators; the pUC, p15A, f1 and other origins; resistance and reporter genes; epitope tags, protease sites, linkers and 2A peptides; loxP, attB and T-DNA borders. For each element, the sequence is the variant the most independent GenBank records agree on, and each hit cites the GenBank record it was taken from, so it can be looked up there. Every entry has been checked against the record it cites: all 116 occur in it. On by default and the smallest source. On real pBR322 it names the bom mobilisation region and the pMB1-type origin exactly, which no other source names.

  • Rfam RNA families — covariance models of structured RNAs: ribosomal RNAs, replication control RNAs such as RNAI, viral UTR structures, frameshift elements, packaging signals, riboswitches. A covariance model describes a family by the secondary structure its members FOLD into, not by their spelling, so it finds a structured RNA whose sequence has drifted as long as its base pairs are kept. This source is every one of the 4,227 families in Rfam 15.1, each tagged with its clan where it has one (Rfam's grouping of related families, such as the bacterial, archaeal and eukaryotic models of one ribosomal RNA). CC0, retrieved 2026-09-27, checksummed. Off by default, with its 46 MB download stated beside the switch: it is fetched once, and a search is slow on long records (about 12 s for a 4 kb plasmid; about three minutes for a 30 kb viral genome the first time, download included), with progress shown per family.

  • Unsourced legacy set — 19 entries that predate the provenance rule. Kept because 16 of the 19 sequences appear nowhere in the sourced corpora, so deleting them would lose coverage; labelled no source recorded everywhere they appear, because they cannot be given a citation after the fact.

  • Recognition-site detectors — Cre/loxP and Gateway attB/P/L/R, run as their own pass because a recombination site is defined by a structure rather than by being on a parts list. Their consensus is a faithful port of pydna 5.5.16, and a hit cites that rather than claiming no source.

Four matching methods, and a hit says which found it

  • Exact matching, forward and reverse complement, origin-wrapping on a circular record. It has no threshold: the sequence spells the entry or it does not.
  • Alignment matching — BLASTN under PlasMapper's own search parameters, with the hits ranked and de-overlapped the way pLannotate ranks them. This is the only method that reaches the 253 corpus entries longer than 100 bp; exact matching is a strict subset of the shortest length bracket and effectively never fires on them.
  • Translated matching — your sequence is read in all six reading frames and the PROTEIN it encodes is compared against a protein corpus, the way blastx does it: BLOSUM62 scoring, three-residue seeds with a two-hit trigger, gapped extension, and Karlin–Altschul statistics, so a match carries a bit score and an E-value. It is not an alternative to the two methods above — it is the only way a protein corpus can be searched at all, and the matching choice does not reach one. Why it matters: a fluorescent protein in a real construct is usually codon-optimised for its host, so its DNA has diverged from every reference while its protein has not. On NCBI's MW987526, curated by its depositors as carrying mScarlet-I and mCitrine, DNA matching names them mHoneydew and d2EYFP — both wrong. Translated matching names mScarlet-I at 100% identity over 232 residues and mCitrine at 100% over 239. Checked against NCBI's own blastx on real records: on MW987526 every one of the 1,826 protein claims blastx makes against the fluorescent corpus is reproduced in the same reading frame over the same bases, and against the plasmid-protein corpus 53 of 53 on pBR322 and 50 of 50 on MW987526. The control that makes those numbers readable is the negative one: 20,703 bases of human chromosome 2 return nothing, from the same search that returns five proteins on pBR322 in the same run.
  • RNA structure search — the Rfam families are searched the way Rfam itself annotates a sequence, with Infernal's cmscan pipeline: each family's own gathering threshold (the bit score Rfam's curators set as the line between members and non-members), a cascade of profile-HMM filters that discard sequence which cannot score, a CYK filter over the covariance model, and finally the Inside score of the model over the surviving window with a composition-bias correction (null3) subtracted. Each hit reports its bit score, that bias, and an E-value — the number of hits this good expected by chance in a random sequence of this length searched against all 4,227 Rfam models, which is how Rfam reports it. A stretch of sequence that looks like several copies of a family is split into separate envelopes the way the profile-HMM stage of Infernal does it, by sampling alignments and clustering them. Where two families claim overlapping bases on one strand the weaker is marked overlapped and drawn grey, because Rfam would report the other one. Checked against Infernal 1.1.5's own cmscan on every bundled GenBank record with the whole release: all 67 of its hits are reproduced at its coordinates, score, E-value, overlap mark and clan, and all 6,381 candidate envelopes it defines along the way are defined at the same coordinates. Two hits (the eukaryotic large-subunit rRNA model on a 140 kb chloroplast genome) score 0.1 bit lower than cmscan prints.
  • Clans. A hit names its family's Rfam clan. When overlapping hits come from families of one clan, the readings say so: that is one RNA scored by several of its models, not several RNAs. Clans are shown, not used to drop hits, which is how Rfam's own annotation runs by default.
  • Structures cut off by a record end. On a linear record the search also runs cmscan's three truncated passes: one over the first stretch of the record for a structure missing its 5′ end, one over the last stretch for one missing its 3′ end, and one for a record shorter than the structure itself. A truncated hit scores only the part of the structure present, pays a penalty for the missing end, and says which end of the family's model it lacks. Checked against cmscan on 134 sequences cut through the middle of every hit above: all 179 of its rows are reproduced, 147 of them truncated. A circular record has no end to cut at, so these passes do not run on it.
  • A translated hit reports what it beat. Fluorescent proteins have dozens of near relatives, so each call carries the runners-up that matched the same bases with their identities — on the record above, mScarlet at 99.6% and mEYFP at 99.6% — and the run says so in words when a call is within five points of the next candidate, because then the MATCH is certain and the NAME is not. Its identity is between amino acids and says nothing about how close the DNA is, which the panel states rather than leaving you to infer from a row that looks like the others.
  • Its own controls, shown when a protein corpus is on: the E-value to report down to (which also sets how deep the search runs, so a stricter cutoff is faster as well as shorter), an identity floor and a coverage floor over residues, how many runners-up to keep, and the genetic code the frames are read under — a mitochondrial or Mycoplasma construct read under the standard code translates its stop codons wrongly and loses the match.
  • The split is reported, not merged. A run says "57 features across 9 types, covering 62% of the 8,355 bases — 13 spelled exactly, 44 by alignment", so the strength of the claim behind each number is visible, and a per-source tally sits beside it — PlasMapper 3: 51 · Unsourced legacy set: 6 · Cre/loxP: 0.
  • A result says when it no longer answers the question you are asking. Every control here changes what a scan returns rather than how it is drawn — the two hide-switches included, because the acceptance policy is applied before overlapping hits are resolved, so it can change which feature you are shown and not merely how many. Change one after a run and the result stays on screen with what moved named beside it — the fragment filter was switched on, the sequence changed (4,361 bases then, 8,355 now) — rather than quietly continuing to describe the old settings. The numbers you are reading always belong to the run that produced them.

Per run

  • every hit with its name, type, span, strand, the source that found it and, for an aligned hit, its percent identity and the fraction of the database entry it covers
  • percent of the molecule covered, counting a base once however many hits cover it
  • a per-source count, so a detector that found nothing is distinguishable from one that did not run
  • a generated conclusion, produced from this run's own numbers rather than a fixed sentence
  • only the cautions this run earned, each naming its subject and the measurement behind it. The run above earned four: "6 hits cite no source and cannot be traced to a record" (naming them); "44 hits cover under 95% of the library entry, so they name PART of a feature rather than the feature — the thinnest is S._cerevisiae_ADH1_promoter at 3%"; "44 hits are below the corpus authority's own acceptance cutoff … they are shown and labelled rather than withheld"; and "the template is linear, so nothing was searched across the origin. 1 hit sits within 50 bases of an end, where a feature on a circular molecule would be cut in two by the join"
  • a folded derivation naming the corpora searched with their versions and per-corpus hit counts, the provenance and licence of each, the matching method, the alignment thresholds in force, and the template the scan ran on
  • errors per source, without losing the others. One corpus failing to load is reported by name and the rest still produce their hits
  • progress while it runs, naming the source currently being scanned, with a Stop

Per project run — hits, distinct types, percent of the record covered, and how many features the record already carried, one row per file. On a nine-file project that expands to 17 records: 4 of 17 annotated, 730 hits. A record with nothing to search says so rather than reporting no hits — a file that carries only coordinates has no sequence of its own, so one is synthesised to hold them, and each such row reads no sequence to search: all 16,569 bases are N or ambiguous. Reporting that as "nothing found" would claim a search that could never have succeeded.

Where it lives

Tools → Design → Auto-annotate, in the right rail beside the map.

Hits draw on the canvas as a candidates track — its own lane on the circular map, the linear map and the sequence view, never the features lane, because a candidate is a proposal about the record rather than part of it. They are coloured by method (exact, aligned, recognition consensus) from a colour-blind-safe palette, because the method is what changes what you should do with a hit; the source is on the row. Weak hits are greyed rather than hidden. The track is transient: it never reaches a save and does not survive a reload, and closing the panel clears it.

Inputs and outputs

Accepts the open sequence, or every sequence file in the project. Circularity is respected: on a circular record the scan wraps past the origin, so a part spanning position 1 is found rather than missed. Nucleotide only, and that is true even of the protein corpora: the translated search reads your DNA in six frames and compares the PROTEIN it encodes, so it still needs bases to read. A protein record has no reading frames of its own and nothing to match against.

Refuses out loud. A protein record is declined with its reason beside the disabled control, rather than scanned and reported as matching nothing — and the reason says why the protein corpora do not change that, because a switch labelled Plasmid proteins is a fair thing to misread. A read-only record cannot be annotated and the panel says so rather than running and failing at the write. Turning every source off disables the run, with the reason on the control. Project scope is disabled, with its reason, when the editor is not bound to a project. A corpus that fails to download is named with its error, and the other sources still run.

In a project run, two kinds of record are skipped with their own reason instead of being reported as finding nothing, and the summary counts them apart. A feature-only file (GFF3, GTF, BED) has no sequence, so one is synthesised to hold its coordinates and there is nothing an aligner could seed on. A protein record has no bases of its own; its row says so and its length is given in residues rather than bases.

Produces annotations on the record, for the hits you leave ticked, under the apply policy you chose. Each one keeps its evidence and citation as its note (the method, identity and coverage, and the authority, record, release and retrieval date), so the record still says where a feature came from after the panel is closed, and a GenBank export carries it. Applying is a normal edit and can be undone. A result belongs to the record it was scanned on: open another record and its hits are neither drawn nor offered for applying until you scan that one. A project-wide run reports and does not write — applying stays per record, in that record's own editor, where the policy and the per-hit ticks are visible.

Demo

There is no screencast. Open the Gibson (annotated parts) sample project, select the bare gibson_test_vector record, and run it with the defaults.

Worked example

On a bare backbone. gibson_test_vector, 8,355 bp, zero features. Defaults: PlasMapper on, the GenBank plasmid elements on, both protein corpora on, resistance catalogue off, legacy set on, Cre/loxP on, Gateway off, matching Exact and aligned. The run returns 56 features across 9 types, covering 66% of the 8,355 bases: 18 spelled exactly, 36 by alignment and 2 by translation, split PlasMapper 3: 25 · Common plasmid elements (GenBank): 24 · Unsourced legacy set: 6 · Plasmid proteins (Swiss-Prot): 2 · Fluorescent proteins (FPbase): 0 · Cre/loxP: 0. The button reads Add 56 features · nothing removed. Nothing has been written yet. FPbase returning zero on a construct with no fluorescent protein in it is the right answer, and it is reported as zero rather than left out.

On a curated record, and the more interesting case. Real pBR322 (J01749.1, 4,361 bp) with its 48 curated features. The default run reports 30 features across 8 types, covering 83% of the 4,361 bases: 10 spelled exactly, 15 by alignment and 5 by translation, split PlasMapper 3: 10 · Common plasmid elements (GenBank): 12 · Plasmid proteins (Swiss-Prot): 5 · Unsourced legacy set: 3 · Fluorescent proteins (FPbase): 0 · Cre/loxP: 0. Over the origin region it draws pBR322_origin at 99.7% identity over 100% of the entry, 2519–3138, the molecule's own origin, and beside it a piece of p15A_origin at 77.8% identity over 20% of the entry, 2231–2409, marked as a fragment.

The five translated calls are the plasmid-protein corpus, and they are the ones a nucleotide corpus reaches least well: tetA and bla at 100% of the protein, the two uncharacterised open reading frames the record carries, and rop at 98.4% over 63 residues.

Now switch on Only hits the corpus authority would accept. The count falls to 20 across 5 types covering 81%: 10 exact, 5 aligned, 5 translated. The p15A piece goes, with the other weak nucleotide hits, and pBR322_origin stays. All five protein calls survive the policy, which is what an acceptance bar of ≥95% identity should do to calls made at 98–100%.

Why the policy is applied before overlaps are resolved rather than after: the ranking is identity × length, so a long poor hit can win an overlap against a short excellent one and displace it. The acceptance policy removes the poor hit first, so it can never be what deletes a hit the authority accepts. On pBR322 the corpus authority's own search splits the diverged p15A alignment into pieces too short to win, so the two readings agree on the origin; on a record where a long diverged hit does win, this switch changes which feature you are shown and not merely how many.

pBR322 after a default scan: pBR322_origin drawn at 2519–3138 beside a short p15A_origin fragment.

Controls

ControlWhat it changes
AnnotateThis sequence (the open record; hits draw on the canvas) or Every sequence in this project (every sequence file the project holds, open or not; reports per file, writes nothing)
Each corpusOne switch per shipped corpus, each stating its authority, version, licence and download size. The resistance catalogue is off by default because of its size
Unsourced legacy setThe 19 untraceable entries. On by default, and every hit from it is marked no source
MatchingExact and aligned (default), Exact only, or Aligned only
Only hits the corpus authority would acceptKeep only hits clearing ≥95% identity with the coverage bar the corpus authority applies for that entry's length. Off by default: a weak hit is shown and labelled rather than silently withheld
Hide partial features (under 95% of the entry)Drop hits covering less than 95% of the database entry — what upstream calls fragments
Cre/loxP sitesRun the loxP-family detector
Gateway att sitesRun the att-site detector
Greedy core matchingRelax the att core match. Turn it on when you expect a site the strict match missed; expect more hits, some of which are not real
Report down toShown when a protein corpus is on, and governs only the six-frame protein search. The E-value cutoff: E ≤ 1e-20, E ≤ 1e-5 (default) or E ≤ 0.001. It also sets the score the search runs at, so a stricter cutoff is a faster scan as well as a shorter list
Protein identity floorDrop a protein call under this percent identity over the residues aligned. Default 0%, which keeps everything the E-value allows
Coverage floorDrop a protein call covering less than this much of the database protein. Default 50%: a fragment of a protein is a weaker claim than the protein
Runners-up keptHow many other proteins matching the same bases are kept on each call (0–10, default 4), so a near relative is visible rather than implied
Genetic codeWhich codons the six frames are read under. Default 1, the standard code. A mitochondrial or Mycoplasma construct read under the standard code translates its stops as tryptophan and loses the match
Per-hit ticksWhich proposed annotations get written. All ticked initially
Existing featuresKeep them all (default: add what is new, remove nothing) · Replace what a hit overlaps (an existing feature a hit overlaps on the same strand goes first) · Remove them all first. The consequence is spelled out beneath, naming the features that would go, before you press anything
StopCancels a running scan

Algorithms you can choose

Two matching methods and a policy, and they are separate controls rather than one sensitivity slider because they fail in different directions.

Exact matching is a library lookup: forward and reverse complement, origin-wrapping, no threshold. It is the strongest claim available — the molecule spells the part — and it is blind to a part carrying a single substitution. On the shipped parts corpus it can reach at best 218 of the 471 entries, because 253 of them are longer than 100 bp and a long entry is found only where the template spells it byte for byte.

Alignment matching is BLASTN under the corpus authority's own search parameters, scored and de-overlapped as pLannotate scores. It reaches the long entries, and it returns hits that are partial, imperfect, or both — which is why every aligned hit carries its identity and its coverage rather than being presented as equivalent to an exact one.

The acceptance policy is a third, separate thing: the corpus authority's own bar for calling a hit real (≥95% identity, with a coverage requirement that depends on the entry's length). It is a filter on the alignment result, off by default.

It buys precision with recall, and the trade is visible rather than argued. On real pBR322 with the default sources, the scan returns 30 hits covering 83% of the molecule; switching the policy on returns 20 hits covering 81%. Measured against the record's own 48 curated features, the default run recovers 31 of them and 7 of its hits correspond to no curated feature; with the policy on it recovers 28 and 5 of its hits correspond to none. Ten hits went, two of them unsupported by the record, at a cost of 3 real recoveries. That is why the default shows the weak hits, labelled with their identity and their coverage, rather than withholding them: the judgement is yours and you cannot make it on evidence you were not shown.

The recombination-site detectors are structural rather than list-based: they look for the site's own arrangement, which is what lets them find a variant att site that no fixed list would carry.

The science

A "part" in synthetic biology is a sequence with a known function, and recognising one is a string-matching problem right up until the part has drifted. Standard parts are standard — a bla gene or a pUC origin is nearly the same sequence in every plasmid carrying it — so exact matching is correct where it fires. But real constructs carry silenced sites, codon-optimised coding sequences and truncated origins, and a corpus of full-length parts cannot be read by exact matching at all: the entries are longer than any run of identical bases a real construct shares with them. That is why an aligner is not a convenience here but the only way most of a parts corpus becomes readable.

Recombination sites are the exception that earns its own method. A Gateway att site is a core flanked by arms, and the family varies at the arms by design so that a reaction is directional — attB1 and attB2 differ on purpose. Matching those against a fixed list finds only the variants on the list.

On a circular molecule the scan wraps, so a part whose sequence crosses the origin is found with a span whose end precedes its start — the normal representation for an origin-spanning feature.

Limitations

Two classes of annotation this tool structurally cannot return, measured rather than estimated. Taking real pBR322, discarding its 48 curated features and re-annotating at the defaults recovers 31 of them (every coding sequence, both genes, the signal and mature peptides, the mobile element, the replication origin, and every one of the six old_sequence records) and misses 17. Sixteen of those 17 are shorter than 12 bases.

  • Anything under about 12 bases. Protein binding sites, Shine-Dalgarno sequences, single-base conflict records. Twelve is the seed length the corpus authority searches its own database with, and a feature shorter than the seed cannot be found by an aligner in principle. Exact matching does not rescue them either, because at that length a match is chance.
  • Record-specific curation. "gamma-delta insertion target sequence", "from pSC101 (bp 1860–1986)", single-base conflicts — these are notes a curator made about this molecule, not reusable parts. No corpus has an entry to match, and inventing one would be fabrication.

Neither is fixable by adding corpora. A user annotating a bare construct gets its parts; a user who deletes a curated record's binding-site set does not get it back.

Also true:

  • This is marked experimental and the surface can change.
  • Upstream's ranking can displace the right answer. Where two entries align over the same stretch, the longer poorer hit outranks the shorter better one, because that is how the scoring works. The acceptance policy is the control that fixes it, and the worked example above shows the case.
  • The corpora are finite. A part they do not carry is not found, and absence of a hit is not evidence of absence of the part.
  • Nineteen entries cite nothing. They are labelled, counted and never silently mixed in with sourced hits, but they cannot be verified.
  • Greedy att matching over-calls. It exists for the case where you know a site is there; treat its extra hits as candidates to check.
  • A hit is a sequence match, not a functional claim. Finding a promoter sequence does not mean it is active in your host, in that orientation, or at all.
  • A single very large record is scanned without yielding in a project run. The per-record scan runs off the main thread and stays responsive; a project run yields between records, not within one, so a 69 kb record holds the interface for the length of its own scan.
  • It annotates; it does not verify. Comparing a construct against a design is the verification tool's job.

Compared with other tools

Desktop plasmid editors ship a comparable feature, and it is one of the reasons labs buy them. Four differences are worth knowing.

Breadth, in one scan. Parts, resistance genes, fluorescent proteins and plasmid proteins are searched together with structured RNA: every family of the Rfam 15.1 release, scored with covariance models the way Rfam's own cmscan scores them, clan overlaps included. The same panel that labels an origin and a promoter finds a frameshift element or a riboswitch.

Provenance. A hit here names the corpus record it matched, that corpus's version, and its licence. Where the entry has no such record — the 19 legacy patterns — it says so, and counts how many of your hits are in that state. A named part with an unnamed origin is the norm elsewhere.

The method is visible and yours. Exact and aligned matching are separate, reported separately, and the corpus authority's acceptance bar is a switch you can see the effect of rather than a threshold baked into a vendor's detector.

Nothing is written until you agree. Hits are candidates in their own canvas lane; the apply policy tells you which of your existing features would be removed, by name, before you press anything.

Export

Nothing is exported from this panel. Accepted hits become annotations on the record, each with its citation as a /note, and the record exports in every format the Export panel offers. A project-wide run produces a report on screen and writes nothing.

Automation

All three doors run the same scan. The panel is the reference implementation; the same capability is a workflow node — it appears in the default graph as an Annotate step — and it is available to the assistant with the same parameters and the same visible defaults. The node loads its corpora asynchronously and refuses, by name, if asked to run in a context that cannot await them, rather than quietly returning fewer sources.

Provenance

  • Parts corpus — PlasMapper 3 (Wishart Lab, University of Alberta), 471 records, GPL-3.0, retrieved 2026-08-30 and checksummed. Cited as Wishart Lab, PlasMapper 3.0, Nucleic Acids Research.
  • Resistance genes — NCBI AMRFinderPlus reference gene catalogue, version 2026-08-07.1, 9,786 records, public domain as a US Government work. Cited as Feldgarden et al., AMRFinderPlus and the Reference Gene Catalog, Scientific Reports, 2021.
  • RNA families — Rfam 15.1 (EMBL-EBI), all 4,227 covariance models and the clan list, taken verbatim from the release, CC0, retrieved 2026-09-27 and checksummed. The search reproduces Infernal 1.1.5 (BSD-3).
  • Recombination sites — consensus definitions from pydna 5.5.16 (BSD-3-Clause).
  • Search parameters and scoring — the corpus authority's word size, masking and acceptance brackets, and pLannotate's ranking, read from the published implementations rather than inferred. The alignment search is the corpus authority's own: blastn's megablast mode with its word size and masking, checked alignment for alignment against real blastn 2.16.0 under that exact command on every bundled GenBank record.
  • Legacy set — 19 entries, no source recorded, and marked as such wherever they appear.

The shipped corpora are verified against their recorded checksums and record counts before they are used; a swapped or truncated corpus fails rather than annotating quietly.

Screenshots

A bare 8,355 bp backbone with no annotations at all. gibson_test_vector before the scan: 8,355 bp, zero features, nothing on the ring. This is the case the tool exists for.

Fifty-six features found on the same backbone, listed before anything is written. The same record after a default run: 56 matches across 9 types covering 66% of the molecule, each row naming the corpus record it matched with its identity and how much of the entry it covers, and the cautions this particular run earned above them. The button reads Add 56 features · nothing removed, so the count you agree to is the count you read. The hits are drawn as candidates in their own lane on the map — nothing has been written to the record yet.

Seven RNA families found on the SARS coronavirus genome, four of them marked overlapped. The SARS coronavirus genome (NC_004718) with only RNA families (Rfam) switched on: seven structured RNAs, among them the 5′ and 3′ UTR structures and the Corona_FSE frameshift element. Each row gives the bit score, the E-value and the Rfam accession; the four marked overlapped share bases with a better-scoring family and are drawn grey on the map, and the readings note that those overlaps fall within two Rfam clans, so they are the same UTR structures scored by related models. All 4,227 families were searched; both UTR structures sit whole inside the record, so the truncated passes add nothing here.

Edit annotation, to correct a boundary a hit got nearly right. Ligation and Gibson Assembly, which produce the bare products this is most useful on. Verification, which asks a different question — not what is this made of but is it what I designed.

On this page