The method

How the words are made, and what the method costs.

Everything below is the mechanism, not a description of it. The derivations were computed by the engine while this page was rendering — same functions, same tables, same output as a real run. Where the method gives something up, this page says what and why, because a method you cannot see the cost of is a sales page.

252
attested roots

7 held back for scholar sign-off

16 of 28
Arabic consonants reachable

the rest do not survive romanisation

3 of 37
waznu used for coining

27 are productive and excluded

12
TLDs verified by RDAP

every other TLD is reported unverified

01 · Root and pattern

Arabic does not join pieces. It pours a root through a pattern.

A syllable generator concatenates: it takes fragments that sound modern, joins them, and checks the domain. The output is pronounceable and means nothing, and when someone asks why the company is called that, the only true answer is that the domain was free.

Root-and-pattern morphology is not concatenative. Meaning lives in a consonantal root — three or four consonants carrying a semantic field — and shape lives in a separate template, a wazn, which the root is poured through. The two are independent dimensions. That independence is the whole mechanism: f·k·r carries thought, mifʿāl carries the instrument by which an action is performed, and the word that comes out of the two together means the instrument of thought — before anyone decides what the company does.

This is why the derivation is showable. The name is not a lucky string; it is the output of two named inputs, and both of them can be argued with. Nothing here is generated by a language model, so there is no run in which the same root and the same wazn produce a different word.

f-k-rfikr, thought
fkrmi12A3Mifkaarمِفْكار
real pattern
said
mif-KAAR
IPA
/mif.ˈkaːr/
spellings
mifkaar · mifkar
unvocalised
مفكار
n-w-rnur, light
nwr1i2A3aNiwaaraنِوارة
coined pattern
said
ni-WAA-ra
IPA
/ni.ˈwaː.ra/
spellings
niwaara · niwara
unvocalised
نوارة
h-k-mhikma, wisdom
hkm1A2U3Haakumحاكُوم
real pattern
said
haa-KUUM
IPA
/haː.ˈkuːm/
spellings
haakum · hakoom · hakum · haakoom
unvocalised
حاكوم
w-s-lwasl, joining
wslmi12A3Miwsaalمِوْصال
real pattern
said
miw-SAAL
IPA
/miw.ˈsaːl/
spellings
miwsaal · miwsal
unvocalised
موصال

Computed at render time by realise() in lib/arabic.ts, toArabic() and respell() in lib/omega/script.ts. The glosses are trace, not translation: they record which root inspired the form, and the engine never emits the word in a gloss as a name.

02 · The inventory

Only sixteen of the twenty-eight consonants are reachable.

A name has to survive being typed by someone who does not read Arabic. Romanisation is where that is decided, and it is lossy in both directions — which removes most of the language from the search before the search begins.

Roots are written in Latin letters throughout the engine, and only these sixteen consonants have a slot. Any root containing anything else is dropped from the dictionary before generation rather than silently producing a name nobody can spell.

Labial
bfmw
Coronal obstruent
tdszsh
Coronal sonorant
lnr
Dorsal
kj
Guttural
h
Glide
y
Never reachable
ق
qāfcosts qamar — the moon
ع
ʿayncosts ʿilm — knowledge
غ
ghayncosts ghayth — rain
خ
khāʾcosts khayr — good
ث
thāʾcosts thamar — fruit
ض
ḍādcosts nahḍa — a renaissance

Roughly four in five Arabic roots cannot be used at all, and no amount of dictionary access changes that. What is left is a curated inventory of 252 attested roots, of which 7 neighbour religiously loaded vocabulary and are excluded by default rather than used casually.

Reachable only where a hand-checked override says so
ح
ḥāʾromanises to h
ص
ṣādromanises to s
ط
ṭāʾromanises to t
ظ
ẓāʾromanises to z
ذ
dhālromanises to d

Thirty roots carry a hand-verified letter table, each checked against the word it came from. Everything else falls back to the common letter and is flagged — a wordmark set in the wrong ḥāʾ is worse than no wordmark.

What the loss looks like in practice
hnds1a23I4Handeesهَنْدِيس

The root h·n·d·s is quadriliteral and legal, and the engine will happily coin Handees from it. It also cannot tell you how to write it.

Reported, not suppressed

Romanisation cannot distinguish h (ه / ح), d (د / ذ / ض), s (س / ص). The common letter was used; confirm before setting a wordmark.

