
I built a "monosyllable space" enumerator: toggle English's phonotactic rules and see which syllables become legal
Every language uses only a sliver of the syllables its own rules would permit. English could have *blick* or *sprang* and simply doesn't — but it couldn't have *bnick* or *ngat*, because those break its phonotactics. I wanted to see that whole space at once: not the dictionary, but the full set of monosyllables a given rule system allows. And I wanted to reach in and change the rules.
So (with a lot of help — see the bottom) I built **the Monosyllable Space**: a phonotactic enumerator. You hand it a phoneme inventory and a set of constraints, and it generates every legal monosyllable those rules imply — then lets you toggle any rule and watch the count and the contents move in real time. It's currently loaded with an English inventory, because I'm using English as a testbed. I'm poking at what a "perfected" conlang might look like, and the most concrete way in is to take a language everyone knows and start pulling levers.
**What's in it:**
- **Editable onset / nucleus / coda rules** — max cluster lengths, rising/falling sonority with an adjustable minimum distance, the /s/-cluster exception (the thing that lets *sp st sk* violate sonority), and specific gaps you can switch on and off (no /tl dl/, no labial+/w/, no /sr/).
- **An editable sonority scale** — the deep lever. Reorder the hierarchy and every cluster rule recomputes; a language's whole "texture" shifts.
- **Nucleus-conditioned rules** — the constraints that cross constituent boundaries: checked vowels needing a coda, /ŋ/ restricted to certain vowels, Cj-clusters only before /uː/. (This turned the syllable count from a clean product into a sum over vowels — a fun refactor.)
- **An attested-English overlay** — every generated syllable is checked against the CMU Pronouncing Dictionary. Under English-like defaults it generates **~4.4 million legal monosyllables**, of which only **~9,300 are attested English words**. You can browse three ways: everything, just real words, or just the *gaps* (legal but unused — the *blick* zone).
- **A "words your rules shut out" panel** — the real English words the current ruleset rejects (224 of them at default). It's become a catalogue of English's own weird edges: the /rl/ words (*girl, world, curl*), the loans (*fjord, bjork, nyet*), the interjections (*huh, yeah, eh*). Genuinely useful for sorting "my rule is wrong" from "this exclusion is correct."
- **Read-aloud + IPA/ARPABET** — tap any syllable to hear it, via either a parametric synthesizer that builds each phoneme from formant/burst/frication parameters (faithful, robotic) or your system TTS reading a respelling (natural, approximate). Every syllable also renders as a little **sonority silhouette** so you can see the rise-peak-fall shape.
**What it's for:** instead of inheriting some database's inventory and dialect, you generate the possible-syllable space from *your* inventory and *your* rules, from first principles. The gaps mode is a root quarry — legal-but-unattested syllables are collision-free candidates still guaranteed pronounceable to speakers of the source language. And every toggle has a visible cost in syllables, which turns "what are my phonotactics" into a design conversation you can actually watch happen.
**What else is being worked on:** this is one piece of a larger project — a systematic rework of English (its phoneme inventory, a unicase writing system where letter shapes encode phonetic features, and a semantic/ontological layer), plus a couple of parallel threads: a "bridge tongue" universal phonetic script spanning Indo-European and Semitic, and a scheme for mapping punctuation and operators to minimal vocalizations for voice-driven computing. Next up for *this* tool: an **ablaut audit** (the conlang uses voicing alternation to carry meaning, so I want to compute which roots even *have* a pronounceable voiced/unvoiced partner — I expect it'll show that *sp/st/sk* onsets are grammatically sterile, since there's no *zb/zd/zg*), and making the **phoneme inventory itself editable** so it stops being English-only.
**Disclosure:** I designed and directed this, but the actual build — the code, the synthesis engine, the data pipeline — was done in collaboration with Claude, specifically Anthropic's **Opus 4.8 and Fable 5**. I'm a hobbyist pulling levers; the models did the implementation heavy lifting (and caught a fair number of my mistakes on the way).
**Feedback very welcome**, especially from people who know more phonology than I do:
- Which of the "shut out" exclusions are actually correct, and which mean a rule is wrong?
- Is a sonority-only model too permissive to be useful, or is the gap between it and attested English the whole point?
- Has anyone modeled nucleus–coda co-occurrence more rigorously than "checked vowels need a coda"? That's my weakest layer.
- Bigger picture: if you were reaching for a "perfected" phonotactics, what would you actually optimize for — channel capacity, articulatory ease, cross-linguistic learnability, something else?
https://claude.ai/public/artifacts/d4fa4103-0807-47cf-bc0a-874eaa2bd75f