Word Finder

Enter your letters and see every word they can make — longest first, blanks supported. Checked against the public-domain ENABLE list of 172,820 words, entirely in your browser.

2–20 letters a–z; spaces are ignored. Type ? for a blank tile (up to 2).

Results appear here — enter letters above.

How the matching works

The finder treats your letters as a multiset — a bag of tiles where copies matter. A word is makeable when, for every letter, the word needs no more copies than your bag holds. TARTS tallies as a×1, r×1, s×1, t×2; tart needs a×1, r×1, t×2, every requirement is met, and it fits with s×1 left over. Tract needs a×1, c×1, r×1, t×2, and against the same rack it is short by c (needs 1, the rack has 0) — a deficit of 1, which a rack without blanks cannot absorb, however small. Tattoo needs a×1, o×2, t×3 and is short by o (needs 2, the rack has 0) and t (needs 3, the rack has 2): a letter the rack lacks entirely and extra copies of one it already holds are the same kind of shortage, and they add up to a total deficit of 3. Each blank (typed as ?) covers exactly one missing copy of any letter, so a word matches when its total shortfall is no larger than your number of blanks. Candidates are first filtered by length — a word longer than your rack can never fit, blanks included, which is why tattoo would in fact be discarded against a bare TARTS before its letters were counted — then checked letter by letter, and results come back longest first, alphabetical within each length.

Related guide: How the Word Finder Matches Letters to Words walks through every step of that mechanism — the per-letter tally, the deficit arithmetic behind blanks, the length window, the ordering and the result cap — with each figure computed by the engine. This page keeps to what you need at the tool, with its own worked examples; the guide is where the reasoning lives. The rest of the site's rules are collected under Guides.

Reading your rack

Before any word is examined, the letters you typed are parsed into a rack. The parser lowercases the input, discards spaces, and counts each letter from a to z; every ? becomes a blank, counted separately rather than as a letter. It also records the rack in a normalized form — the letters sorted alphabetically with the blanks moved to the end — and two inputs that differ only in case or order produce the same normalized rack, because the tally beneath it is the same. The table shows the parser's own output for 4 inputs.

Typed What it contains Normalized rack Tiles Blanks
Sea Horse capitals and a space aeehorss 8 0
esorhaes the same tiles in another order aeehorss 8 0
ox? a blank ox? 3 1
?? ab blanks typed first, with a space ab?? 4 2

Anything the parser does not understand is refused with a message that names the problem — never silently dropped or converted. The messages below are the engine's own text, produced at build time by handing it the input in the first column. The rack limits that some of them quote are written by the engine from its own constants; that is the only way a limit ever appears on this page.

Typed Problem Message
k9 a digit Digits are not letters — enter letters a–z only (use ? for a blank).
don't an apostrophe Only letters a–z and ? blanks are allowed — remove: '
z too few tiles Enter at least 2 letters.
thequickbrownfoxjumps too many tiles Enter at most 20 letters (you have 21).
ab??? too many blanks At most 2 blanks (?) are allowed.

The refusals are deliberate. The list holds only lowercase a–z words, so a digit, an apostrophe, a hyphen, or an accented letter could never be part of a match, and folding café to cafe or dropping the apostrophe from don't would be a guess about what you meant. The site's word counter treats apostrophes and hyphens as parts of a word — the guide What counts as a word explains why — but here they are simply characters the list cannot contain, so the parser says which ones to remove and stops.

Worked example, on a list you can check by hand

The shipped list is far too long to print, and this page never loads it at build time: the matching logic is the same whichever list it is handed, so the example below runs the real matching function against a list of 20 words written for this page, small enough that the entire output fits on screen and every result can be verified by eye. It is not ENABLE, and nothing here claims which of these words appear in ENABLE. The list: a, ant, art, arts, as, at, rat, rats, sat, star, start, ta, tan, tar, tars, tart, tarts, tattoo, tract, tsar.

The rack TARTS tallies as a×1, r×1, s×1, t×2 — 5 tiles, 2 of them the letter t. Against the list it matches 15 words, including 2 that use every tile, returned in the order the tool would show them:

  • 5 letters — start, tarts
  • 4 letters — arts, rats, star, tars, tart, tsar
  • 3 letters — art, rat, sat, tar
  • 2 letters — as, at, ta