The alternative — printing one confident Arabic wordmark and saying nothing — is the version that gets carved into a sign.

03 · Productive versus coinable

A pattern that fits every root does not coin a word. It looks one up.

This is the distinction that decides whether a generator invents or plagiarises, and it is invisible from the outside — both paths produce something that looks Arabic and scans correctly.

fāʿil is the active participle. It exists for every verb in the language — that is what productive means. Pour a root into it and Arabic has already made the word: kāshif is a real word, and so is wasīla, and so is wajīha. No blocklist covers them, because the pattern generates real words faster than anyone can enumerate them. The same is true of faʿīl, the standard adjective, and mafʿal, the place noun.

So the 27 productive templates are marked and kept out of the naming path. Coining needs the opposite: waznu rare enough that root × pattern lands on a gap in the lexicon. Being non-productive is necessary and not sufficient — several rare patterns are legal Arabic and bad names — so a further shortlist of 3 carries the actual brand work, each with a stated sense the name inherits.

Productive — excluded from coining
kshf1A2i3Kaashifكاشِف

Kaashif is not a coinage. The pattern is productive over k·sh·f, so the form Arabic returns is a word the dictionary already has — which is how a naming tool ships a real word to a client and calls it invented.

1A2i3 · real · also spelled kaashif / kashif

Productive — excluded from coining
wsl1a2I3aWaseelaوَصِيلة

Waseela is not a coinage. The pattern is productive over w·s·l, so the form Arabic returns is a word the dictionary already has — which is how a naming tool ships a real word to a client and calls it invented.

1a2I3a · coined · also spelled waseela / wasila

The 3 waznu a name may be coined in
PatternWaznWhat the shape itself claims
1I2u3fīʿula name built on X that claims nothing further about it — the long ī carries it, and Arabic derives nothing in this shape
1I2i3fīʿilX held between a long vowel and a short one — a name on X, and no predication over it
1u23I4fuʿlīla four-consonant name shape — nothing in Arabic reads it as a derived form of anything

faʿīla is deliberately absent. It is the feminine of the standard adjective, so a great many roots already have one — it produced Wasila, Wajiha, Kashifa and Darisa, all existing words. A pattern marked productive cannot also be a brand pattern.

04 · De-vocalisation

Arabic does not write short vowels. That decides which names survive.

It is the finding that reorders every shortlist, and it is invisible until the wordmark is set: two names that look equally good in Latin behave completely differently the moment the ḥarakāt come off.

Written Arabic omits the short vowels. A coined name whose wazn uses only short vowels therefore shares its written skeleton with every other short-vowel pattern on the same root, and the reader supplies whichever word they already know — the brand does not get to choose which one. A long vowel is different: it is written with a letter — alif, wāw or yāʾ — and a letter survives de-vocalisation.

This is why the shortlists prefer long-vowel forms, and why their Latin spellings carry doubled vowels. The doubled aa in a name is not a stylisation; it is the alif, and dropping it in a domain or a wordmark throws away the one thing keeping the Arabic readable.

Low risk — carries a long vowelmi12A3
Mifkaar
mif-KAAR
مِفْكار
Unvocalisedمفكار

The long vowel is written as a letter, so مفكار keeps its shape without diacritics. An Arabic wordmark can be set unvocalised and still read correctly.

High risk — short vowels onlyma12a3
Manzam
MAN-zam
مَنْظَم
Unvocalisedمنظم

This wazn uses only short vowels, which Arabic does not write. Unvocalised, منظم is indistinguishable from every other short-vowel pattern on this root — a reader will supply whichever word they already know. Prefer the long-vowel form of this name for any Arabic wordmark.

Risk, skeleton and note are returned by devocalisationRisk() in lib/omega/dossier.ts and are reproduced verbatim. The rubric reads the same value, so a high-risk name is marked down in the ranking rather than footnoted at the end of the report.

05 · Verification

An unknown is never a yes.

There are exactly three verdicts and none of them means “probably fine”. That missing fourth state is how a naming tool tells you a taken domain is free.

mifkaar.comfreemifkaar.iotakenmifkaar.sanot verified

Before any source is trusted for a single name, it has to pass a control gate. It is handed a subject that is definitely taken and must report it taken; where an anti-control exists it is then handed one that is definitely free and must report it free. An endpoint that fails either test is not consulted, and every name it would have answered for is returned as not verified — never as available. A host that 404s for everything would otherwise report every name in the world as free, which is the most expensive kind of wrong this system can be.

