Skip to content
Drybench Plasmid product page

Docs and methods

Drybench Plasmid.

How the plasmid map turns a sequence into a map with library features, enzyme sites, methylation outcomes, primer sites, digests and bench numbers, what it lets you take away, how each method is checked against a named oracle, and what leaves your browser (only an accession you ask NCBI for).

Updated 6 October 2026 · v0.15.0

Methods

What the app shows, how it works and how it was built, in the words of its own write-up, followed by the parameter defaults and the data sources with their licences.

What it does

Paste a sequence, a FASTA or GenBank record, open a GenBank or SnapGene .dna file (read-only), start from pUC19 or pBR322, or fetch a public record from NCBI when you ask, and the plasmid is drawn as a circular or linear map: the parts the annotation library finds on either strand and across the origin, each with the alignment's identity, coverage, mismatches and gaps; the sites of 223 commercially available restriction enzymes with dam and dcm methylation as you set it; and the sites of the shipped sequencing primers.

The digest view gives the fragments of any digest and a schematic gel, and the picker finds the single and double digests whose bands tell the correct construct from one with the insert missing or reversed. The numbers view gives the plasmid's own double-stranded weight and the ng, pmol, copies per µL and ligation amounts that follow from it. A feature you add or edit is kept on the plasmid in this browser and travels in the GenBank file you export.

How it works

