Design rule 4 says no language family dominates. That had been balanced batch by batch and never measured over the whole dictionary. This is the measurement, regenerated from the dictionary itself.
Two numbers are worth separating. Origin is the family a root came from — the first source its entry names. Reach is every family whose own vocabulary names that root, which is what decides whether a stranger recognises it.
All 300 roots
| Family | Origin | Reach | ||
|---|---|---|---|---|
| Austronesian | 67 | 22.3% | 115 | 38.3% |
| Turkic | 23 | 7.7% | 94 | 31.3% |
| Latin/Romance | 75 | 25.0% | 90 | 30.0% |
| Indo-Aryan | 22 | 7.3% | 83 | 27.7% |
| Semitic | 49 | 16.3% | 68 | 22.7% |
| Niger-Congo | 14 | 4.7% | 64 | 21.3% |
| Slavic | 5 | 1.7% | 48 | 16.0% |
| Germanic | 13 | 4.3% | 46 | 15.3% |
| Iranian | 9 | 3.0% | 36 | 12.0% |
| Greek | 8 | 2.7% | 17 | 5.7% |
| Sino-Tibetan | 11 | 3.7% | 12 | 4.0% |
| Japonic | 4 | 1.3% | 8 | 2.7% |
| Koreanic | 0 | 0.0% | 2 | 0.7% |
| Austroasiatic | 0 | 0.0% | 1 | 0.3% |
| Celtic | 0 | 0.0% | 1 | 0.3% |
| Tai-Kadai | 0 | 0.0% | 1 | 0.3% |
Every root now names at least one language, so no row is left over. Six once were: bai, foto, hi, hotel, ok, taksi said only “already-global” and were counted as belonging to no family. They belong to English, French and Greek, and the label was hiding it: counted as belonging to nobody, they made the European share look smaller than it is.
This table is regenerated by check.py and compared against
what is written here, so it cannot drift from the dictionary again. It did:
the numbers above replace a set that could not be reproduced by the method
this page states.
What it shows
Against Esperanto. The README’s case is that Esperanto’s roots are about 95% European. Esperanto’s figure is about root origins, so this one is too — the family a root came from, counted once. Taking Latin, Romance, Germanic, Slavic and Greek together, Amadunia’s European roots are 101 of 300, or 34%. Indo-Aryan and Iranian are Indo-European too but they are not European — Hindi, Urdu, Bengali and Persian are spoken by well over a billion people in Asia, and counting them as European would be the kind of sleight the project exists to avoid.
By origin there is a largest bloc. Latin/Romance is 25.0%, ahead of Austronesian at 22.3% and Semitic at 16.3%. Nothing dominates, but nothing is level either.
By reach it is much flatter. The top six run from 38.3% down to 21.3%; by origin the top six run from 25.0% down to 4.7%. Six families are named in a fifth or more of the dictionary — Austronesian, Turkic, Latin/Romance, Indo-Aryan, Semitic, Niger-Congo. This paragraph said those six sat “between 20% and 29%” until September 5, 2026, and three of them do not: Austronesian is 38.3%, Turkic 31.3% and Latin/Romance 30.0%. The figure it was reaching for is the flatness, and the drop from first to sixth says it. This is the more meaningful figure, and the gap between the two columns is the point: so many roots are shared across families that asking where a word came from overstates the imbalance. Forty roots belong to five traditions or more, and one — sabun — belongs to seven: Austronesian, Indo-Aryan, Latin/Romance, Niger-Congo, Semitic, Slavic and Turkic. Fourteen more name six, among them insan, mama, papa, ca, mersi and musik.
That sentence read “sabun, kertas, kalima, insan, safari and kursi each belong to five or six traditions at once” until September 6, 2026, and three of its six examples were outside the range it claimed — sabun names seven, kertas four and safari three. safari was the weakest example on the page and it was carrying an argument about breadth: it names Swahili, Arabic and German, which is a real spread and not the one the sentence promised. The examples are read off the dictionary now, so an etymology edited tomorrow moves them.
The weak spot
Sino-Tibetan reaches 4.0% of the dictionary and Japonic 2.7%. Between them that is roughly a billion and a half speakers, and the language draws almost nothing from them.
The cause was recorded as structural: Chinese and Japanese roots are one or two short syllables — hao, kan, lai, cang, duan, yuki, nomu, suru — every one taken while the language was small, and with the two- and three-letter space now full, no new short root can be added without a collision.
That explanation was checked on September 3, 2026 and is wrong. It is true
of the words already taken and not of the languages they came from. Modern
Mandarin vocabulary is overwhelmingly two syllables, and so is much of
Japanese, which is exactly the length the four-letter rule wants. Ten ordinary
words were put through every rule in check.py — alphabet,
consonant runs, vowel pairs, minimal pairs, length — and seven passed:
| Source | Shape | Verdict |
|---|---|---|
| 面包 miànbāo, bread | mianbao | passes |
| 老师 lǎoshī, teacher | laosi | passes |
| 电话 diànhuà, telephone | dianua | passes |
| 友達 tomodachi, friend | tomodaci | passes — c is exactly that ch |
| 元気 genki, well, lively | genki | passes |
| 学校 gakkō, school | gako | passes |
| 食べ物 tabemono, food | tabemono | passes |
| 朋友 péngyǒu, friend | pengyu | rejected — ngy, three consonants |
| 时间 shíjiān, time | sicien | rejected — ie is not an attested pair |
| 先生 sensei, teacher | sensei | rejected — ei is not an attested pair |
None of these has been added; the dictionary is closed at 300 until A2. They are here as evidence about the cause. The thinness is not a wall the phonology built — it is which words the borrowing reached for. It went to the classical monosyllables and stopped.
No root comes from Korean or from a Dravidian language. Nine sorts in the checker had the same shape, and eight of them could not
have shown it. After the balance table was fixed, every ordering in
check.py that decides what a file should say was given a
tiebreak, and the file now reads itself to refuse a single-term sort key. The
other eight were safe only because their values happened not to tie — which is
the same protection this table had until three families reached one root each.
And the three rows arrived in a random order. The table is sorted by reach, and the three new families reach one root each, so the sort had nothing to separate them — it kept the order they happened to be inserted in, which comes from iterating a set of family names, which depends on the interpreter’s hash seed. One run of the checker called the table right and the next called it wrong, on a file nobody had touched. Ties are broken by name from September 6, 2026, and the row order is a fact about the dictionary rather than about the process that read it.
Three families were invisible to this table until September 6, 2026, and the reason is that the map from a language to its family did not hold them: negara names Thai and Khmer, du names Welsh, and Tai-Kadai, Austroasiatic and Celtic had nowhere to go. The reach column dropped them in silence — no row, no warning, and the roots counted for every other family they named. Three rows of one now, and du moved from five families to six with them.
Korean is not quite absent — ok and pan name it among their sources, which is the 0.7% of reach in the table — but Tamil and Telugu appear nowhere in the dictionary, in either column. This line read “Korean and Dravidian have no roots at all” until September 6, 2026, which the table three paragraphs above it had already contradicted.
Fixing it would mean taking two-syllable compounds from those languages rather than single words. That is a founder decision and is not recorded as an open question yet, because it is not a gap in the grammar — it is a gap in the vocabulary policy.
check.py recomputes these figures from the dictionary on every run and fails if this page has gone stale.