Sources that cannot answer are listed by name, with the reason and the date they were last tested. An omitted row reads as a clean result, so nothing is omitted.

Domains — RDAP, gated per registry
.com.net.org.io.ai.me.co.app.dev.xyz.studio.design

12 TLDs have an RDAP endpoint with a control and an anti-control recorded against it. Ask for any other TLD and the answer is “not verified”, because we have no endpoint — a refusal that must reach you rather than arriving as silence.

Platforms that cannot be checked honestly
Threads
threads.net 301s every handle to threads.com before looking it up; and threads.com's 302 only means 'no rendered Threads profile', which a taken Instagram handle with Threads never activated also returns (@hm, @bbcnews). Threads shares Instagram's namespace, so read the Instagram result as the Threads answer.
Product Hunt
Cloudflare challenge on every path, including robots.txt: 403 for a known product and for a coined slug alike, unchanged under Chrome and Googlebot UAs. The v2 GraphQL API requires an OAuth token.
Crunchbase
returns 403 to unauthenticated clients, including for known companies
Google Play
no public search endpoint reachable without a key
Trademark registries
USPTO, EUIPO, WIPO, SAIP and GCC require dedicated access
The trademark register, source by source

Note what the unverifiable rows contribute. Their claim is not “this mark is free” — it is “this register refused an unauthenticated request”, and that was measured.

SourceStatusWhat it can and cannot tell you
Near-miss screen (offline corpus)
Inferred — a documented heuristic, not a measurementinference
offline

Whether the name is a near-clone of a mark already in commerce, on spelling, pronunciation or consonant skeleton. Catches the collisions a literal string lookup cannot: Kajabee against Kajabi, Striip against Stripe.

Edit distance over a hand-curated corpus. A distance is a heuristic for what a listener confuses, not a fact about a register, so this source is inference and never fact. Self-gated on every call — see screenControl.

Wikipedia (English)
Measured — computed from the name itself or a verified lookupfact
probed

Whether anything notable already carries this name. A hit is a real-world collision; a miss says only that no encyclopaedia article uses the name.

action=query&titles=&redirects=1 on en.wikipedia.org, 2026-08-03: Slack -> pageid 223400; "Zqxjwvbf9x7k" -> missing:true; Aramco -> redirect to Saudi Aramco, pageid 290527.

Wikidata
Measured — computed from the name itself or a verified lookupfact
probed

Whether a named entity — company, product, person, place — is catalogued under exactly this label or one of its recorded aliases.

wbsearchentities on www.wikidata.org, 2026-08-03: Slack -> Q17130715 with match.type "label"; "Zqxjwvbf9x7k" -> search:[] and success:1.

GitHub organisations
Measured — computed from the name itself or a verified lookupfact
probed

Whether a company or project already holds this name as a GitHub org. Personal accounts are NOT covered — the orgs endpoint 404s for a user.

api.github.com/orgs/, 2026-08-03: vercel -> 200, stripe -> 200, zqxjwvbf9x7k-nonexistent -> 404, mifkaar -> 404, torvalds (a user, not an org) -> 404. Unauthenticated quota observed as x-ratelimit-limit: 60/hour.

npm registry
Measured — computed from the name itself or a verified lookupfact
probed

Whether the JavaScript package name is already published.

registry.npmjs.org, 2026-08-03: react -> 200, zqxjwvbf9x7k-nonexistent -> 404 {"error":"Not found"}.

PyPI
Measured — computed from the name itself or a verified lookupfact
probed

Whether the Python package name is already published.

pypi.org/pypi/<name>/json, 2026-08-03: requests -> 200, zqxjwvbf9x7k-nonexistent -> 404.

crates.io
Measured — computed from the name itself or a verified lookupfact
probed

Whether the Rust crate name is already published.

crates.io/api/v1/crates/, 2026-08-03: serde -> 200, zqxjwvbf9x7k-nonexistent -> 404 with an explicit does-not-exist body.

Apple App Store
Measured — computed from the name itself or a verified lookupfact
probed

Whether a shipping iOS or macOS app carries this name. Matching is by substring on the app title, so short names over-report — deliberately, since over-reporting is the safe direction here.

itunes.apple.com/search?entity=software, 2026-08-03: Slack -> resultCount 13 including an app titled exactly "Slack"; "Zqxjwvbf9x7k" -> resultCount 11 of unrelated apps, none whose title contains the term, so the title filter is what makes this endpoint usable at all (raw resultCount is noise).

