About this word unscrambler
A small, fast, dependency-free tool for one job: given a set of letters, list every word a large English dictionary contains that can be built from them. No account, no upload, and nothing you type is ever recorded.
Why it exists
Unscrambling by brute force — generating every ordering of a set of letters and checking each against a dictionary — stops being practical well before a real tile rack's worth of letters. Seven letters have over five thousand orderings; ten have over three million. A tool that actually needs to be instant on every keystroke can't work that way, so this one doesn't: it checks a letter count, not an ordering, against every dictionary word. That approach also does something brute force can't do cheaply — it naturally finds every shorter word buildable from a subset of your letters too, not just full anagrams of everything you typed.
How the matching is implemented
Your letters become a 26-slot count — how many As, Bs, Cs you have — plus a wildcard count capped at two. For each candidate word, the same kind of count is built, and one comparison decides whether it matches: for every letter the word needs, is there enough of it in your bag, with any shortfall covered by a wildcard?
This is a single pass over the dictionary — no permutation generation, no recursion, no factorial term anywhere. Filters (starts-with, ends-with, contains, exact length) are cheap string checks applied to the same pass, and results are grouped by length as the dictionary is walked, which comes out already alphabetical within each length because the underlying word list is sorted alphabetically end to end.
Because the per-word letter counts don't change between searches, they're computed once per page load and reused on every keystroke — only the comparison against your current letters runs each time, which is what keeps the tool responsive against roughly 204,000 words on every character you type.
How it was verified
The solver's logic lives in a standalone module with no DOM or network access, which means it can be exercised directly under Node.js, outside a browser. Before shipping, it was checked against fixed cases with known-correct answers:
| Input | Checks | Result |
|---|---|---|
| "cat" against a small word list | Finds cat, act, at; rejects dog and tack (needs a k) | pass |
| "aa" against a list containing "aardvark" | "aardvark" needs three As; two-A input correctly rejects it | pass |
| "c?t" (one wildcard) | Finds cat, cot, cut — every letter the wildcard could become | pass |
| A word list with a duplicate entry | Result list contains each matching word exactly once | pass |
| Result ordering | Longest length first; alphabetical within each length | pass |
| Full ~204,000-word list, 12 tiles + 2 wildcards, no filters | Completes well under 50ms on a cold (uncached) run | pass |
Three wildcards typed in also stayed capped at two used, with a note shown rather than a silent change in behaviour; invalid characters (digits, punctuation) were checked to be ignored rather than crashing the search or matching incorrectly.
Where the dictionary comes from
The word list is shared across this site's word-game tools and derived locally from a public-domain reference dictionary (the traditional Unix web2 word list), filtered to lowercase entries of 2–15 letters with proper nouns removed, then sorted and de-duplicated. It is roughly 204,000 words. It is a general English list, not any single game's official tournament dictionary — see the limitations on the main tool page for what that means in practice.
How the site is built
- Static HTML, one small stylesheet, one small script pair. No framework, no build step, no bundler.
- The word list loads once as a static file alongside the page. Every search after that runs against the in-memory copy already in your browser — there is no server call for a search.
- System font stack. Your operating system's UI font, so nothing has to download and nothing shifts as it loads.
- Nothing you type is transmitted. Letters you enter are never uploaded to anything. The one place data leaves the page at all is an explicit click on a result word, which copies that single word to your own clipboard — a device-local action, not a network request.
- Dark mode follows your system setting via
prefers-color-scheme.
Scope and honesty about limits
This is a general-dictionary letter matcher, not a certified word-game reference. It does not know any specific game's official word list, does not track turn scoring or board state, and does not claim a word is legal in any particular game — only that it exists in the dictionary this tool searches. For anything you're about to play competitively, that dictionary's own official word checker is the authority, not this page.