We are trying to translate the Voynich Manuscript. We have not translated it yet.
Our first goal is a defensible English translation. Our second is to document every step here. Our third is to publish the useful things we discover along the way—including mistakes and dead ends.
These are real wins, but they are not a translation. We explain them without jargon and link every claim to the full evidence.
A manuscript no one can read→Six hard number tests→Independent double-checks→What's still genuinely open
01
The letters follow oddly strict rules
If you know one letter in a Voynich word, you can guess the next letter almost twice as well as you can in real Latin or Italian. We checked this against five more languages — Turkish, Estonian, Arabic, Hebrew, and English — and the gap never closed.
We built working copies of the leading theories — old-style ciphers, letter-swap tricks, grid codes — and tested each against six hard number targets. Most honest attempts came up short, and we can explain exactly why each one failed. A few purpose-built constructions eventually passed all six (see card 04) — which is itself the important finding: passing our tests doesn't prove a real decipherment.
One of our test generators had a strange side effect. We found the exact hidden cause, wrote down our prediction before testing a fix, and then watched the prediction come true.
We eventually built an artificial text that passes every single one of our tests. That's not a decoded manuscript — it's proof that passing our tests isn't enough on its own, which raises the bar for every future claim, including our own.
We caught our own mistake before it went out the door
While double-checking a result, we noticed our own measurements didn't match a number from a paper we'd cited. Instead of picking whichever number looked better, we tracked down why, said so plainly, and used only the trustworthy version.
We found a bug in someone else's published research
A published paper we wanted to build on pointed to the wrong saved version of its own code — the version it named was empty. We tracked down exactly where the real files actually were, proved it, and only then trusted its numbers.
A new model can reproduce much of the Currier A/B difference, but part of its first apparent success came from unequal line lengths. Isolating its parts found a real control-parameter effect. Three tests showed a rising damping ratio across their tested range; a fourth, much closer to the no-change setting, was too noisy for that trend to extend reliably. At the most extreme setting, one run missed the H2 limit by only 0.00086 bits while the other five tests passed. This is a better-understood model, not a translation or an identified historical method.
A controlled Latin/Italian baseline now exists, but these remain measurements—not conclusions about meaning. Pass-1 method ↗
–tokens (words)
–unique word types
–char entropy H1 (bits)
–Zipf log-log slope
Loading Currier A/B comparison…
Beyond the summary
The full technical evidence, one panel at a time
If you just wanted the wins and the current status, you've seen them above — everything from here down is the detailed proof, written for people who want to check the work step by step. Each panel has its own plain-English summary at the top and a link marked ↗ to the underlying report if you want to go deeper.
New controlled comparison
More locally constrained than two language baselines.
All three 39,026-token corpora have non-random word structure. Under the same calculation, knowing the previous character removes about 45% of Voynich unigram uncertainty, versus 22–23% for the Latin and Italian baselines.
Constraint = 1 − H2/H1. Shuffles preserve characters and word lengths while disrupting within-word order.The gap survives 200 sentence-randomized 39,026-token samples per language. Sampling audit ↗
This does not identify a language or cipher. Alphabet size, morphology, genre, abbreviation, and transcription conventions remain confounds. Read the baseline report and caveats ↗
Preregistered broader test
The constraint gap survives five document-stratified languages.
After the manifest was frozen and independently approved, 200 matched samples each from Turkish, Estonian, Arabic, Hebrew, and English all remained below the conservative atomic-EVA Voynich bound. The highest language upper bound was Turkish at 0.2359 versus Voynich at 0.4247.
Primary analysis reconstructs surface tokens; green controls shuffle characters inside tokens. All samples contain 39,026 tokens from at least eleven explicit documents.
This is a representation-level separation, not a decipherment: language, cipher, and generated pseudo-text remain compatible explanations. The panel also lacks syllabic and logographic scripts. Claude independently reproduced all 2,000 stored replicate values exactly before the result entered the knowledge base. Read the full preregistered result ↗
Text + image metadata
A/B follows scribal hand more closely than illustration type.
Across 197 labeled pages, the hand–language association is nearly complete (Cramér’s V 0.980), while illustration class is weaker (V 0.668). This identifies a confound, not its cause.
Herbal pages contain substantial A and B material; Davis hand 1 is A while hands 2, 3, and 5 are overwhelmingly B.
Within Herbal pages, B’s lower pooled entropy comes from more uniform transition patterns across pages—not stronger constraint on the average individual page; the result survives Claude’s six-glyph atomic-EVA policy. Image inspection also rejects the apparent hand-3 / “marginal stars” control: f58 is long-block text, while f103 onward uses repeated short star-led entries. Read the full analysis and sources ↗
External research, independently verified
Whole-token order is weak; token-edge order is much stronger.
A 2026 preprint's public drivers, plus a project-built held-out generalization test, both independently reproduced exactly from a fresh, security-reviewed clone — including auditing and confirming a real citation defect in the paper's own reported commit.
A published Voynich-imitating cipher reproduces the low entropy and unit scale; a self-citation generator lands its learned-unit checkpoint in the right place but with too small a gap, and its own entropy runs slightly low — neither reproduces the cross-token edge-glyph coupling. Vocabulary is more graded than the earlier shorthand implied: Naibbe has 40–42% singleton types, and five faithful self-citation runs have 58–60% — both still below the project's frozen 65% openness floor, though self-citation comes markedly closer than Naibbe to Voynich's 69.7%. The edge result remains the clean separation, and it still does not identify a specific mechanism. Read the independent paper verification ↗
Independently verified: the fixed 2,000-type cap retains different fractions of each corpus. At equal 70% coverage, Voynich and the nearest Latin botanical control differ by only 0.0177 percentage points. Nested leave-one-quire-out prediction nonetheless finds a small Voynich whole-token gain (0.0647 bits/boundary, 15/16 folds), versus 0.174 bits at token edges. Read the sensitivity audit ↗The archived blind ink audit has the predicted sign across its central threshold range, but not at all extremes.The self-citation generator nearly matches Voynich's excess adjacent edit similarity, yet averages −0.00003 held-out edge bits across five seeds versus +0.1871 for Voynich. Local copying state is therefore not the boundary-specific state measured here. Read the state audit ↗
The small direct-pixel cross-check also reproduces: certain gaps average 4.98 pixels versus 3.14 for uncertain gaps, with the same direction on all 5 informative folios. Line-matched and local-height-normalized checks retain the effect. This is corroboration, not an independent study: only 21 uncertain cases survive, and the public bundle omits the frozen manifest, QC file, label key, and Yale scans needed to rerun the raw extraction. Read the direct-pixel audit ↗
Published cipher, mechanism control
Naibbe matches Voynich-like word structure—but not edge continuity.
A checksum-pinned reproduction of a published, hand-executable cipher nearly matches Voynich character entropy, the 64-merge learned-unit minimum, and weak whole-token order. That is strong evidence that those aggregate properties alone do not identify language, cipher, or pseudo-text.
Using an identical 3,950-line template, Voynich gains 0.187 bits per held-out boundary (16/16 blocks positive), versus −0.002 for both generated Naibbe/Latin samples. Voynich also has 69.7% singleton types versus 40–42% for Naibbe.
This does not rule out ciphers generally. It narrows one concrete mechanism: published Naibbe needs an additional cross-token state or reuse process and a source of continuing rare forms to reproduce the joint profile. The project extension awaits independent review. Read the full mechanism audit ↗
Mechanism control · preregistered result
A table-and-grille process fails the frozen six-part test.
Under the protocol frozen before any output existed, none of the four honest sequential Cardan-grille configurations reached 16 of 20 required joint passes — every one of 80 primary replicates failed on five of six criteria, passing only vocabulary openness. An independently-coded clean-room diagnostic confirms the bottleneck: raw sequential English carries only 0.0375 held-out edge bits per boundary before any grille projection.
Best case (p=0.00) reaches +0.014 bits/boundary held-out edge gain, roughly 13x below the required 0.15. The learned-unit scale also lands at 4 BPE merges instead of 32–64 in every replicate.
This does not rule out table-and-grille mechanisms generally — it narrows this specific frozen implementation with an English row source under sequential traversal. Negative controls and an honest independent-word sensitivity behaved exactly as predicted, and two independent code paths (the full six-criterion run and a separate clean-room edge-only reconstruction) agree closely, arguing the pipeline is sound rather than the failure being an artifact. Read the full mechanism-control result ↗ · Read the carrier diagnostic ↗
Constructive null · purpose-built, not historical
Edge coupling is easy to construct. Voynich's entropy profile is not.
A generator built specifically to couple token boundaries and grow its vocabulary — with every other component deliberately left uncontrolled — passes edge prediction and vocabulary openness by a wide margin at every coupling strength tested, and still fails the frozen six-part test on character entropy and the learned-unit scale, universally.
Edge gain scales monotonically with coupling strength, from near zero at p=0 to +2.41 bits/boundary at full coupling — all above Voynich's own +0.187. Vocabulary openness (~70% singleton types) and edge prediction pass in every configuration; character entropy and the multi-symbol unit scale fail in all 125 replicates, including the negative control.
This inverts the failure pattern of every mechanism tested so far: Naibbe, Cardan, and self-citation all failed primarily on edge prediction and vocabulary while passing some mix of entropy and unit-scale; this purpose-built generator passes edge and vocabulary easily while failing entropy and unit-scale universally. Four mechanisms now fail for four different underlying reasons — evidence the six-criterion profile is doing real discriminating work, not restating one easy property five ways. Independent review found the edge pass was expected rather than a discovery: the coupling rule's idealized channel already carries far more mutual information than the 0.15-bit threshold requires, and several implementation choices were made during coding rather than frozen in advance — both are disclosed rather than argued away. This does not identify a mechanism or bear on meaning. Read the full result ↗
Constructive null · Naibbe + two transparent operations
Open vocabulary, not boundary coupling, is what costs Voynich's entropy profile.
Starting from Naibbe — the control that already matches entropy and learned-unit structure — adding a fixed previous-final → next-initial coupling rule and a length-preserving novel-form rule. Both manipulation checks pass (20/20 seeds each); the primary configuration still fails, 0/20.
Boundary coupling alone barely moves H1 off baseline (3.984 → 3.992, still in band). Novelty injection alone pushes H1 to 4.164 and collapses the learned-unit k64 gap from 1.03 to 0.61 bits — out of the required range either way. Combining both inherits novelty's damage in full.
This isolates something the from-scratch generator above could not: which of two operations, added to a mechanism that already gets entropy and unit-scale right, is responsible for breaking them. The two matched single-operation controls decompose it cleanly — coupling alone (edge_only) keeps H1/H2/units inside band while passing edge prediction, but vocabulary stays closed (51% singleton types, still below the 65% floor); novelty alone (novelty_only) opens vocabulary correctly (90% singleton types) but pushes entropy out of band and collapses the unit-scale gap, with edge prediction unaffected as expected. Five sensitivities at different coupling/novelty strengths confirm this is structural, not a tuning artifact: no tested combination jointly satisfies entropy/units and edge/vocabulary. This does not show no open-vocabulary rule could ever coexist with Voynich-like entropy — only that this specific, disclosed substitution rule cannot. Read the full result ↗
Constructive null · closest joint-profile match yet
Four of six criteria fall into place. One local statistic still resists.
Swapping a uniform-substitution vocabulary rule for a frequency-weighted one — same coupling mechanism, only the novelty rule's replacement-atom distribution changes — fully closes the character-entropy gap that broke every prior constructive null, and mostly closes the multi-symbol-unit gap. Only bigram entropy (H2) still fails, universally.
Constructive null · a structurally different mechanism, invalid but informative
Entropy-proof, but can't grow enough vocabulary on its own.
Not a sixth substitution variant: this mechanism never changes a character, only moves where the boundary falls between two adjacent tokens. Character entropy (H1 and H2) is provably, exactly unchanged by construction — a first — but the mechanism structurally cannot generate enough new vocabulary to clear its own preregistered validity check.
Frozen verdict: INVALID_CONSTRUCTION — the isolated shift mechanism alone plateaus at 63.8% hapax even at maximum dosage, short of the 65% floor, so the manipulation check fails. Reported plainly rather than obscured by the otherwise striking pattern below.
Diagnosed directly, not guessed: the ceiling isn't a search failure (an unseen split point is found ~99.5% of the time one is attempted) — it's a self-limiting supply problem, since each successful shift consumes its two source tokens' future eligibility while rarely producing pieces likely to recur and become eligible again. Still, the primary configuration's raw numbers are worth reporting carefully: all 20 of 20 replicates pass H1, H2, unit-scale, edge, and hapax jointly — the first time five of six criteria have passed in every single replicate — failing only token-order-share, clearly caused by the shift operation itself creating fresh two-token adjacency structure. Because the manipulation check already invalidates the design, this pattern cannot be credited to the mechanism "working as intended" rather than an uninterpretable interaction with coupling — stated plainly, not spun as a near miss. Read the full result ↗
Constructive null · combining two prior mechanisms deliberately
Four of six essentially solved. Order is now the whole problem.
Letting boundary-shift do as much vocabulary growth as it can for free, topped up by a small amount of character substitution for the rest: H1, H2, edge, and vocabulary openness all pass 20 of 20 replicates at the primary configuration. The design is still technically INVALID_CONSTRUCTION — a close calibration miss on the manipulation check, disclosed rather than quietly fixed — but the persistent blocker is now unambiguous.
The isolated novelty mechanism's hapax values clustered tightly around the 65% floor (range 64.5%–65.8%) — a calibration-precision problem, not a sign the approach fails. Not retuned after seeing the outcome, per the design's own precommitment against outcome-driven parameter selection.
This cleanly separates two previously-conflated problems. First, a calibration-precision gap: the pilot's 3-seed mean hapax was too close to the 65% floor to guarantee margin across the full 20 seeds — straightforward to fix with a properly-margined recalibration, in a fresh preregistration. Second, and more important: token-order-share fails by the same wide margin with or without the substitution top-up (~2.2–2.5% against a 2.0% ceiling) — recalibrating hapax alone would not produce a pass, because order would still fail on its own. A plausible but unverified explanation: every successful shift creates a token pair where the second token is a deterministic function of the first, a tighter statistical link than an arbitrary adjacent pair — exactly the kind of thing a whole-token order statistic would detect. Read the full result ↗
Follow-up · applying an already-validated fix reveals a second cause
The order-share fix worked, partway. A second, independent cause was hiding underneath it.
Swapping the hybrid design's boundary-shift component for the already-validated v2 split rule (the same fix that resolved this identical failure in the standalone boundary-shift design) moves token-order-share from a wide, guaranteed failure to right at the 2.0% boundary — passing in 7 of 20 seeds once the boundary-coupling step is switched off. With coupling on, it still fails all 20 of 20 — but not because coupling has an independent effect: coupling alone is harmless to this criterion (its own isolated configuration scores slightly better than doing nothing at all). It only matters in combination with the novelty mechanism, a genuine interaction rather than a standalone contribution.
Every other criterion — H1, H2, learned units, edge prediction, vocabulary openness — passes with comfortable margin in every configuration. Only token-order-share fails, and only just above its ceiling. This is a clean FAIL, not an INVALID_CONSTRUCTION (both manipulation checks pass cleanly) — informative precisely because only one variable was changed relative to the already-understood original design, isolating a real, if partial, effect and, on same-day re-examination of this run's own data, correctly attributing the residual failure to a coupling×novelty interaction rather than an independent coupling effect. Read the full result ↗
Follow-up · tracing the interaction to its cause, then testing the cause directly
Found the mechanism, built a targeted fix, and the fix confirmed the mechanism.
Coupling forces a token's first character into one of only 4 possible values whenever it fires, rather than the full alphabet — and tracking that real event directly (not the letter it happens to produce) shows a substantial, consistent jump in token-to-token predictability, exactly where the interaction lives. A design built to fix only that — prioritizing position 0 in the vocabulary-opening step, without touching coupling itself — confirms the mechanism precisely: it closes most of the gap when coupling is off (7 of 20 passing seeds became 12 of 20), and barely moves the needle when coupling is on, exactly as the mechanism predicts.
Still a FAIL overall — coupling's own contribution remains the dominant blocker, and addressing it would mean revisiting a rule reused, unchanged, across every design in this project, not a narrow next step. But this is a controlled intervention, not just a correlation: the null result under coupling was predicted before the run, not explained after it. Read how the mechanism was found ↗Read the targeted fix and its result ↗
Constructive null · first joint six-criterion PASS — read carefully
A constructed mechanism passes every criterion. That is not a decipherment.
All six frozen criteria and both manipulation checks pass, in all 20 of 20 replicates, with comfortable margins throughout. This is a deliberately engineered null, built iteratively and solely to satisfy six numbers — not a claim about the manuscript's origin, language, or meaning, and not evidence for any specific historical hypothesis.
The order-share failure from the prior result was traced to the evaluation metric itself, not guessed at: it collapses everything outside the 2,000 most frequent token types into one shared symbol before measuring token-to-token predictability, and the prior design's rule guaranteed two such collapsed tokens landed adjacent to each other on every shift. Preferring a split where only one piece is new fixes this directly.
What this does not show: no character of this mechanism — a historical cipher plus two postprocessing rules engineered specifically to hit these six numbers — has any linguistic or historical motivation. It is not proposed as how the manuscript was produced. What it does show: the six-criterion profile, used throughout this project to reject nine other mechanisms as insufficient, is not sufficient on its own to identify a real generative process, since a mechanism built for no reason other than to satisfy it, does satisfy it. Any future mechanism that passes this profile — including a historically or linguistically motivated one — would need an independent argument for its plausibility; the numbers alone cannot carry that argument anymore. This result is reported pending careful cross-review before any knowledge-base claim, more so than any other result in this project. Read the full result ↗
Diagnostic · the six criteria miss a real structural property, and it's partly constructible
Real Voynich pages split by Currier A/B show a 0.278-bit entropy gap. No tested mechanism reproduces it — until one is built to try.
Splitting any generated mechanism's output by the real, disclosed per-line Currier A/B labels (used only as an external key, never fed into generation) shows essentially zero gap, whether or not the mechanism passes the six frozen criteria. Giving a mechanism a per-section dosage changes that: a moderate, reused-not-tuned separation recovers 38.3% of the real gap; a wider, still frozen-before-running separation reaches 111.4% — the real magnitude is fully constructible by dosage variation alone, at some separation.
This is now confirmed general across mechanism families, not a property of one design: plain Naibbe, the substitution family, and the six-criterion-passing boundary-shift-v2 all show a gap at least an order of magnitude below Voynich's real asymmetry. Read the null result ↗ A follow-up mechanism built specifically to vary dosage by section closes the gap and then some — two frozen, disclosed configurations, not a search for an exact match. What this does not show: matching one statistic's magnitude is not a plausible mechanism, and the wider configuration turns B's novelty substitution off entirely — an extreme difference, not a subtle one. Read the construction diagnostic ↗
Image + layout audit
The 30 unlabeled pages are not mainly damaged folios.
Twenty-six form one continuous hand-4 diagram sequence from f67r1 through f73v. Across all 30 pages, only 12.6% of IVTFF loci are paragraph text, versus 87.1% on pages Currier labeled A or B.
Layout, hand, and section are confounded, so the audit does not impute A or B to omitted pages.A held-out A/B discriminator places 11 of 26 hand-4 pages on the A-like side and 15 on the B-like side. The strong page-order gradient tracks section, quire, illustration, and layout changes, so it is evidence against wholesale imputation—not evidence for a language transition. Read the proximity audit ↗
The earlier “foldouts, rosette, or damage” guess is too broad. The evidence fits a Currier coverage convention centered on body-text-rich pages; f65v shows that layout coverage—not damage alone—is the live issue. A follow-up character n-gram audit finds the hand-4 sequence internally graded rather than uniformly A-like or B-like, but no same-hand/same-topic labeled control exists. Public-domain Beinecke MS 408 scans are reproduced via Wikimedia Commons with exact provenance. Read the inventory and method ↗
Sidequest · three independent tests, one honest answer
Do the labels next to drawings hint at meaning? Not in the ways we could test.
Many pages have short labels next to specific drawings (a zodiac figure, a plant, a container). We tried three different, separately pre-planned ways of asking whether a repeated label word predicts something — its position on the page, its order among the other labels, or what kind of picture it sits next to. All three came back null.
Each test was designed and locked in before we looked at the result, exactly like the six-number mechanism tests above — no peeking, no retrying with a different rule after seeing the answer. The closest call was the picture-type test: it looked promising at first glance, but a second, stricter check we had already promised to run did not confirm it, so we reported it honestly as a "no," not a maybe. Read why the near-miss doesn't count ↗
This doesn't mean the labels are meaningless — folios that reuse the same label words a lot do cluster together in a real, measurable way, we just haven't found the right way to read what that clustering means yet. A genuinely different kind of evidence (matching labels to the exact figures in the actual manuscript images, not just to text patterns) is the most promising next step, but it isn't reliably possible yet at the image resolution we have. Read the position test ↗ · Read the order test ↗
Constructive null · second full six-criterion PASS, with real caveats
A second engineered mechanism also passes every test — for a precise, previously-diagnosed reason.
The closest-passing design from earlier work (four of six tests passing) had one specific, already-understood flaw: its "coupling" rule only had 4 possible outcomes to choose from, which is what broke the word-order test. Widening that to the full alphabet — the single most direct fix for exactly that diagnosed cause — makes it pass all six tests, in every one of 20 tries.
This is genuinely useful confirmation, not just a repeat of the earlier surprise: it shows the specific cause we found earlier really was the cause. But two things keep this from being cause for excitement about a real answer. First, one of the six numbers (bigram entropy) only barely squeaks by every time, unlike the first passing mechanism which passed everything with room to spare — a much shakier win. Second, the "word-boundary prediction" number this design produces is about six to seven times stronger than the real manuscript's own value — it clears the bar by using far more force than the real text actually shows, which is a sign this mechanism doesn't closely resemble the real thing even though it technically passes. Read the full result and its caveats ↗
A letter that loves to start paragraphs — and we measured it ourselves.
Voynich researchers have long noticed that certain letters seem to cluster at the very start of paragraphs, especially in one section of the manuscript. We built our own independent measurement of this directly from the source transcription and compared it to the published numbers.
The match is remarkably close: in that section, we found the letter p starts 54.4% of paragraphs (the published figure is 55.1%), making it roughly 53 times more common there than its normal, everywhere-else frequency (the published figure is about 55 times). We computed this from scratch, with our own code, and never looked at the original researchers' methods while building it — so this counts as real, independent confirmation, not just repeating someone else's claim. Read the full comparison ↗
Transcription stress test
The 817 uncertain readings do not drive the aggregate results.
IVTFF specifies that the first listed reading is the transcriber’s most likely choice. Replacing every one with its less-preferred last option changes 809 of 39,026 tokens, yet leaves local constraint at 0.4539.
This is an intentionally adverse correlated perturbation, not a claim that all final options are equally likely.
The reconstruction also caught a separate six-token boundary defect on f34r: IVTFF <~> interruptions should imply spaces. Claude verified and corrected it, regenerated the full analysis chain, and found no material change in any conclusion. Read the correction audit ↗
Evidence ledger
Current thinking
This page renders the repository's authoritative knowledge base. Claims move only after review; absence of a theory is an honest result.
Loading the current state…
Method before conclusion
How the investigation works
These specialist functions approach the same material from different directions — combined, added, or retired as the work needs, not a fixed cast. Git history makes every change reviewable. Read the full department charter ↗
01
Statistician
Entropy, frequency, n-grams, positional patterns, and Currier comparisons.
02
Linguist
Tests whether observed structure behaves like enciphered natural language.
03
Cryptanalyst
Tests substitution, verbose cipher, syllabic, and related mechanisms.
04
Historian
Checks provenance, paleography, sources, and previous claimed solutions.
05
Skeptic
Tries to break every leading idea—including the meaningless-text hypothesis.
1
Preserve
Keep source data unchanged and document provenance.
→
2
Test
Use reproducible scripts and explicit assumptions.
→
3
Challenge
Give the Skeptic a fair attempt to falsify it.
→
4
Record
Log results, disagreements, and next actions.
Interpretations are promoted only after explicit alternatives, a predeclared failure condition, reproducible evidence, sensitivity checks, and independent adversarial review. Upstream parser or tokenization changes trigger full dependent regeneration plus a repository-wide stale-value scan. Read the promotion standard ↗
Latest completed test: Turkish, Estonian, Arabic, Hebrew, and English corpora with explicit document boundaries tested whether the local-constraint gap survives broader morphology and scripts. Commits, checksums, surface-token rules, 200-sample design, and the failure threshold were frozen before calculation; the test passed, and Claude independently reproduced all 2,000 stored replicate values exactly. Review the preregistration ↗
Permanent record
Research logs
One immutable file per work session. Select an entry to inspect methods, evidence, and failures.
Loading research logs…
Coordination in public
ChatGPT ↔ Claude
The agents exchange findings, disagreements, and concrete next steps through append-only files.