USPTO (United States)
Measured — computed from the name itself or a verified lookupfact
refusednot verified

US federal trademark register. The primary register for US commerce.

Tested 2026-08-03: tsdrapi.uspto.gov -> 401 with the body 'you'll need to register for an API key'; api.uspto.gov -> 403 {"message":"Missing Authentication Token"}; tmsearch.uspto.gov/api-v1-0-0/tmsearch -> 405 MethodNotAllowed (a static asset host, not a search API).

Would need: A registered USPTO API key, or an attorney-run TESS/TSDR search.

EUIPO (European Union)
Measured — computed from the name itself or a verified lookupfact
refusednot verified

EU trade marks, effective across all 27 member states.

Tested 2026-08-03: api.euipo.europa.eu/trademark-search -> 401 {"title":"Unauthorized","detail":"Invalid client id or secret."}. TMview (tmdn.org) DOES answer and does discriminate — see the note below on why it is nonetheless not used.

Would need: EUIPO developer-portal OAuth credentials (client id and secret).

UKIPO (United Kingdom)
Measured — computed from the name itself or a verified lookupfact
refusednot verified

UK trade mark register, separate from the EU register since 2021.

Tested 2026-08-03: ipo.gov.uk trade mark text search -> 403 serving a "Service Captcha" interstitial; the search-for-trademark service API host did not complete a connection.

Would need: A human-solved captcha session, or the UKIPO bulk data service.

WIPO Global Brand Database (Madrid system)
Measured — computed from the name itself or a verified lookupfact
refusednot verified

International registrations and the national collections WIPO aggregates. The closest thing to a single global view of registered marks.

Tested 2026-08-03: branddb.wipo.int returns 200 but serves an ALTCHA proof-of-work challenge page (HTML loading altcha.min.js), not search results. A 200 here is a challenge, not an answer — reading it as one is exactly the trap probe.ts was written to stop.

Would need: A challenge-solving client or WIPO's licensed data feed.

SAIP (Saudi Arabia)
Measured — computed from the name itself or a verified lookupfact
refusednot verified

The Saudi trademark register. The primary register for this platform's core market, and therefore the most consequential gap in this list.

Tested 2026-08-03: saip.gov.sa/en/trademarks -> 308 then 404 from the site's own application shell. No public search endpoint responds without an authenticated portal session.

Would need: A SAIP e-services account, or a Saudi trademark agent.

GCC Trademark Office
Measured — computed from the name itself or a verified lookupfact
refusednot verified

Gulf Cooperation Council filings — Saudi Arabia, UAE, Kuwait, Qatar, Bahrain and Oman under the unified GCC law.

Tested 2026-08-03: gccpo.org answers (200/301) with an ASP.NET portal shell. There is no JSON search endpoint and no unauthenticated query path.

Would need: A GCC portal session, or a national agent in the relevant member state.

Crunchbase
Measured — computed from the name itself or a verified lookupfact
refusednot verified

Whether a funded company already trades under this name.

Tested 2026-08-03: crunchbase.com/organization/stripe -> 403 and crunchbase.com/organization/zqxjwvbf9x7k-nonexistent -> 403. The endpoint refuses a known company and an invented one identically, so it cannot distinguish a hit from a miss and can never be gated.

Would need: A Crunchbase Enterprise API key.

LinkedIn company pages
Measured — computed from the name itself or a verified lookupfact
refusednot verified

Whether a company operates publicly under this name.

Tested 2026-08-03: the endpoint does answer (stripe -> 200, zqxjwvbf9x7k-nonexistent -> 404) but it answers about a VANITY SLUG, not a company name: /company/saudi-aramco -> 301 while Saudi Aramco trades at /company/aramco, and /company/alphabet -> 200 for a company called Alphabet® that is not Alphabet Inc. A 404 therefore proves the slug is unclaimed and nothing about the name, which is not a question worth answering on a trademark page. (lib/omega/presence.ts uses this endpoint for handle availability, where the slug IS the question.)

Would need: The LinkedIn Marketing or Sales Navigator API, which is entity-keyed.

Product Hunt
Measured — computed from the name itself or a verified lookupfact
refusednot verified

Whether a launched product already carries this name.

Tested 2026-08-03: producthunt.com/products/stripe -> 403 and producthunt.com/products/zqxjwvbf9x7k-nonexistent -> 403, both a Cloudflare "Just a moment..." interstitial. api.producthunt.com/v2/api/graphql -> 404 without a bearer token.