Annotation seeds every library part on both strands with shared 12-base words, clusters the seeds by diagonal and aligns each cluster locally with affine gaps in a band around it (Smith and Waterman with Gotoh's gaps; match +2, mismatch −3, gap open −5, gap extend −2). A match needs 99 percent identity and 95 percent coverage; a partial match 90 and 50 percent with at least 30 aligned bases; a part under 30 bases is called only when found whole and exact. A circle is searched extended by the longest part less one base, so a part across the origin is found once.

Restriction sites are found from each enzyme's IUPAC site on both strands and across the origin, with the cuts on each strand, Type IIS cuts outside the site and cuts that fall off the end of a linear molecule. Each site's dam and dcm marks are read against McClelland, Nelson and Raschke 1994, Table I: a site with no mark cuts; a mark on a base the table lists as not cut blocks it; marks on bases listed as cut leave it cutting; anything else reads "may be blocked" and is never counted as a cut. Everything runs in a Web Worker in your browser; the data files load from this site only once a sequence is open, and nothing is fetched from another host unless you ask for an NCBI record.

How it is checked

Every enzyme row was typed by hand and checked against Biopython's Bio.Restriction (an offline oracle) on pUC19 and pBR322; the 40 golden-set enzymes' pages were read by hand. The annotation engine agrees with Biopython's PairwiseAligner, with the same scoring, on 25 alignments of library parts to other NCBI records, within 0.1 percentage points of identity and coverage and with the same place, strand, call and score; synthetic inserts on each side of every threshold are called as the thresholds say, and random sequence and the golden plasmids reversed give no match. The bench numbers equal exact rational arithmetic, and the read-only .dna reader reads synthetic files built from NCBI records exactly as Biopython's reader does. The fixture files and their hashes are on the verification page.

Equations and defaults

Feature calls
match +2, mismatch −3, gap open −5, gap extend −2 (a gap of k bases scores −5 − 2(k − 1)). identity = identical columns / alignment columns (gaps included); coverage = the feature's aligned bases / its length. This app’s annotation-calling heuristics; match: identity ≥ 99 percent and coverage ≥ 95 percent; partial: identity ≥ 90 percent and coverage ≥ 50 percent, at least 30 aligned bases; under 30 bases only whole and exact. Seeds are shared 12-base words on either strand, clustered by diagonal; each cluster is aligned in a band of 16 bases plus 2 percent of the part's length. A part with no shared 12-base word is not seeded, which is why no call does not mean a part is absent. A partial match is drawn over its aligned bases only.
Badge words
Calling thresholds are This app’s annotation heuristics, not biological standards. Exact match at 100 percent identity and coverage; otherwise Match or Partial match with the identity, coverage, mismatches and gaps (gapped columns); a partial match adds truncated (under 95 percent of the library entry aligns), mutated (under 99 percent identical) or both. Identity and coverage are shown to one decimal, truncated toward zero, so a value shown never reaches a threshold the true value has not.
Restriction sites
Each enzyme's IUPAC site is searched on both strands, across the origin of a circle by extending the sequence by the site's length less one; each site is cut on the top and bottom strands at the row's stated offsets, so Type IIS enzymes cut outside their sites and a cut beyond the end of a linear molecule is reported as off the end.
dam and dcm
dam: G-m6A-TC on both strands; dcm: C-m5C-WGG on both strands; outcomes from McClelland et al. 1994, Table I, per base and strand. A site with no mark cuts; a mark on a base McClelland et al. (1994, Table I) record as not cut blocks it; marks only on bases recorded as cut leave it cutting; anything else, including slow, partial or conflicting entries and enzymes not in Table I, reads may be blocked and is never counted as a cut. Blocked by either methylation beats may be blocked, which beats cuts. This model calls DpnI cutting for fully methylated GATC only. DpnI can cleave hemimethylated sites much more slowly (NEB reports approximately 60-fold); that behaviour is not modelled.
Counting and cutter lists
A site count reads {n} sites: {c} cut, {b} blocked, {u} may be blocked. An enzyme with any site that may be blocked is listed apart, as depends on methylation, and is left out of the unique, two-cutter and no-cutter lists and of the picker.
The digest picker
The plasmid as given, with the marked insert removed (empty) and with it reversed: single digests of every enzyme that cuts the plasmid 1 to 6 times with no site that may be blocked, and pairs of them with at most 8 cuts together, are compared by their schematic bands. Two constructs are told apart when their band counts differ or a corresponding band differs by more than 5 percent; digests that tell all three apart come first, single enzymes before pairs, the clearest separation first.
The schematic gel
schematic: band order and log10(size) spacing; under 100 bp not drawn; sizes largest first, a fragment within 5 percent (inclusive, a judgement) of a band's largest fragment joins that band and may not resolve. A digest with one site that may be blocked draws two lanes, if it cuts and if blocked; with more than one such site no lane is drawn.
Primer sites
Exact and one-mismatch sites of the shipped primers on both strands and across the origin, sorted by position; a mismatch's place is counted from the primer's 3′ end (1 is the 3′-terminal base). The Tm is the primer's against a perfect match, from the sequence module (SantaLucia 1998 nearest-neighbour parameters, primer in excess at 250 nM, 50 mM Na⁺, no Mg²⁺), and is not given for a mismatched site.
Bench numbers
MW: both strands, residues as dNMP less water, CIAAW 2021 atomic weights; circular: no end groups; linear: 5′-OH ends. pmol = ng × 1000 / MW; copies = ng × 10⁻⁹ × N_A / MW (N_A = 6.02214076 × 10²³); insert ng = vector ng × (insert bp / vector bp) × ratio. The 650 Da per base pair rule is shown beside the exact weight as the approximation it is.
Inputs
Pasted letters, FASTA and GenBank records (the first record of a file), and SnapGene .dna files read-only by a reader of the public packet structure that knows the cookie, DNA, features, primers and notes packets and refuses any other, a truncated file, a declared length that disagrees with the sequence and an unknown format version. Up to 50,000 bp; IUPAC letters other than A, C, G and T are kept and never match a site.

Data sources, licences and versions

Sources and licences

  • NCBI GenBank nucleotide recordsNo NCBI restrictions; depositor terms may apply

    The annotation library's 90 parts, each cut from a feature its record's submitters annotated, with the accession, location and retrieval date; the pUC19 (L09137.2) and pBR322 (J01749.1) examples; the primers' binding-site checks; and the record you fetch by accession when you ask.

    Records cited by accession and version; NCBI policies read 5 October 2026.

    NCBI policies

  • UniProtCC BY 4.0

    The protein entries UniProt cross-references to the library's protein-coding parts, so a CDS opens in the protein app by accession.

    The UniProt Consortium. UniProt: the Universal Protein Knowledgebase in 2025. Nucleic Acids Res 2025;53:D609-D617.

  • McClelland, Nelson and Raschke 1994 (dam and dcm sensitivity)Data (cited)

    Each enzyme's entries for N6-methyladenine (dam, GATC) and 5-methylcytosine (dcm, CCWGG) at each base and strand, with the page of Table I; an enzyme or base with no entry reads "may be blocked".

    McClelland M, Nelson M, Raschke E. Effect of site-specific modification on restriction endonucleases and DNA modification methyltransferases. Nucleic Acids Res 1994;22(17):3640-3659, Table I (read 6 October 2026).

  • The enzyme table (recognition sites and cuts as published facts)Our own content

    223 commercially available enzymes in common use, typed by hand, each with its recognition site, its cut on each strand and a link to the enzyme's public page; isoschizomers kept where the cut or the methylation sensitivity differs.

    Enzyme table version 1, built 2026-10-06.

  • Smith and Waterman 1981; Gotoh 1982 (local alignment with affine gaps)Method (cited)

    The local alignment behind every feature call, with the scoring stated on the methods page.

    Smith TF, Waterman MS. Identification of common molecular subsequences. J Mol Biol 1981;147:195-197. Gotoh O. An improved algorithm for matching biological sequences. J Mol Biol 1982;162:705-708.

  • Vector makers' manuals (sequencing primer names)Data (cited)

    The name of each shipped primer, exactly as its maker's manual gives it: Thermo Fisher Scientific's TOPO TA Cloning Kit (MAN0000047), pcDNA3.1 (version K) and pcDNA3.4-TOPO TA (MAN0007209) user guides, and Promega's pGEM-T and pGEM-T Easy Vector Systems manual (TM042); no text copied.

    Read 6 October 2026. Each primer is also found exactly at a binding site in an NCBI record.

  • Geier and Modrich 1979 (DpnI)Method (cited)

    DpnI's blunt cut, GA^TC, 3′ of the methylated adenine, beside McClelland 1994's entry that it cuts only GATC methylated on both strands.

    Geier GE, Modrich P. Recognition sequence of the dam methylase of Escherichia coli K12 and mode of cleavage of Dpn I endonuclease. J Biol Chem 1979;254(4):1408-1413 (abstract read 6 October 2026).

  • DNA ladder product sheets (band sizes)Data (cited); use to be checked

    Each ladder's band sizes, typed by hand from its supplier's product sheet; drawn as listed, never used to size or match a band.

    Sheets MAN0013004 and MAN0013047, Rev. D.00, read 17 October 2026.

  • The plasmid map's fixturesMIT

    The oracle values the engine is checked against, the synthetic .dna files and the hand-worked methylation cases, written by the pipeline's scripts.

    pipeline/plasmid-map/reference.py and make-dna-fixtures.py (the suite's authors, 6 October 2026).

Times on screen are local time with the UTC offset; times in exports are UTC. Dates with no time are shown at the precision the source gave them.

Exports

The Export menu offers the features, the enzyme sites, the digest's fragments, the primer sites and the numbers as CSV with the provenance sidecar; the map and the schematic gel as SVG or PNG with the provenance embedded; a printed page with the map, the feature table and the digest; the plasmid as a GenBank file with every feature, and as FASTA. A GenBank file written here is never presented as an NCBI record: its ACCESSION and VERSION lines are a single full stop, the source record is named in its COMMENT, each feature the library found carries /provenance="library" with the library version, the badge and the licence in its /note, and a feature you added or edited carries /provenance="added" or "edited" and none of the source's identifiers.

CSV columns

Features
name, type, start, end, strand, length_bp; call (Exact match, Match, Partial match or empty for a feature that is not a library call); identity_pct and coverage_pct to four decimals, truncated; identical, columns, mismatches, gaps (gapped columns), gloss and aligned_bases; local_alignment_score, the local alignment's score under the scheme in the methods (match +2, mismatch −3, gap open −5, gap extend −2; a gap of k bases scores −5 − 2(k − 1)), for re-deriving a call and never a quality measure: for a feature under 30 bases no alignment runs and it is set to twice the length; provenance (library, record, file, added or edited); source_accession, source_location, licence; and uniprot, the accession only when the call carries it (a full-length match whose translation is identical to the entry's canonical sequence).
Enzyme sites
enzyme, site, position (the site's first base), strand, cut_after_top, cut_after_bottom; cut_call (cuts, blocked or unknown); methylation (none, blocked, not-blocked, not-recorded or needs-methylation); methylase (dam, dcm or both); host_methylation, one of the tokens dam-dcm (E. coli, dam positive and dcm positive), dam (dam positive, dcm negative), dcm (dam negative, dcm positive), none (dam negative, dcm negative) or unmethylated (a PCR product or synthetic DNA); methylation_source.
Fragments
size_bp, from, to, left_enzyme, right_enzyme, and variant (if it cuts or if blocked, where one site may be blocked); the host is in the provenance.
Primer sites
primer, position, end, strand, mismatches, mismatch_from_3prime (1 is the 3′-terminal base; empty at an exact site), tm_c (empty at a mismatched site).
Numbers
quantity, value, unit and formula, each row as shown.

Release gate: before the app leaves the preview, its exports and printed reports will carry the data versions, parameters, limits and a timestamp needed to reproduce a result, as the regulatory position says. This section will describe each format as it ships.

Sharing a map with a class

A link carries a public example, an NCBI accession or the sequence of a plasmid up to about 5,500 bp, with the chosen enzymes, the methylation setting, the data versions and the view; it opens identically next year because it names the versions it was made with. Use links for public examples, accessions and unedited plasmids of that size.

A GenBank file carries everything else: a larger plasmid, the features of a file you opened, and your own feature edits, each marked as yours. Copy link says so when the view holds something a link cannot carry, and offers the GenBank file first. On the same browser, Send to carries a plasmid of any size to another app.

Verification

Each module below is a set of automated tests in the app's source code, with the expected results written into the tests. They check the app's logic against recorded inputs and stored reference records; none of them calls a live service.

src/lib/seq/digest.test.ts
Every enzyme row against Biopython 1.88 Bio.Restriction (its data are REBASE release 404, an offline oracle only): 223 enzymes on pUC19 and pBR322 (446 cases), cut positions exact, the 40 golden-set counts against the enzymes' pages read by hand, 6 double digests, the sites across the origin, Type IIS cuts off the end of a line, and the picker's pool and verdicts on the correct, empty and reversed trio.
src/lib/seq/methylation.test.ts
19 cases worked by hand from McClelland et al. 1994, Table I, and the cited blocked examples on pUC19 and pBR322; the reasons by category; blocked beats may be blocked.
src/lib/seq/features/annotate.test.ts
26 alignments against Biopython's PairwiseAligner (identity and coverage within 0.1 percentage points; place, strand, call and score exact), 12 synthetic boundary cases, and the specificity test: no match and 0 partial calls on 10 seeded random sequences of 10,000 bp and both golden plasmids reversed.
src/lib/seq/features/primers.test.ts and snapgene.test.ts
Each shipped primer at its NCBI binding site; one-mismatch places on both strands and across the origin. The .dna reader against Biopython's SnapGene reader on 6 synthetic files built from NCBI records, every feature recovered, and 4 refusal files refused for their stated reasons. Real SnapGene files are checked only at the pre-live pass.
src/lib/seq/dna-amounts.test.ts
11 cases against exact rational arithmetic, to full double precision.
src/components/tools/plasmid-map/genbank-export.test.ts
The GenBank export read back by Biopython 1.88: ACCESSION '.', /provenance kept, no identifier on a feature you added or edited, every /note ASCII, and every CDS's /translation equal to Biopython's or left out where Biopython refuses it.
src/lib/seq/plasmid-examples.test.ts
The worked examples' golden fixtures, written once by the oracle: every call, the UniProt check of each linked CDS call, every primer site and every enzyme's cut count on pUC19 and pBR322.
pipeline/plasmid-map/reference.py and make-dna-fixtures.py
The oracle script (Python 3.11, Biopython 1.88) and the build-time .dna writer, MIT; the fixtures' hashes are in fixtures/manifest.json, and the writer is never imported by the app.

Every row is one fixture compared with the engine when this page was built; the full sets are the published files, which pipeline/plasmid-map/reference.py wrote and whose hashes its manifest records. No value in a file comes from the engine under test.

Every enzyme's cut positions and fragments on pUC19 and pBR322, and the double digests

Biopython 1.88 Bio.Restriction (REBASE release 404, an offline oracle); tolerance: exact. 458 cases, all passing; the first 12 shown. digests.json sha256 4b39c25d5bb5f091

Uses no annotation library.

CaseOracleThis enginePass
AarI on L09137.2no siteno siteyes
AarI on J01749.1no siteno siteyes
AatII on L09137.2cuts after 2,622cuts after 2,622yes
AatII on J01749.1cuts after 4,289cuts after 4,289yes
AbsI on L09137.2no siteno siteyes
AbsI on J01749.1no siteno siteyes
Acc65I on L09137.2cuts after 409cuts after 409yes
Acc65I on J01749.1no siteno siteyes
AccI on L09137.2cuts after 431cuts after 431yes
AccI on J01749.1cuts after 653, 2,246cuts after 653, 2,246yes
AciI on L09137.2cuts after 76, 115, 125, 151, 189, 202, 228, 285, 497, 600, 656, 666, 690, 733, 740, 761, 852, 880, 1,007, 1,026, 1,147, 1,257, 1,392, 1,401, 1,763, 1,854, 2,045, 2,091, 2,212, 2,256, 2,333, 2,442, 2,541, 2,588cuts after 76, 115, 125, 151, 189, 202, 228, 285, 497, 600, 656, 666, 690, 733, 740, 761, 852, 880, 1,007, 1,026, 1,147, 1,257, 1,392, 1,401, 1,763, 1,854, 2,045, 2,091, 2,212, 2,256, 2,333, 2,442, 2,541, 2,588yes
AciI on J01749.1cuts after 40, 182, 290, 299, 302, 426, 579, 582, 585, 704, 724, 803, 843, 892, 939, 1,024, 1,039, 1,107, 1,140, 1,165, 1,210, 1,234, 1,246, 1,288, 1,342, 1,395, 1,411, 1,417, 1,498, 1,636, 1,765, 1,768, 1,779, 1,935, 1,951, 2,006, 2,062, 2,147, 2,186, 2,196, 2,238, 2,263, 2,301, 2,314, 2,340, 2,357, 2,400, 2,407, 2,428, 2,519, 2,547, 2,674, 2,693, 2,814, 2,924, 3,059, 3,068, 3,430, 3,521, 3,712, 3,758, 3,879, 3,923, 4,000, 4,109, 4,208, 4,255cuts after 40, 182, 290, 299, 302, 426, 579, 582, 585, 704, 724, 803, 843, 892, 939, 1,024, 1,039, 1,107, 1,140, 1,165, 1,210, 1,234, 1,246, 1,288, 1,342, 1,395, 1,411, 1,417, 1,498, 1,636, 1,765, 1,768, 1,779, 1,935, 1,951, 2,006, 2,062, 2,147, 2,186, 2,196, 2,238, 2,263, 2,301, 2,314, 2,340, 2,357, 2,400, 2,407, 2,428, 2,519, 2,547, 2,674, 2,693, 2,814, 2,924, 3,059, 3,068, 3,430, 3,521, 3,712, 3,758, 3,879, 3,923, 4,000, 4,109, 4,208, 4,255yes

dam and dcm outcomes, worked by hand

McClelland et al. 1994, Table I; tolerance: exact. 19 cases, all passing; the first 12 shown. methylation.json sha256 3b72a819ada98d26

Uses no annotation library.

CaseOracleThis enginePass
M01: XbaI, dam on, dcm oncutcutyes
M02: XbaI, dam on, dcm onblockedblockedyes
M03: XbaI, dam on, dcm onblockedblockedyes
M04: BamHI, dam on, dcm onnot-blockednot-blockedyes
M05: BsaWI, dam on, dcm onnot-recordednot-recordedyes
M06: AhdI, dam on, dcm onnot-recordednot-recordedyes
M07: EcoRII, dam on, dcm onblockedblockedyes
M08: BstNI, dam on, dcm onnot-blockednot-blockedyes
M09: StuI, dam on, dcm onblockedblockedyes
M10: XbaI, dam on, dcm onblockedblockedyes
M11: BglI, dam on, dcm onnot-recordednot-recordedyes
M12: DpnI, dam on, dcm oncuts-methylatedcuts-methylatedyes

The digest picker on the correct, empty and reversed trio (trio v2, gel rules 2)

Biopython 1.88 Bio.Restriction; tolerance: the pool, every band and every verdict exact. 4,158 cases, all passing; the first 12 shown. trio-v2.json sha256 fd62948a014229b7

Uses no annotation library.

CaseOracleThis enginePass
the constructs and the pool95 enzymes; the constructs' SHA-25695 enzymes; the same constructsyes
AatIIdoes notdoes notyes
Acc65Idoes notdoes notyes
AccIdoes notdoes notyes
AclIdoes notdoes notyes
AcuItells all three aparttells all three apartyes
AflIIIdoes notdoes notyes
AhdIdoes notdoes notyes
AlwNIdoes notdoes notyes
ApaLIdoes notdoes notyes
ApoIdoes notdoes notyes
AseIdoes notdoes notyes

Band grouping on the schematic gel, worked by hand

Hand-worked cases with exact fractions; tolerance: every band exact; the 5 percent boundary inclusive. 11 cases, all passing; the first 11 shown. gel-bands-v1.json sha256 565950590c2bf04a

Uses no annotation library.

CaseOracleThis enginePass
chain-1000-960-922: 1000, 960, 922 bp[1000, 960] [922][1000, 960] [922]yes
boundary-inclusive: 1000, 950 bp[1000, 950][1000, 950]yes
boundary-just-over: 1000, 949 bp[1000] [949][1000] [949]yes
four-member-run: 2000, 1980, 1950, 1900 bp[2000, 1980, 1950, 1900][2000, 1980, 1950, 1900]yes
long-run-splits: 2000, 1960, 1920, 1880, 1840 bp[2000, 1960, 1920] [1880, 1840][2000, 1960, 1920] [1880, 1840]yes
under-100-not-drawn: 3000, 100, 99, 60 bp[3000] [100][3000] [100]yes
near-100: 105, 100 bp[105, 100][105, 100]yes
equal-sizes: 500, 500, 500 bp[500, 500, 500][500, 500, 500]yes
equal-then-boundary: 1000, 1000, 950, 949 bp[1000, 1000, 950] [949][1000, 1000, 950] [949]yes
unsorted-input: 922, 1000, 960 bp[1000, 960] [922][1000, 960] [922]yes
all-under-100: 99, 50, 10 bpno bandno bandyes

Feature alignments and threshold boundaries

Biopython 1.88 PairwiseAligner; tolerance: identity and coverage within 0.1 percentage points; place, call and score exact. 26 cases, all passing; the first 12 shown. features.json sha256 a523a03a76efcc1a

Checked against annotation library 1.

CaseOracleThis enginePass
F01: bla on X65304.3match, 99.77% identity, 100.00% coverage at 1265match, 99.77% identity, 100.00% coverage at 1265yes
F02: bla on U47120.2match, 99.77% identity, 100.00% coverage at 3780match, 99.77% identity, 100.00% coverage at 3780yes
F03: bla on AF025843.2match, 99.77% identity, 100.00% coverage at 2393match, 99.77% identity, 100.00% coverage at 2393yes
F04: bla on U13853.1match, 100.00% identity, 100.00% coverage at 1377match, 100.00% identity, 100.00% coverage at 1377yes
F05: nptII on U55762.1match, 99.75% identity, 100.00% coverage at 2629match, 99.75% identity, 100.00% coverage at 2629yes
F06: nptII on U47120.2match, 100.00% identity, 100.00% coverage at 2463match, 100.00% identity, 100.00% coverage at 2463yes
F07: nptII on AY048743.1match, 100.00% identity, 100.00% coverage at 459match, 100.00% identity, 100.00% coverage at 459yes
F08: cat on LC760188.1match, 100.00% identity, 100.00% coverage at 3344match, 100.00% identity, 100.00% coverage at 3344yes
F09: lacI on U13853.1match, 99.91% identity, 100.00% coverage at 3318match, 99.91% identity, 100.00% coverage at 3318yes
F10: egfp on U55763.1match, 100.00% identity, 99.72% coverage at 613match, 100.00% identity, 99.72% coverage at 613yes
F11: cmvEnhancer on AF025843.2match, 99.85% identity, 99.85% coverage at 7match, 99.85% identity, 99.85% coverage at 7yes
F12: cmvPromoter on AF025843.2match, 100.00% identity, 100.00% coverage at 667match, 100.00% identity, 100.00% coverage at 667yes

ng, pmol, copies, ligation and the weights

Python fractions (exact arithmetic); tolerance: 1e-12 relative. 11 cases, all passing; the first 11 shown. amounts.json sha256 b796d93baed8c741

Uses no annotation library.

CaseOracleThis enginePass
A01: pmol0.60252088350938960.6025208835093896yes
A02: pmol0.185541212865623470.18554121286562347yes
A03: copies-per-ul3628465571.3331073628465571.333107yes
A04: copies-per-ul223471060.13158152223471060.13158152yes
A05: ligation-insert-ng40.2084884586746140.20848845867461yes
A06: ligation-insert-ng26.80565897244973826.80565897244974yes
A07: ligation-insert-ng57.3263013070396757.32630130703967yes
A08: pmol-approximate0.57277049086431060.5727704908643106yes
A09: ng-for-copies27.55985912889887527.559859128898875yes
A10: mw1659693.511659693.51yes
A11: mw2694819.0772694819.077yes

Synthetic .dna files and refusals

Biopython 1.88 SnapGene reader; tolerance: sequence and topology identical; every feature recovered; refusals for the stated reason. 10 cases, all passing; the first 10 shown. dna-files.json sha256 74f5f2b35995cb89

Uses no annotation library.

CaseOracleThis enginePass
dna/refuse-length-mismatch.dnarefused: length-mismatchrefused: length-mismatchyes
dna/refuse-truncated.dnarefused: truncatedrefused: truncatedyes
dna/refuse-unknown-packet.dnarefused: unknown-packetrefused: unknown-packetyes
dna/refuse-unknown-version.dnarefused: unknown-versionrefused: unknown-versionyes
dna/synthetic-2micron-origin.dna6318 bp circular; 40 features6318 bp circular; 40 of 40 recoveredyes
dna/synthetic-lac-linear.dna7477 bp linear; 15 features7477 bp linear; 15 of 15 recoveredyes
dna/synthetic-pbr322.dna4361 bp circular; 46 features4361 bp circular; 46 of 46 recoveredyes
dna/synthetic-pcineo.dna5472 bp circular; 13 features5472 bp circular; 13 of 13 recoveredyes
dna/synthetic-pgem3z-origin.dna2743 bp circular; 13 features2743 bp circular; 13 of 13 recoveredyes
dna/synthetic-puc19-linear.dna2686 bp linear; 0 features2686 bp linear; 0 of 0 recoveredyes

The GenBank export read back

Biopython 1.88 GenBank parser; tolerance: translations equal or refused alike; ACCESSION '.'; no identifier on a person's feature. 11 cases, all passing; the first 11 shown. genbank.json sha256 da83de6798455d21

Uses no annotation library.

CaseOracleThis enginePass
pbr322-edits CDS 1 (edited)Biopython refusesnone written (Final codon 'ATG' is not a stop codon)yes
pbr322-edits CDS 2 (library)Biopython's translation/translation writtenyes
pbr322-edits CDS 3 (edited)Biopython's translation/translation writtenyes
pbr322-edits CDS 4 (as received)Biopython's translation/translation writtenyes
pbr322-edits CDS 5 (added)Biopython refusesnone written (First codon 'ACC' is not a start codon)yes
pbr322-edits CDS 6 (library)Biopython's translation/translation writtenyes
pbr322-edits CDS 7 (as received)Biopython's translation/translation writtenyes
puc19-edits misc_feature 1 (added)ASCII notes, no identifierASCII notes, no identifieryes
puc19-edits CDS 2 (edited)Biopython's translation/translation writtenyes
puc19-edits CDS 3 (added)Biopython refusesnone written (First codon 'GAG' is not a start codon)yes
puc19-edits CDS 4 (added)Biopython refusesnone written (Final codon 'TGG' is not a stop codon)yes

The worked examples' golden fixtures (every file the examples manifest lists, published beside it)

Biopython 1.88; tolerance: exact. 12 cases, all passing; the first 12 shown. examples-manifest.json sha256 9ad77b5d2e896d76

Each file is checked against its own annotation library: library 1 for puc19@1.json and pbr322@1.json; library 2 for puc19@2.json and pbr322@2.json.

CaseOracleThis enginePass
puc19@1.json: calls and UniProt checks6 calls6 callsyes
puc19@1.json: primer sites44yes
puc19@1.json: cut counts223 enzymes223 agreeyes
pbr322@1.json: calls and UniProt checks4 calls4 callsyes
pbr322@1.json: primer sites00yes
pbr322@1.json: cut counts223 enzymes223 agreeyes
puc19@2.json: calls and UniProt checks7 calls7 callsyes
puc19@2.json: primer sites44yes
puc19@2.json: cut counts223 enzymes223 agreeyes
pbr322@2.json: calls and UniProt checks5 calls5 callsyes
pbr322@2.json: primer sites00yes
pbr322@2.json: cut counts223 enzymes223 agreeyes

Published verification sets

MethodsOracleFixturesToleranceDateFile
sequence-primer-featuresIndependent Sequence handoff43full incorporated PCR primers, exact witnessed template sites, wrapped strands, refusal and omission counts exact; supplied annotations preserved2026-10-11sequence-handoff-v1.json
ds-fragment-ends, restriction-cloning, golden-gateBiopython67strand chemistry and paired cores exact; circular products identical up to rotation and strand; overlapping cuts refused2026-10-11assembly-boundaries.json
ds-fragment-ends, restriction-cloningBiopython1coincident top cuts with distinct opposite-strand cuts refused2026-10-11assembly-cut-refusals-v1.json
assembly-recordIndependent assembly records10shape, exact hashes, topology, parent references and method-specific accounting; malformed provenance refused, stale provenance dropped with reason2026-10-11assembly-record-v2.json
assembly-recordIndependent assembly records19exact input/junction totals, parent roles, junction counts and method-specific alternatives; balanced false claims refused2026-10-11assembly-record-refusals-v1.json
restriction-sites, restriction-digestBiopython446cut positions and fragment lengths exact; the unique-cutter sets identical2026-10-06digests.json
dam-dcm-blockingMcClelland et al. 1994, Table I21outcomes exact2026-10-06methylation.json
diagnostic-digest-pickerBiopython4157the pool, bands and verdicts exact (gel rules 2)2026-10-17trio-v2.json
gel-schematicHand-worked band grouping11bands exact2026-10-17gel-bands-v1.json
feature-annotationBiopython38identity and coverage within 0.1 percentage points; place, strand, call and score exact2026-10-06features.json
feature-annotationBiopython4017every pair of library 2's parts aligned with the same scoring: calls, places, strands and buckets exact; no call on the random controls2026-10-17specificity-v2.json
feature-annotationBiopython14the call shown at each locus, the parts named beside it and the inside labels exact2026-10-17specificity-display.json
dam-dcm-blockingIndependent second implementation (reference.py can_carry)82which enzymes' sites can carry a dam or dcm methylated base, exact; whether Table I lists the enzymes without a row is not checked2026-10-17methylation-absence-rule.json
plasmid-dna-amountsPython fractions11full double precision (1e-12 relative)2026-10-06amounts.json
snapgene-readBiopython10sequence and topology identical; every feature recovered; refusals for the stated reason2026-10-06dna-files.json
ds-fragment-endsHand-worked double-stranded ends13every overhang, polarity and compatibility verdict exact2026-10-10ds-ends.json
restriction-cloningHand-worked restriction clones5every product exact up to rotation and strand; refusals for the stated reason; material conserved2026-10-10restriction-cloning.json
golden-gateHand-worked Golden Gate assemblies7the scarless product exact up to rotation and strand, no recognition site surviving; refusals for the stated reason2026-10-10golden-gate.json
gibson-styleHand-worked Gibson assemblies7the product exact (a circle up to rotation and strand), each overlap collapsed once, material conserved; refusals for the stated reason2026-10-10gibson.json
crispr-spcas9-guidesIndependent SpCas9 enumeration21every position, strand, protospacer, PAM, GC, homopolymer run, within-sequence count and origin crossing exact; no score2026-10-10crispr.json

Oracles and build-time tools

Software the app's numbers were checked against, or its data built with. None of it ships with the app or is a dependency of it.

  • Independent Sequence handoff sequence-handoff.py with Biopython 1.88 (MIT (script); Biopython License Agreement; Oracle; 2026-10-11). independently re-extracted product and template footprints, paired omissions, immutable qualifications and malformed receipt refusals
  • Independent assembly records assembly-boundaries.py (MIT; Oracle; 2026-10-11). hand-authored record cases based on previously published independent products, with Python hashlib hashes and method-specific conservation
  • Biopython 1.88 (Biopython Licence Agreement or BSD-3-Clause; Oracle; 2026-10-06). Bio.Restriction to check every enzyme row and cut position, PairwiseAligner for the feature alignments, and the SnapGene reader for the synthetic .dna files; never shipped
  • Independent second implementation (reference.py can_carry) reference.py absences (MIT; Oracle; 2026-10-17). which enzymes' sites can carry a dam or dcm methylated base, by expanding each site's IUPAC codes; shares no code with the engine and calls no Biopython
  • Python fractions 3.11 (PSF-2.0; Oracle; 2026-10-06). exact arithmetic for the bench numbers
  • Hand-worked band grouping reference.py gel (MIT; Oracle; 2026-10-17). band-grouping cases worked by hand with exact fractions
  • McClelland et al. 1994, Table I Nucleic Acids Res 22:3640 (Cited data (read by hand); Oracle; 2026-10-06). the methylation outcomes, each case worked by hand from the table's entries
  • Hand-worked double-stranded ends ds-ends.py with Biopython 1.88 (MIT (the script); Biopython Licence Agreement (BSD-3-Clause file by file); Oracle; 2026-10-10). the overhang, polarity and compatibility of restriction ends, each case worked by hand and re-derived from a two-strand drawing
  • Hand-worked restriction clones restriction-cloning.py with Biopython 1.88 (MIT (the script); Biopython Licence Agreement (BSD-3-Clause file by file); Oracle; 2026-10-10). recombinant products worked out by hand and round-tripped by Bio.Restriction, which digests each product back into the insert and backbone cores; reverse complements by Biopython
  • Hand-worked Golden Gate assemblies golden-gate.py with Biopython 1.88 (MIT (the script); Biopython Licence Agreement (BSD-3-Clause file by file); Oracle; 2026-10-10). BsaI and BsmBI assemblies built around a chosen scarless product; Bio.Restriction confirms the released overhangs and that no recognition site survives in the product; reverse complements by Biopython
  • Hand-worked Gibson assemblies gibson.py with Biopython 1.88 (MIT (the script); Biopython Licence Agreement (BSD-3-Clause file by file); Oracle; 2026-10-10). exact-overlap assemblies built from a chosen product; the product is re-derived by an independent concatenation and base-accounted; reverse complements by Biopython
  • Independent SpCas9 enumeration crispr.py with Biopython 1.88 (MIT (the script); Biopython Licence Agreement (BSD-3-Clause file by file); Oracle; 2026-10-10). every NGG guide found by one regular-expression search for a protospacer and its PAM, run over the sequence for the + strand and over the Biopython reverse complement for the − strand with positions mapped back, one case worked by hand base by base with a write-refusal guard, and GC, homopolymer run and the within-sequence occurrence count computed independently; no score

Security overview

Scientific computation runs in your browser, and individual apps need no account. Optional Bench accounts and backups use the site server and configured providers. The privacy statement, the hosts it contacts and the headers its workspace is served with are generated from its registry entry, the same record that sets the browser's policy.

What leaves your browser

What leaves your device. Requests for Drybench Plasmid's own files (pages, scripts, data files and images) go to the host that serves it. That host keeps standard web-server logs (IP address, user agent, requested address, time). Anything in the address bar before the # (a search, a SMILES, an accession or a step) is sent to this site's host when a page loads or a link is opened; anything after the # is not sent. The name you type is sent to eutils.ncbi.nlm.nih.gov only when you confirm the lookup: never a structure, never a project, never a list of names without a confirmation that shows the list. The app carries no analytics and no error reporting, and loads no font or script from any other origin. Optional Bench sign-in and billing contact the site server and its configured account providers; choosing an account backup uploads the selected Study.

What stays on your device. Your plasmids, your feature edits and the digests you choose, your preferences, and anything you have not chosen to export, share or back up to your account. They live in this browser's storage on this device.

Where you choose to send data. A link you copy carries what you were looking at (the plasmid sequence while it fits (up to about 5,500 bp), the chosen enzymes and the view, never your feature edits); anyone who receives it can read it, and mail and chat tools may fetch the link to show a preview. Names are sent to eutils.ncbi.nlm.nih.gov only after you confirm, and the record shows which names were sent. A file you export or share goes wherever you send it.

Hosts the app contacts

  • eutils.ncbi.nlm.nih.gov

    Operator
    NCBI, US National Library of Medicine
    What for
    Fetching a public nucleotide record by accession, only when you press Fetch from NCBI.
    What it receives
    The accession you typed or a link armed, and your IP address
    When
    only when you confirm
    • one accession: 1 request

Headers the workspace is served with

These are the exact header values, generated from the app's registry entry.

Content-Security-Policy
default-src 'self'; script-src 'self' 'unsafe-inline'; worker-src 'self' blob:; connect-src 'self' https://eutils.ncbi.nlm.nih.gov blob:; img-src 'self' data: blob:; style-src 'self' 'unsafe-inline'; font-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'
Referrer-Policy
no-referrer
Permissions-Policy
camera=(), microphone=(), geolocation=(), payment=(), usb=()
X-Content-Type-Options
nosniff
Cross-Origin-Opener-Policy
same-origin

Limits

  1. 1. For research and education only, and not medical advice: plasmid maps and sequence assembly designs. A designed product is not evidence that the reaction occurred; nothing here predicts expression or how well a reaction will work.
  2. 2. Enzyme sites and cut positions are from a hand-curated table of 223 enzymes (version 1, built 2026-10-06); it may differ from a vendor's list, so check NEBcutter before a critical digest. Star activity, Type IIB and nicking enzymes are not modelled.
  3. 3. Methylation blocking is called only where McClelland et al. (1994) record it; elsewhere a site reads 'may be blocked: sensitivity not recorded', which means unknown, never 'cuts'. 25 of the 82 enzymes whose site can carry a dam or dcm methylated base have no row in this app's copy of Table I, and whether Table I lists them has not been checked.
  4. 4. Only dam (GATC) and dcm (CCWGG) methylation are modelled; EcoKI, CpG and other host methylation are not, and neither is hemimethylated DNA for DpnI.
  5. 5. Feature badges are alignment matches to public records: evidence of sequence, not of function.
  6. 6. No call does not mean the feature is absent: a feature is called only if it is one of the library's 90 features and its alignment passes the thresholds; features under 30 bases are called only when found whole and exact.
  7. 7. The gel is schematic: band order and spacing by the logarithm of size only, no millimetre or Rf positions; fragments under 100 bp are not drawn; a band holds the fragments within 5 percent of its largest (a judgement), which may not resolve; the forms of uncut DNA are not modelled.
  8. 8. A ladder lane draws its sheet's sizes as listed; the gel gives no band positions, no sizing by interpolation, no match with a ladder band, no migration at any agarose percentage and no supercoiled or nicked behaviour.
  9. 9. Primer sites are exact and one-mismatch sites of the shipped primers; whether a primer primes at a mismatched site is not assessed, and a Tm is given only against a perfect match.
  10. 10. SnapGene .dna files are read-only, and a file with a block this reader does not know is refused; the reader is checked on synthetic files built from NCBI records.
  11. 11. Opening a public accession sends it, and your IP address, to NCBI; pasted sequences and files do not leave your browser.
  12. 12. Plasmids up to 50,000 bp. A link carries a plasmid up to about 5,500 bp; a larger plasmid travels as a GenBank file or by Send to on this browser, and your feature edits travel only in a GenBank file.
  13. 13. Not biosafety advice. Follow your institution's rules for viral vectors and selection markers.
  14. 14. No offline use: the pages are served by the site, and nothing is installed.
  15. 15. Assembly is sequence design, not evidence of a reaction. Restriction and Golden Gate refuse overlapping staggered cleavage intervals; restriction selects the longest enzyme-ended fragments and reports compatible orientations. Golden Gate supports BsaI and BsmBI. Gibson takes 2–6 ordered linear fragments with exact terminal homology of at least 15 bp and no repeated homology on either strand. Products are limited to 50,000 bp. No repair, efficiency or experimental-success prediction is made.

Where it runs and what it sends

  1. Open a plasmidPaste the letters or a record, drop a GenBank or .dna file, open an example, or type an accession and fetch it from NCBI when you choose; nothing is sent until you press Fetch.
  2. Read the mapFeatures, enzyme sites and primer sites are drawn on a circular or linear map, with the feature table as the same information in text; arrow keys walk the features and Enter opens one in the inspector.
  3. Pick a digestChoose enzymes or let the picker find a digest that tells the correct construct from an empty or reversed one, then read the fragments and the schematic gel.
  4. Keep it, share itKeep the plasmid in this browser, edit its features, send it to the sequence or assay app, and share it as a link while it is small or as a GenBank file with your edits.

Built for the keyboard and for screen readers

Everywhere in the app

Show every keyboard shortcut
?
Go to the search field
/
Open the command palette
ControlK
Open Settings
Control,
Close the innermost panel, menu or dialog
Escape

In this app

Go to the map
1
Go to the features
2
Go to the digest
3
Go to the sequence
4
Go to the numbers
5
Go to the explainers
6
Go to assembly
7
Reset the map view
r

Single-key shortcuts work outside text fields and can be turned off in Settings.

Commitments

  • Controls work from the keyboard, with focus always visible.
  • One polite live region announces what changes, for screen readers.
  • Reduced motion is honoured, from your system setting or the app's own switch.
  • Works at 375 px wide.

Questions buyers ask

Which enzymes are in the table?

223 commercially available Type II enzymes in common use for mapping and cloning, typed by hand from published facts, with isoschizomers kept as separate rows where the cut or the methylation sensitivity differs. Type IIB, nicking, homing and Type III enzymes are not in it, and an enzyme the table lacks reads "not in this table", never "no sites". Every row was checked against Biopython's Bio.Restriction on pUC19 and pBR322; check NEBcutter before a critical digest.

What does "may be blocked" mean?

A dam (GATC) or dcm (CCWGG) mark falls on the site, and McClelland et al. (1994, Table I) record nothing that settles whether the enzyme cuts it: no entry, only slow or conflicting entries. The app treats such a site as unknown, never as a cut: it is left out of the cutter lists and the picker, and a digest with one such site shows both outcomes. Set the DNA as a PCR product or synthetic DNA and the marks go away.

How sure is a feature call?

Each call is an alignment to a part cut from an NCBI record, with its identity (identical columns over all columns, gaps included), coverage (the part's aligned bases over its length), mismatches and gaps. This app’s annotation heuristics require 99 percent for a match identity and 95 percent coverage; a partial match 90 and 50 percent with 30 aligned bases; parts under 30 bases are called only when found whole and exact. It is evidence of sequence, not of function, and no call does not mean a part is absent: the library is small, and its gaps are listed.

Is the gel a prediction of where bands will run?

No. The gel is schematic: it orders the bands and spaces them by the logarithm of size, with no millimetre or Rf positions, because no calibrated mobility model is used. Fragments under 100 bp are not drawn; a band holds the fragments within 5 percent of its largest (a judgement), marked as possibly unresolved.

Can I open a SnapGene .dna file?

Yes, read-only: its sequence, features, primers and notes are read by a reader written from the public packet structure, and a file containing a block the reader does not know is refused with the reason. The reader has been checked on synthetic files built from NCBI records; nothing is written back in SnapGene's format. SnapGene is a trademark of GSL Biotech LLC (Dotmatics); this app is not affiliated with or endorsed by it.

Is anything sent to a server?

Fetching from NCBI sends the accession and your IP address after you press Fetch. Optional Bench backups upload the Study you choose. Scientific computation and file import run locally; a plasmid you keep is stored in this browser, and a link carries a small plasmid's sequence after the # of the address, never your feature edits.

Is this biosafety or medical advice?

No. It is research and education software. Follow your institution's rules for viral vectors and selection markers.

Next step

Want this tuned to your vectors?

Email m.beale@icloud.com with what you need, or use the contact page.