Two things are visible in that output. The longest group comes first, and within each group the words are alphabetical — start before tarts, arts before rats — so the order is fixed by the words themselves, and the same rack against the same list always produces the same output. And each of the 5 absent words — a, ant, tan, tattoo, and tract — failed a specific test: a is shorter than the default minimum length of 2; ant needs n (needs 1, the rack has 0); tan, the same letters in another order, needs n (needs 1, the rack has 0); tract needs c (needs 1, the rack has 0); and tattoo, at 6 letters, is longer than the rack and was discarded by the length filter before its letters were looked at.

Add a blank. The rack becomes arstt?, 6 tiles, and the total rises from 15 to 18: the newcomers are tract, ant, and tan, each of which the bare rack fell short of by a deficit a single blank covers — 1 for ant, 1 for tan, 1 for tract. Tattoo now passes the length test, 6 letters against 6 tiles, but its tally is a×1, o×2, t×3, short by o (needs 2, the rack has 0) and t (needs 3, the rack has 2): a deficit of 3, more than 1 blank can cover. A second blank makes the rack arstt?? and changes nothing — the total stays at 18 — because the only word a blank could still help, tattoo, is short by 3 tiles and the rack offers 2 blanks; a stays out on length alone. The check is arithmetic, not placement: the engine never decides which blank stands for which letter, it only adds up the shortage and asks whether it fits inside the allowance — and it stops adding the moment the running total passes the allowance, since no later letter can bring it back down.

The minimum-length select works on the same output. With the minimum raised to 4, TARTS returns 8 words instead of 15: the surviving groups are the longer groups of the result above, unchanged, and the short words are simply not reported.

A second rack: TATTOO, heavy with copies

A rack with repeated letters shows the copies rule from the other side. TATTOO tallies as a×1, o×2, t×3 — 6 tiles but only 3 distinct letters — and against the same 20-word list it matches just 3 words: tattoo, at, and ta. Every other entry of 2 letters or more needs at least one letter the rack has no copy of at all, and the build checks that before publishing the sentence. A rack's size counts for little when most of its tiles repeat; what matters is how many distinct letters it can offer a candidate.

One blank changes this rack more than it changed TARTS. The rack aoottt? matches 11 words, the newcomers being tart, ant, art, rat, sat, tan, tar, and as — each of them was short by exactly one tile, which the build likewise verifies. A second blank, aoottt??, admits start, tarts, tract, arts, rats, star, tars, and tsar for 19 in all: every entry on the list except a, which is excluded by the minimum length rather than by any letter. Set that beside TARTS, where a second blank added nothing. What a blank is worth depends on how far the words on the list stand from the rack, not on the blank itself: a rack short of distinct letters has many candidates one tile away, and a rack that already covers its list's letters has few.

The limits, in the engine's own numbers

Every limit the tool enforces is a constant in the matching engine, interpolated into this page at build time rather than typed. A rack holds between 2 and 20 tiles, and blanks count toward that total: at most 2 blanks are accepted, so the largest rack the parser will take — abcdefghijklmnopqr?? is one — carries 18 letters plus 2 blanks for 20 tiles. Because a word can never be longer than the rack, 20 letters is also the longest word this tool can ever return, whatever the list contains. The default minimum word length is 2, which hides anything shorter; the select above raises it.

Finally, the finder lists at most 5,000 words. When a rack matches more — a long rack with common letters and blanks can — it keeps the first 5,000 in display order, longest first and alphabetical within a length, and says the list was trimmed; the total found and the count at each length are still computed over every match and remain exact. None of these figures comes from the rules of any game. They are the engine's own bounds, and the guide shows the cap acting on a small list.

The word list: ENABLE, public domain

Results are checked against ENABLE — the Enhanced North American Benchmark LExicon — a public-domain word list of 172,820 lowercase entries. Our copy was retrieved on 2026-07-18 from norvig.com/ngrams/enable1.txt and ships with this site as a plain text file, one word per line, LF line endings; automated tests pin its exact entry count and a–z-only character invariants, so it cannot drift silently. The figures in this section are the ones the engine's own header states — the same figures the methodology page and the matching guide quote.

The engine itself has no dictionary built in. The list is passed to it as an argument on every search, which is why the examples on this page could run against a 20-word stand-in and why the shipped file is never loaded at build time here: the matching logic is tested against tiny lists and the browser loads the real one. During a search, any entry containing a character outside a to z is skipped rather than matched, so a stray line in a list can never produce a false result.

