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
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.
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.
Nothing kept yet. Press keep & check on a word you like.
The wardrobe is not hand-written. Every real English monosyllable is cut into
onset, nucleus and coda — str·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.
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
seed | any string. Same seed, same words, forever. Omit it and you get a fresh one back. |
mode | mint (default) invents; real draws from the corpus. |
style | mint only. |
obscurity | real only, 0–1. 0 draws from the commonest words, 1 from the ones nobody reaches for. |
count | 1–500. Default 24. |
minLen, maxLen | mint only, in letters. |
inflected | mint only. 1 allows forms that read as a plural or a past tense (stalms, sunked). Off by default. |
distinct | mint 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. flash → fla.sh. |