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.
7 held back for scholar sign-off
the rest do not survive romanisation
27 are productive and excluded
every other TLD is reported unverified
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.
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.
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.
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.
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.
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.
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.
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
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
| Pattern | Wazn | What the shape itself claims |
|---|---|---|
| 1I2u3 | fīʿul | a name built on X that claims nothing further about it — the long ī carries it, and Arabic derives nothing in this shape |
| 1I2i3 | fīʿil | X held between a long vowel and a short one — a name on X, and no predication over it |
| 1u23I4 | fuʿlīl | a 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.
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.
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.
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.
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.
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.
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.
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.
| Source | Status | What 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. |
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.
| Factor | As written | Effective | Provenance |
|---|---|---|---|
| Meaning | 20 | 19.05 | Inferred — a documented heuristic, not a measurementinference |
| Pronunciation | 15 | 14.29 | Measured — computed from the name itself or a verified lookupfact |
| Brand psychology | 15 | 14.29 | Editorial — a judgement call, stated as oneeditorial |
| Visual identity | 10 | 9.52 | Measured — computed from the name itself or a verified lookupfact |
| Memorability | 10 | 9.52 | Inferred — a documented heuristic, not a measurementinference |
| Originality | 10 | 9.52 | Measured — computed from the name itself or a verified lookupfact |
| Domain | 10 | 9.52 | Measured — computed from the name itself or a verified lookupfact |
| Trademark safety | 5 | 4.76 | Measured — computed from the name itself or a verified lookupfact |
| Global appeal | 5 | 4.76 | Measured — computed from the name itself or a verified lookupfact |
| Cultural safety | 5 | 4.76 | Editorial — a judgement call, stated as oneeditorial |
| Total | 105 | 100 | divided by 1.05 |
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.
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.
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.
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.