Everything a Scrabble player reaches for mid-game, in one panel. The rack solver unscrambles your tiles into every word they can make, scored with real Scrabble tile values and grouped by length. The score calculator breaks any word down letter by letter so you can settle its value before you commit it. And the 2-letter word list — the short words that rescue tight boards and set up parallel plays — is rendered live from the same 359,039-word list the solver uses, so the three tools never disagree. All of it runs free, in your browser.
How the three tools work
The rack solver treats your letters as tiles: a word from the list qualifies if your tiles can cover its letters, with a ? standing in for a blank tile and scoring zero for the letter it covers, exactly as the rules say. Results are sorted longest first, then by score. The score calculator is simpler — it looks each letter up in the tile table and shows the running breakdown, so QUIZ shows Q10, U1, I1, Z10 before it shows the total. The 2-letter list is not typed by hand at all: press the button and the panel filters the full word list down to its two-letter entries and renders them as chips, which is why its contents always match what the solver would find.
A worked example
Give the solver the classic training rack aeinrst and it returns 468 words, fourteen of which use all seven tiles — among them retinas, stainer, nastier and stearin, each worth 7 tile points before the 50-point bingo bonus lands. Then take a word to the calculator: quiz breaks down as 10 + 1 + 1 + 10 for a total of 22, and jinx totals 18 (J8, I1, N1, X8) — the two words together show why the calculator earns its place: in Scrabble, a handful of premium letters decide most scores, and glancing at the breakdown before you play is faster than mental arithmetic under time pressure.
The 2-letter words, honestly labelled
Two-letter words are the connective tissue of good Scrabble: they let you play parallel to existing words, scoring several small words in one move, and they are the legal home for awkward tiles like Q and X. Press the list button and you will see 427 two-letter entries — and that number deserves an explanation. Official Scrabble dictionaries accept far fewer (the international CSW list has 107), because our source list is a broad English word list that also includes abbreviations and rare forms the tournament lists exclude. We show the list our solver actually uses rather than a tidier fiction — but for rated play, treat the official list as final: words like QI and ZA are safe everywhere; the stranger entries are for casual games and curiosity.
Using this page during a game
Between turns is where this panel shines. Run your rack through the solver while your opponent plays, and note the best word at each length — boards reward the player who already knows their options. When a play is challenged, the calculator settles the tile arithmetic (though the dictionary question itself, as ever, belongs to the official list). And when the endgame tightens, the 2-letter list is your map of the board’s remaining seams: a two-letter hook can turn an unplayable Q or Z into the game’s last decent score.
Limitations worth knowing
Scores everywhere on this page are tile sums only — letter and word multipliers on the board are not applied, because no rack tool can see your board. Our word list is broader than both official Scrabble dictionaries (CSW and NASPA), so a small share of solver results will not survive a challenge in tournament play; common words are always safe. The rack solver accepts up to 12 letters so you can include letters already on the board, and the score calculator scores any letters you type, including ones a blank represented — type the letter the blank became.
Scrabble – frequently asked questions
Is QI a real Scrabble word?
Yes — QI (the plural of the Chinese life-force concept, pronounced “chee”) is valid in both official Scrabble dictionaries and appears in our list too. It is the standard rescue for a Q with no U.
Why does the 2-letter list have more words than I expected?
Because it is rendered from our broad 359,039-word list, which includes abbreviations and rare forms the official tournament lists (107 words in CSW) leave out. For serious play, cross-check unusual entries against the official list.
Does the calculator handle blanks and multipliers?
It scores the letters you type at face value. If a blank became a K, type K — but remember a real blank scores zero, and board multipliers are yours to add.
Can the solver find bingos?
Yes — enter all seven rack tiles and look at the 7-letter group: those are your potential bingos, worth their tile score plus 50.
More word tools and lists
Browse the full collection on our Word Finder & Word Tools hub. Closest relatives: the dedicated Scrabble Word Finder with board-pattern fields, the general Word Unscrambler, the Wordfeud Helper for that game’s different tile values, and the 5 Letter Words list for word-game practice.
Embed this tool on your website — free
Copy the code below to add this working tool to your own page. A small credit link stays with it — that’s all we ask.
<h2>Scrabble Helper</h2>
<p class="sub">Three Scrabble tools in one panel: unscramble your rack, check any word's tile score, and browse the 2-letter words that save tight boards.</p>
<h3 class="sec">1. Rack solver</h3>
<label for="rack">Your rack letters (use ? for a blank)</label>
<input type="text" id="rack" maxlength="12" placeholder="e.g. aeinrst" autocomplete="off" spellcheck="false">
<button id="go" type="button">Find Words</button>
<div id="results"></div>
<h3 class="sec">2. Word score calculator</h3>
<label for="word">Type any word</label>
<input type="text" id="word" maxlength="20" placeholder="e.g. quiz" autocomplete="off" spellcheck="false">
<div id="scoreout"></div>
<h3 class="sec">3. Two-letter words</h3>
<p class="mut">Every 2-letter entry in our word list, rendered live from the list itself. Official game dictionaries accept a smaller set – see the notes under the tool.</p>
<button id="load2" type="button" class="alt">Show the 2-Letter List</button>
<div id="twoout"></div>
<div id="status"></div>
</div>
<script>
var VAL = {a:1,b:3,c:3,d:2,e:1,f:4,g:2,h:4,i:1,j:8,k:5,l:1,m:3,n:1,o:1,p:3,q:10,r:1,s:1,t:1,u:1,v:4,w:4,x:8,y:4,z:10};
// Shared solver core for IlmHunt Wave 1C word tools.
// Parameterised by a letter-value table so the same logic powers the
// Wordfeud helper, Unscramble Letters, Word Cookies solver, batch
// unscrambler, sentence unscrambler and the Scrabble hub panel.
// Used verbatim inside the iframe apps and node-tested before publishing.
function ilmCounts(str) {
var c = {};
for (var i = 0; i < str.length; i++) { var ch = str[i]; c[ch] = (c[ch] || 0) + 1; }
return c;
}
// Find every word in `words` that can be built from the rack.
// rack: letters a-z plus ? or * wildcards. opts (all optional):
// { minLen, exactLen, startsWith, endsWith, contains }
// Returns [{w, s}] sorted length desc, score desc, A-Z. Wildcard-covered
// letters score 0.
function ilmSolve(rack, words, VAL, opts) {
opts = opts || {};
rack = (rack || '').toLowerCase();
var wild = 0, counts = {}, total = 0;
for (var i = 0; i < rack.length; i++) {
var ch = rack[i];
if (ch === '?' || ch === '*') { wild++; total++; }
else if (ch >= 'a' && ch <= 'z') { counts[ch] = (counts[ch] || 0) + 1; total++; }
}
var out = [];
for (var j = 0; j < words.length; j++) {
var w = words[j];
if (opts.exactLen) { if (w.length !== opts.exactLen) continue; }
else {
if (w.length < (opts.minLen || 2)) continue;
if (w.length > total) continue;
}
if (opts.startsWith && w.indexOf(opts.startsWith) !== 0) continue;
if (opts.endsWith && w.slice(w.length – opts.endsWith.length) !== opts.endsWith) continue;
if (opts.contains && w.indexOf(opts.contains) === -1) continue;
var need = ilmCounts(w), ok = true, deficit = 0, score = 0;
for (var L in need) {
var have = counts[L] || 0;
if (need[L] <= have) { score += VAL[L] * need[L]; }
else {
deficit += need[L] – have;
score += VAL[L] * have;
if (deficit > wild) { ok = false; break; }
}
}
if (ok) out.push({ w: w, s: score });
}
out.sort(function (a, b) {
return b.w.length – a.w.length || b.s – a.s || (a.w < b.w ? -1 : a.w > b.w ? 1 : 0);
});
return out;
}
// Full anagrams only: same length, same letter multiset.
function ilmFullAnagrams(word, words) {
word = (word || '').toLowerCase().replace(/[^a-z]/g, '');
if (!word) return [];
var target = ilmCounts(word), out = [];
for (var j = 0; j < words.length; j++) {
var w = words[j];
if (w.length !== word.length) continue;
var c = ilmCounts(w), same = true;
for (var L in target) { if ((c[L] || 0) !== target[L]) { same = false; break; } }
if (same) out.push(w);
}
out.sort();
return out;
}
// Tile-by-tile score breakdown for a typed word.
function ilmScoreWord(word, VAL) {
word = (word || '').toLowerCase().replace(/[^a-z]/g, '');
var parts = [], total = 0;
for (var i = 0; i < word.length; i++) {
var v = VAL[word[i]] || 0;
parts.push({ ch: word[i], v: v });
total += v;
}
return { word: word, parts: parts, total: total };
}
if (typeof module !== 'undefined') {
module.exports = { ilmSolve: ilmSolve, ilmFullAnagrams: ilmFullAnagrams, ilmScoreWord: ilmScoreWord, ilmCounts: ilmCounts };
}
var WORDLIST_URL = 'https://ilmhunt.com/wp-content/uploads/2026/10/wordlist.txt';
var WORDS = null, LOADING = false;
function sendH(){ try { parent.postMessage({wpcId: 5218, wpcH: document.body.scrollHeight + 16}, '*'); } catch (e) {} }
window.addEventListener('load', sendH);
function st(msg){ document.getElementById('status').textContent = msg; }
function ensureWords(cb){
if (WORDS) { cb(); return; }
if (LOADING) { return; }
LOADING = true; st('Loading the word list (359,039 words)…');
fetch(WORDLIST_URL).then(function(r){ return r.text(); }).then(function(t){
WORDS = t.split(/\r?\n/).filter(function(x){ return x.length > 0; });
st('Word list ready – ' + WORDS.length.toLocaleString('en-US') + ' words.');
cb();
}).catch(function(){
LOADING = false;
st('Sorry – the word list could not be loaded. Check your connection and try again.');
});
}
function groupHtml(res, withScore){
if (!res.length) return '<p class="none">No words found. Check your letters and try again.</p>';
var html = '', curLen = -1;
res.forEach(function(x){
if (x.w.length !== curLen) {
if (curLen !== -1) html += '</div>';
curLen = x.w.length;
var n = 0; res.forEach(function(y){ if (y.w.length === curLen) n++; });
html += '<div class="grp"><h3>' + curLen + ' letters – ' + n + ' word' + (n === 1 ? '' : 's') + '</h3>';
}
html += '<span class="chip">' + x.w + (withScore ? '<sup>' + x.s + '</sup>' : '') + '</span>';
});
return html + '</div>';
}
function run(){
ensureWords(function(){
var rack = document.getElementById('rack').value.replace(/[^a-zA-Z?*]/g, '').slice(0, 12);
if (rack.length < 2) { st('Enter at least 2 rack letters.'); return; }
var res = ilmSolve(rack, WORDS, VAL, {});
document.getElementById('results').innerHTML = groupHtml(res, true);
st(res.length.toLocaleString('en-US') + ' words from that rack.');
sendH();
});
}
document.getElementById('go').addEventListener('click', run);
document.getElementById('rack').addEventListener('keydown', function(e){ if (e.key === 'Enter') run(); });
function score(){
var w = document.getElementById('word').value;
var box = document.getElementById('scoreout');
if (!w.replace(/[^a-zA-Z]/g, '')) { box.innerHTML = ''; return; }
var r = ilmScoreWord(w, VAL);
var cells = r.parts.map(function(p){ return '<td><strong>' + p.ch.toUpperCase() + '</strong><br>' + p.v + '</td>'; }).join('');
box.innerHTML = '<table class="score"><tr>' + cells + '<td style="background:#f0fdfa"><strong>Total</strong><br>' + r.total + '</td></tr></table>';
sendH();
}
document.getElementById('word').addEventListener('input', score);
document.getElementById('load2').addEventListener('click', function(){
ensureWords(function(){
var two = WORDS.filter(function(w){ return w.length === 2; });
document.getElementById('twoout').innerHTML = '<div class="grp">' +
two.map(function(w){ return '<span class="chip">' + w + '</span>'; }).join('') + '</div>';
st(two.length.toLocaleString('en-US') + ' two-letter entries in the full list.');
sendH();
});
});
</script>
</body>
</html>
" id="wpc-frame-5218" class="wpc-embed-frame" style="width:100%;border:0;display:block;overflow:hidden;" scrolling="no"></iframe></div>
<p><script>(function(){var f=document.getElementById('wpc-frame-5218');function wpcResize(h){if(f){f.style.height=(h+24)+'px';}}window.addEventListener('message',function(e){if(e && e.data && e.data.wpcId===5218 && e.data.wpcH){wpcResize(e.data.wpcH);}});if(f){f.addEventListener('load',function(){wpcResize(460);});}})();</script></p>
<p><a href="https://ilmhunt.com/scrabble/" target="_blank" rel="noopener">Scrabble — Word Finder, Score Calculator and 2-Letter Words</a> by <a href="https://ilmhunt.com/" target="_blank" rel="noopener">IlmHunt</a> — free online tools</p>

Pingback: Scrabble vs. Scrabble Junior - Ilmhunt