sharp.

One syllable. Press the button. Either a real word from the 7,625 English has — or a new one that obeys English phonotactics and has no definition attached to it yet. Part of rite.

press the button

space or enter for another · click the word to copy

english-ness
shape
sounds like
rhymes with
one letter off

a handful at a time — click any to copy

is it taken? — type anything

Two questions, answered separately: has English already claimed this string, and does it come out in one syllable? A word can fail either and pass the other.

is it free? — the same string, asked of the registries

A word nobody has defined is often also a word nobody has registered. This asks RDAP — the machine-readable successor to WHOIS — one TLD at a time, routing each query through IANA's own bootstrap so the answer comes from the registry that actually holds the zone.

the shelf — words you kept

Nothing kept yet. Press keep & check on a word you like.

how it works

The wardrobe is not hand-written. Every real English monosyllable is cut into onset, nucleus and codastr·e·ngth, m·o(e)·l — and the minter samples from the resulting conditional distributions: which onsets English uses, which vowels follow them, which codas follow those. So a minted word is shaped by English's own habits rather than by someone's idea of them.

A candidate ships only if it survives all four gates: it must re-segment to the parts it was built from, read as one syllable, not look like a plural or a past tense of a word that does not exist, and appear in no word list — ENABLE1, SUBTLEX-US, or CMUdict, about 250,000 strings in total. What comes out is a shape with no meaning attached. English-ness is its percentile against the real corpus's own log-probability: 50 means as ordinary as the median real monosyllable.

The pronunciation is a guess assembled from real words spelled the same way — the onset's usual phones plus the rime's — which is also how a minted word knows what it rhymes with, and how it can tell you it is already taken in the ear even when it is free on the page. Syllable counts for real words come from CMUdict; for invented ones a heuristic does it, and it agrees with CMUdict on 93% of real words exactly, and on 97/99.8 precision/recall for the one-syllable call alone.

The domain side runs on two files IANA publishes and nothing else: the list of every delegated TLD, and the RDAP bootstrap that maps a TLD to its registry's service. A name is only called free when the registry that owns the zone answered 404 itself. When a TLD publishes no RDAP service — .io, .sh, .co and .me among about 236 others — the answer is unverifiable, and a rate limit or a timeout is unknown. Neither is ever rounded down to “free”: the public redirector returns a 404 reading no RDAP service is available for every .io name, registered or not, and a tool that believes it will tell you github.io is going spare.

The shelf keeps what you liked. By default it lives in this browser and nowhere else — no account, no server, and no survival: a cleared cache, another device or a private window and it is gone. Sign in with a Bluesky handle and each kept word is also written to your own ATProto repo as one com.minomobi.sharp.word record: portable, readable by anything on the network, and stored here not at all. The two reconcile by word, newest wins, so keeping something on a phone and opening this on a laptop converges instead of forking. The consent screen asks for that one collection and nothing else.

API — open, CORS on, no key

GET /api/sharp?style=blunt&count=12
GET /api/sharp?mode=real&obscurity=0.2&count=12
GET /api/sharp/check?w=thrimp
GET /api/sharp/styles
GET /api/sharp/domain?label=thrimp&tlds=com,dev,ai
GET /api/sharp/tlds?endswith=flash
seedany string. Same seed, same words, forever. Omit it and you get a fresh one back.
modemint (default) invents; real draws from the corpus.
stylemint only.
obscurityreal only, 0–1. 0 draws from the commonest words, 1 from the ones nobody reaches for.
count1–500. Default 24.
minLen, maxLenmint only, in letters.
inflectedmint only. 1 allows forms that read as a plural or a past tense (stalms, sunked). Off by default.
distinctmint only, per million. Rejects a word sitting one edit from a real word that common — grought is a legal shape that reads as a typo of brought. 0 keeps them.
w/check only: the string to adjudicate.
label, tlds/domain only: one label against up to 16 TLDs. Or pass name=thrimp.com.
endswith/tlds only: every way a word can be cut so the tail is a real TLD. flashfla.sh.