Does the Voynich Manuscript Mean Anything? Calibrated Tests Find Little Trace of Language
Organizations: Texas Tech University, Lubbock, TX, USA
Abstract
The Voynich manuscript is a fifteenth-century book in a script that no one can read. One account holds that its text means nothing and that a scribe made it by copying his own words and changing them a little. The other holds that a real language lies hidden behind a cipher. We write each account as a program that fills the pages of the manuscript, fit every program with the same budget, and check it on statistics the fit never saw. The copying process of Timm and Schinner predicts these statistics far better than any cipher with one key. But ciphers that switch keys between the manuscript's two dialects, or that encode only the word classes of a real text, predict them equally well. Word statistics alone cannot decide. We look for a trace of language that needs no decipherment. In 28 texts in 16 languages the same word pairs keep sharing a line. The manuscript shows this pattern at half the strength of the weakest of these texts. A word code keeps the pattern above the manuscript unless its plaintext has a weak pattern or many words are miscopied. Solvers that decipher control texts find no readable text in the manuscript under a letter cipher, a word code or 28 codes with one letter, letter pair or syllable per word. Word codes of abbreviated Latin, the plaintext their fits prefer, show which word follows which more clearly than the manuscript unless two words in five are miscopied. One cipher remains possible, a nomenclator with a second key whose scribe miscopies more than half of the words, and our solvers cannot exclude it in 9 of 16 languages. Most of the structure a solver finds comes from how the end of one word shapes the start of the next, which reflects how tightly glyphs are bound to each other. Planted messages are found reliably only when they are long, each letter always becomes the same word and these words are adjacent, so other messages could hide.
Figures & tables
| Study | Meaningless text | Ciphers | Fit and test apart | Decipherment on controls | Noise in the cipher | Short messages |
|---|---|---|---|---|---|---|
| Timm and Schinner (2020) | ✓ | |||||
| Hauer and Kondrak (2016) | ✓ | ✓ | ||||
| Gaskell and Bowern (2022) | ✓ | |||||
| Bowern and Gaskell (2022) | ✓ | ✓ | ||||
| Greshko (2025) | ✓ | |||||
| Parisel (2026b) | ✓ |
| Program | Text | Shapes | Changes | Free |
| Copy-W | copying | W | W edits | 10 |
| Copy-T | copying | W | Timm’s rules | 12 |
| Copy-N | copying | Naibbe | W edits | 8 + 1 |
| Cipher-W | word code | W | scribe | 15 + 1 |
| Cipher-N | letter cipher | Naibbe | scribe | 9 + 1 |
| Cipher-W2 | word code | W, twice | scribe | 18 + 1 |
| Distance | Inside predicted range | Held-out statistics | All 37 | |||||
| Program | best | median | fitted (22) | held-out (15) | largest | Mahalanobis | p-value | p-value |
| Copy-W | 0.69 / 0.65 | 0.75 / 0.74 | 13 / 18 | 10 / 11 | 14 / 15 | 27 / 27 | 0.01 / 0.01 | 0.01 / 0.01 |
| Copy-T | 0.48 / 0.49 | 0.63 / 0.62 | 22 / 20 | 9 / 10 | 4.1 / 4.9 | 7.0 / 8.3 | 0.01 / 0.01 | 0.01 / 0.01 |
| Copy-N | 0.47 / 0.49 | 0.53 / 0.55 | 12 / 14 | 2 / 3 | 107 / 77 | 87 / 79 | 0.01 / 0.01 | 0.01 / 0.01 |
| Cipher-W | 0.50 / 0.52 | 0.62 / 0.61 | 13 / 13 | 8 / 4 | 101 / 147 | 78 / 87 | 0.01 / 0.01 | 0.01 / 0.01 |
| Cipher-N | 0.36 / 0.37 | 0.41 / 0.42 | 12 / 14 | 6 / 4 | 219 / 188 | 90 / 90 | 0.01 / 0.01 | 0.01 / 0.01 |
| Link across | Ends of | Space from | Beyond the | Words also | |
| Texts | the space | neighbours | two glyphs | two glyphs | split |
| ZL | 0.204 | 0.027 | 0.73 | 0.022 | 0.186 |
| IT | 0.187 | 0.026 | 0.74 | 0.023 | 0.101 |
| 29 plaintexts | 0.034–0.144 | 0.032–0.198 | 0.21–0.47 | 0.074–0.175 | 0.123–0.360 |
| Copy-T | 0.008–0.203 | 0.026–0.724 | 0.39–0.87 | 0.010–0.048 | 0.039–0.052 |
| Copy-H | 0.075–0.140 | 0.156–0.265 | 0.28–0.36 | 0.032–0.046 | 0.005–0.046 |
| Miscopied words | ||||||
|---|---|---|---|---|---|---|
| Program | Texts | fitted | 0% | 20% | 40% | 60% |
| Cipher-W | 116 | 8 | 9 | 23 | 58 | 102 |
| Cipher-W2 | 116 | 5 | 6 | 20 | 53 | 89 |
| Cipher-S | 108 | 9 | 6 | 22 | 65 | 101 |
| Cipher-C | 116 | 88 | 59 | 68 | 76 | 91 |
| Cipher-N | 108 | 102 | 102 | 106 | 106 | 106 |
| Control | Gap of control texts | Gap of program texts | Gap of the manuscript | ||||
|---|---|---|---|---|---|---|---|
| Language model | accuracy (%) | same language | other languages | Cipher-N | Copy-T | ZL | IT |
| Arabic | 37 | 0.133 | [0.013, 0.145] | [0.056, 0.132] | [ 0.027, 0.046] | 0.074 / 0.071 | 0.068 / 0.071 |
| Church Slavonic | 64 | 0.365 | [0.028, 0.256] | [0.133, 0.253] | [0.005, 0.061] | 0.102 / 0.103 | 0.093 / 0.103 |
| German | 74 | 0.411 | [0.036, 0.252] | [0.133, 0.386] | [0.003, 0.079] | 0.120 / 0.126 | 0.099 / 0.106 |
| Middle English | 74 | 0.318 | [0.028, 0.266] | [0.115, 0.244] | [0.009, 0.069] | 0.117 / 0.129 | 0.098 / 0.108 |
| Persian | 42 | 0.158 | [0.007, 0.140] | [0.056, 0.138] | [ 0.028, 0.045] | 0.057 / 0.057 | 0.039 / 0.038 |
| Family of codes | Excl. | Undec. | Not excl. |
|---|---|---|---|
| One letter per word, 0–10% nulls | 85 | 34 | 0 |
| One letter per word, 25–40% nulls | 5 | 97 | 0 |
| Homophones taken in turn | 0 | 17 | 0 |
| Word spaces written as words | 33 | 1 | 0 |
| Vowels left out | 1 | 27 | 0 |
| Nulls at fixed places in the line | 225 | 25 | 22 |
| One word type per letter | Three types | ||||||
|---|---|---|---|---|---|---|---|
| Channel | Slots | Longest | consecutive | every second | every third | spread | consecutive |
| First word of a line | 4,355 | 2,000 | 16 (500–2,000) | 5 (1,000–2,000) | – | 6 (2,000) | 7 (2,000) |
| Last word of a line | 4,355 | 2,000 | 16 (500–2,000) | 7 (1,000–2,000) | – | 3 (2,000) | 3 (2,000) |
| First word of a page | 225 | 150 | – | 2 (100) | – | – | – |
| First word of a paragraph | 761 | 500 | 17 (200–500) | 1 (200) | – | 1 (500) | – |
| Labels | 1,159 | 500 | 12 (200–500) | 2 (200–500) | – | 1 (500) | – |
Appendix figures & tables7 assets
Supplementary material from the paper’s appendix.
Appendix
| Statistic | Definition | ZL | IT |
| Fitted statistics (22) | |||
| Repeat of the previous word | rate of a word equal to the word before it, log ratio to the page-shuffled text | 0.185 | 0.362 |
| Repeat 2–5 words back | the same for words two to five positions back | 0.281 | 0.183 |
| Near repeat, previous word | rate of a word one glyph change from the word before it, log ratio to the shuffled text | 0.237 | 0.218 |
| Near repeat 2–5 back | the same for words two to five positions back | 0.173 | 0.200 |
| Near repeat 6–20 back | the same for words six to twenty positions back | 0.085 | 0.089 |
| Parameter | Prior | Median among the 100 best simulations, first / second search | ||||
| Copying programs | Copy-W | Copy-T | Copy-N | |||
| New word | log-uniform 0.002–0.999 | 0.006 / 0.060 | 0.008 / 0.010 | 0.89 / 0.96 | ||
| Copy the word above | uniform 0–1 | 0.021 / 0.10 | 0.21 / 0.062 | 0.013 / 0.039 | ||
| Copy from anywhere on the page | uniform 0–1 | 0.99 / 0.94 | 0.92 / 0.89 | 0.98 / 0.98 | ||
| Mean copy distance (words) | log-uniform 1–2000 | 349 / 57.5 | 39.8 / 56.2 | 12.5 / 33.7 | ||
| Exact copy | uniform 0–1 | 0.10 / 0.12 | 0.023 / 0.008 | 0.21 / 0.17 | ||
| Copy-W | Copy-T | Copy-N | Cipher-W | Cipher-N | Cipher-W2 | |||||||
| Statistic | 1st | 2nd | 1st | 2nd | 1st | 2nd | 1st | 2nd | 1st | 2nd | 1st | 2nd |
| Fitted statistics | ||||||||||||
| Repeat of the previous word | 0.9 | 0.7 | 0.7 | 1.1 | 0.6 | 0.6 | 0.1 | 0.4 | 0.3 | 0.3 | 0.6 | 0.0 |
| Repeat 2–5 words back | 0.8 | 1.2 | 0.8 | 0.4 | 0.4 | 0.2 | 0.5 | 0.2 | 1.8 | 1.6 | 1.4 | 1.4 |
| Near repeat, previous word | 0.2 | 0.6 | 0.3 | 0.1 | 0.7 | 0.6 | 3.2 | 1.8 | 0.4 | 0.0 | 1.1 | 2.2 |
| Near repeat 2–5 back | 1.0 | 0.9 | 1.2 | 0.6 | 0.2 | 0.1 | 2.1 | 2.1 | 0.3 | 0.5 | 1.2 | 2.0 |
| Cipher-S | Cipher-C | Cipher-M | Cipher-M2 | Cipher-MN | ||||||
| Statistic | 1st | 2nd | 1st | 2nd | 1st | 2nd | 1st | 2nd | 1st | 2nd |
| Fitted statistics | ||||||||||
| Repeat of the previous word | 1.0 | 0.4 | 0.6 | 0.6 | 0.7 | 0.7 | 0.3 | 0.3 | 0.5 | 0.4 |
| Repeat 2–5 words back | 3.9 | 4.1 | 1.2 | 1.1 | 2.5 | 1.3 | 2.5 | 2.9 | 1.6 | 1.4 |
| Near repeat, previous word | 1.5 | 1.9 | 1.0 | 0.6 | 0.2 | 0.7 | 0.4 | 1.1 | 0.2 | 0.6 |
| Near repeat 2–5 back | 3.4 | 2.2 | 0.9 | 0.7 | 0.8 | 0.7 | 0.8 | 1.1 | 0.2 | 0.2 |
| Letter and language models | Control texts | |||||
|---|---|---|---|---|---|---|
| Language | Source | Dates | documents | letters | documents | words |
| Arabic | OpenITI | 1022–1340 | 9 | 1,739,547 | 3 | 113,706 |
| Church Slavonic | PROIEL, TOROT | 1000–1600 | 21 | 1,682,642 | 7 | 100,213 |
| German | project corpus | 1300–1500 | 4 | 284,379 | 4 | 86,091 |
| Middle English | project corpus | 1300–1500 | 162 | 3,512,777 | 61 | 80,068 |
| Persian | Ganjoor | 11th–14th c. | 5 | 1,353,562 | 4 | 82,730 |
| Collection | Address |
|---|---|
| Sefaria | github.com/Sefaria/Sefaria-Export-Archive |
| OpenITI | github.com/OpenITI |
| Ganjoor | github.com/ganjoor/ganjoor-db |
| First1KGreek | github.com/OpenGreekAndLatin/First1KGreek |
| PROIEL, TOROT, ISWOC, Menotec | github.com/syntacticus/syntacticus-treebank-data |
| UD PROFITEROLE | github.com/UniversalDependencies/UD_Old_French-PROFITEROLE |
| Word codes, miscopied words | ||||||
|---|---|---|---|---|---|---|
| Language | Plain | 0% | fitted | 20% | 40% | 60% |
| Arabic | 0.334 | 0.307 | 0.282 | 0.238 | 0.177 | 0.070 |
| Church Slavonic | 0.178 | 0.135 | 0.144 | 0.102 | 0.044 | 0.026 |
| German | 0.256 | 0.187 | 0.177 | 0.127 | 0.066 | 0.026 |
| Middle English | 0.380 | 0.296 | 0.279 | 0.218 | 0.136 | 0.064 |
| Persian | 0.232 | 0.168 | 0.156 | 0.127 | 0.064 | 0.027 |