TuringDNA

Start here

Core concepts

The terms the rest of the documentation assumes. Read this once and the result tables stop needing a decoder.

Updated 31 July 2026

All documentation
On this page

Everything in the engine is a ranking problem. A target sequence admits hundreds of possible guides, a protein admits millions of possible variants, a construct admits many possible assemblies. The engine enumerates the space, scores it, and sorts it. Understanding what each score measures is the difference between using the ranking and over-trusting it.

What a PAM constrains

A Cas nuclease cannot cut anywhere. It needs a short motif adjacent to the target — the protospacer-adjacent motif, or PAM — and its absence is what stops the nuclease from cutting its own CRISPR array.

The PAM is why you cannot simply pick the position you want to edit:

Nuclease Spacer PAM Position
SpCas9 20 nt NGG 3′ of the protospacer
Cas12a / Cpf1 23 nt TTTV 5′ of the protospacer

V means A, C or G — never T. A fourth T would make the motif TTTT, which terminates Pol III transcription and would truncate the guide RNA itself.

The practical consequence: your editable positions are determined by where PAMs happen to sit, not by where you would like to edit. In a GC-rich region SpCas9 has many options; in an AT-rich region Cas12a often has more.

How spacer positions are numbered

Positions are 1-indexed from the 5′, PAM-distal end of the spacer. For SpCas9 the 20-nt protospacer occupies positions 1–20 and the NGG PAM sits at 21–23.

This matters because every window and every mismatch penalty in the engine is reported in those coordinates. “Position 6” always means the sixth base from the PAM-distal end, never the sixth base of the sequence you pasted.

On-target score, and what it is not

The on-target column is a sequence-feature heuristic in the style of Doench et al. It reads nucleotide identity at each position, GC content and homopolymer runs, and produces a number.

It is a ranking signal, not an efficiency estimate

This is a heuristic in the published style, not a re-trained model and not a score you can cite as one. A guide scoring 0.7 is a better bet than one scoring 0.3 in the same sequence. Neither number predicts what fraction of your cells will be edited.

CFD, and the two different questions it answers

CFD — Cutting Frequency Determination — is a mismatch-tolerance matrix from Doench et al. (2016). For every position in the spacer and every possible RNA/DNA mismatch, it gives the fraction of activity retained. Multiply the per-position factors along a candidate site and you get the site’s CFD score: 1.0 is a perfect match, near 0 means the nuclease will essentially ignore it.

The engine reports it in two places, answering two different questions:

  • Input CFD — “does this guide also cut somewhere else in the sequence I pasted?” This is the check that matters for a tagged construct whose tag may itself contain a near-match.
  • Genome off-target — “does this guide cut somewhere else in the reference genome?” This runs only when you pick an organism, and only for the top ten ranked guides, because each genome query costs a few seconds.

A high CFD at an off-target site is bad. A high CFD at your intended site is what you want.

The base-editing activity window

A base editor is a catalytically impaired Cas fused to a deaminase. It does not cut; it chemically converts one base to another, and it can only reach bases the deaminase is physically positioned over. That reachable stretch is the activity window.

Editor Family Window (spacer positions)
BE4max, BE3 CBE, C→T 4–8
evoCDA1-BE4max CBE, C→T 2–10
ABE8e ABE, A→G 3–9
ABE7.10 ABE, A→G 4–7

Two consequences follow. First, the base you want must fall inside the window for that editor, which is a much tighter constraint than “find a nearby PAM”. Second, every other base of the same type inside the window is also a candidate — those are bystander edits, and the engine flags them because a silent bystander is how a clean-looking design produces a confusing result.

The windows are literature consensus, not a trained model

They rank-order candidates sensibly. They are not calibrated efficiency predictions for your editor variant, cell type or delivery method.

Zero-shot scoring, and ΔLL

For protein variants there is no PAM and no matrix. Instead the engine asks a protein language model — ESM-2 — how surprised it is by a substitution.

ΔLL is the difference in log-likelihood between the mutant and the wild type at a position, given the rest of the sequence. A positive ΔLL means the model finds the mutant more plausible than the wild type, which usually means the position is not strongly conserved and the substitution is one evolution has tolerated elsewhere.

“Zero-shot” means no training on your protein and no experimental data — the signal comes entirely from the roughly 65 million UniRef50 sequences the model learned from.

What that buys, and what it does not

The model sees conservation, coevolution and sequence context. It does not see structure, it does not know which residue is your active site, and it cannot see epistasis between the mutations you pick. It is a prior for ranking, and the ranking is a screening plan, not an answer.

The loop

The four tools are ordered, and the order is the point:

Design a variant library → Build the construct → Edit the genome → Verify by PCR. Then log what actually happened at the bench, and the next round starts from a better prior than the last.

That last step is the only one that produces information the model did not already have. Everything upstream is prediction; the outcome log is measurement.