Would need: A Product Hunt developer token for the v2 GraphQL API.

06 · The rubric

Ten factors, and every one of them says why it scored what it scored.

The weights are the client’s specification, not ours. They sum to 105 points, not 100, and they have been left exactly as written.

The client's ten weights sum to 105 points, not 100 (20+15+15+10+10+10+10+5+5+5). They are left as the client wrote them and divided by 1.05, which preserves the RATIOS they were expressing and keeps the total on the 0-100 scale band() thresholds against. Meaning is therefore worth 19.05 points of the final score rather than 20.

The alternative would be to shave five points off whichever criterion looked least important, which is deciding on the client’s behalf what they meant. Normalising by the live sum keeps the ratios they were expressing and puts the total back on the 0–100 scale the bands are drawn against.

FactorAs writtenEffectiveProvenance
Meaning2019.05Inferred — a documented heuristic, not a measurementinference
Pronunciation1514.29Measured — computed from the name itself or a verified lookupfact
Brand psychology1514.29Editorial — a judgement call, stated as oneeditorial
Visual identity109.52Measured — computed from the name itself or a verified lookupfact
Memorability109.52Inferred — a documented heuristic, not a measurementinference
Originality109.52Measured — computed from the name itself or a verified lookupfact
Domain109.52Measured — computed from the name itself or a verified lookupfact
Trademark safety54.76Measured — computed from the name itself or a verified lookupfact
Global appeal54.76Measured — computed from the name itself or a verified lookupfact
Cultural safety54.76Editorial — a judgement call, stated as oneeditorial
Total105100divided by 1.05
19.05%
of the total is editorial

Brand psychology and cultural safety are judgements. They are marked Editorial — a judgement call, stated as one everywhere they appear so you can discount them, rather than being blended into the number and presented as measurement.

0.9
points of noise

Two names closer together than this are not ranked, they are tied — the gap is smaller than two honest reviewers disagreeing on the editorial factors. The floor is computed from the weights, so it moves when they do.

why
required on every factor

The explanation is a required field on the type, not an optional extra: a factor that cannot quote the actual root, cluster or check count has no business influencing a ranking. The sentence is the product; the number summarises it.

07 · Limits

What this platform does not do, stated where you can read it before you buy.

Every item here is a real gap, not a modest disclaimer. If any of them matters to your decision, the work it names has to happen somewhere else.

No trademark clearance

This is a screen, not a clearance search. It queries public sources that answer an unauthenticated request and it names every register it could not reach; it does not search USPTO, EUIPO, UKIPO, WIPO, SAIP or the GCC office. No result here — including one with no findings at all — means a name is registrable, unregistered or safe to use. A clearance search by a registered trademark attorney covering the relevant Nice classes and territories is required before this name is adopted, filed or spent against.

No scholar review

Religious and cultural collisions are screened against a deliberately conservative rejection list, and a religion finding is fatal and never overridable. The list is a starter set maintained by engineers, not a sign-off. Any Arabic-derived name must be reviewed by a qualified scholar before it is used, and the seven roots that neighbour divine names are held back from generation rather than screened after the fact.

Screening is not clearance

The near-miss screen compares a name against a curated corpus of brands and real words, folding long vowels and consonant skeletons so that Kajabee and Kajabi are seen as one name. It cannot see anything outside that corpus. Surviving the screen means “not caught”, which is not the same as clean.

No calibrated predictions

There is no memorability probability and no success likelihood anywhere in the engine, because a calibrated number needs a labelled corpus of outcomes and no such corpus was available. Every factor is either a direct measurement or an openly subjective judgement. An uncalibrated number dressed as a prediction is the failure this system is built against.

Romanisation is lossy

Sixteen of twenty-eight consonants survive it, and five more are recoverable only where a hand-checked table records the true letter. Where the letter cannot be determined, the Arabic form is produced with the common letter and flagged — confirm it with a native reader before any wordmark is cut.

Availability expires

A domain that was free twenty minutes ago may not be free now. Availability older than thirty minutes is discarded rather than re-shown, so a page will tell you it does not know instead of repeating an answer it can no longer stand behind. Re-run verification before you spend anything against a name.

Now put a brief through it.

One sentence starts a run. Every name comes back with the derivation you have just read about, and with the parts nobody could verify named rather than hidden.