The honest caveat that matters: word games rule on plays against their own reference dictionaries, and those can differ from ENABLE. A word this finder shows can be rejected at a game table, and an official ruling can allow a word missing here. Treat this tool as an independent study aid built on a public-domain list — it is not affiliated with, endorsed by, or a substitute for any game publisher's official dictionary.

Limitations, stated plainly

  • Lowercase a–z only — every entry is made of the letters a to z and nothing else, so there is no capitalization to mark a proper noun and no apostrophes or hyphens: contractions and hyphenated compounds, which the word counter treats as single words, cannot appear here.
  • A dated snapshot — ENABLE predates the 2006 tournament-dictionary additions, so newer entries such as QI and ZA are absent, and so is anything coined since.
  • A North American list — the name states its scope. This page makes no claim about which regional spellings the list does or does not include, so check any variant spelling against the reference you actually play with.
  • Result cap — long racks with blanks can match more words than the cap allows; the finder reports exact counts for everything but lists at most 5,000 words, longest first.

Where the searching happens

The list downloads to your browser once — on your first search, or earlier while the browser is idle — and is kept for the life of the page. Every search after that runs locally in JavaScript: the letters you type never leave your device, no account is needed, and once the list has arrived the tool keeps working on a flaky connection. If the download fails, the tool says so and offers a retry rather than searching a partial list. That is the same privacy stance as every other tool on this site; the matching guide and the guides index cover the rules behind each of them.

Frequently asked questions

Why does my word game accept a word this finder does not list (or reject one it does)?

Because the lists differ. Word games rule on plays against their own reference dictionaries, while this finder checks the public-domain ENABLE list retrieved on 2026-07-18, and the engine reports only what that list contains, so an official ruling can differ from what you see here. This tool is an independent aid and is not affiliated with or endorsed by any game publisher.

How do blanks work?

Type ? for each blank tile, up to 2. A blank stands in for exactly one copy of any letter: a word matches when the letters it needs beyond what your rack supplies number no more than your blanks. On this page's illustrative list, TARTS matches 15 words and TARTS? matches 18; TATTOO matches 3 and TATTOO? matches 11.

Does the order I type the letters in matter?

No. The parser reduces your input to a count per letter and a normalized rack — letters sorted, blanks last — so "Sea Horse" and "esorhaes" both become the rack aeehorss. Capitals and spaces are discarded the same way, and blanks are moved to the end.

What are the rack limits?

2 to 20 tiles, counting blanks, with at most 2 blanks. Type more tiles and the engine replies "Enter at most 20 letters (you have 21)."; type too many blanks and it replies "At most 2 blanks (?) are allowed." Because a word can never be longer than the rack, 20 letters is also the longest word the finder can return.

Why was my input rejected?

The parser accepts only the letters a–z and ? for a blank. A digit produces "Digits are not letters — enter letters a–z only (use ? for a blank)."; any other character — an apostrophe, a hyphen, an accented letter — is named in the message so you can remove it. Nothing is silently dropped or converted, because the list holds only lowercase a–z words and a guess at what you meant could never match one.

Why are QI and ZA missing?

Honest limitation: the ENABLE list is a snapshot that predates the 2006 wave of tournament-dictionary additions, so newer two-letter words such as QI and ZA are not in it. Every entry is lowercase a–z, so there are no capitalized, apostrophized, or hyphenated words either.

Do my letters get sent to a server?

No. The word list downloads to your browser once and is kept for the life of the page, and every search runs locally against that copy — the letters you type never leave your device, consistent with this site’s privacy stance.

How are results ordered?

Longest words first — grouped by length, alphabetical within each group — so the words that use the most of your rack sit at the top and short words never bury them. A minimum-length filter hides the short entries when you only want the long ones.

Why does a big rack say only some of the words are listed?

The finder lists at most 5,000 words. When a rack matches more, it keeps the first 5,000 in display order and says the list was trimmed; the total and the count at each length are still computed over every match and stay exact.

Matching runs locally in your browser — nothing you type is transmitted or stored. Results come from the public-domain ENABLE list (172,820 entries; provenance above) and can differ from any game's reference. See the methodology page.