Word Scramble is the oldest word game in the world wearing its simplest clothes: a familiar English word, its letters shuffled, and you against the jumble. This free version deals you a fresh scramble every round from 197 common words, scores you for every solve, and keeps your streak honest — guess wrong or peek at the answer and the streak resets. No timer, no account, no downloads: just you and the letters.
How to play Word Scramble
Press New word and the game picks a common English word of 3 to 9 letters and shuffles its letters — the shuffle is guaranteed never to deal the word back unchanged, so the jumble in front of you is always a real puzzle. Type your guess and press Check guess (or hit Enter). A correct answer scores points equal to the word’s length, your streak climbs, and the next word arrives. A wrong guess costs the streak but not the round: the same scramble stays up until you solve it, reveal it, or move on. Stuck? The hint button tells you the word’s first letter and length — at a price of 2 points off that word’s score. The Reveal button ends the round, shows the answer, and resets your streak to zero.
The words behind the game
The deck holds 197 everyday words — garden, planet, orange, silver, market, rainbow, kitchen, thunder and their familiar neighbours. The game deliberately does not draw from the site’s full 359,039-word list: a scramble is only fair when the answer is a word you actually know, and only fun when solving it is a matter of rearranging, not of guessing whether qindar is real. Every word in the deck is common enough to be met in a children’s book, and long enough — up to 9 letters — to make a satisfying knot of letters.
Why unscrambling builds real word skill
Scrambles train the exact skill fluent readers use unconsciously: recognising letter patterns instead of reading letter by letter. Solving lnepat into planet teaches your eye to spot the common chunks — the -et ending, the pl- opening — that make English words fast to recognise. Teachers use word scrambles for spelling practice for the same reason: reconstructing a word from its letters forces attention to its exact spelling in a way that copying it never does. Regular players find the spill-over real — anagrams in tile games get faster, crossword anagrams stop being the hard clues, and new vocabulary sticks because it was earned by solving, not by skimming.
Solving tips from the letters up
Start with endings: a trailing S, -ED, -ER or -ING is statistically likely, and peeling one off shrinks the knot at once. Look for the vowels and park them mentally in the middle distance — most English words alternate consonants and vowels loosely, so a cluster of three consonants in the jumble usually hides a vowel either side of it in the answer. Common openings (TH, CH, SH, PL, BR, TR) are worth trying as blocks. And if a word resists, say the letters aloud in a different order; the ear often catches a syllable the eye has been skipping.
Limitations worth knowing
This is a solo practice game by design: there is no timer, no leaderboard and no opponent, and your score lives only in this page until you close it. The deck of 197 words means a devoted player will eventually meet repeats — treat a repeat as a speed round and try to beat your own hesitation. It is also deliberately gentler than our solver tools: if you want every anagram of a nasty letter set rather than a fair game, the Word Unscrambler is the heavy machinery.
Word Scramble – frequently asked questions
Is every scramble solvable?
Yes. Each jumble is a genuine rearrangement of a real, common word, and the shuffle is code-tested to never present the word unchanged — if the letters look impossible, the answer is simply hiding well. The Reveal button will always prove it.
How does scoring work?
A solve earns points equal to the word’s length — 6 points for planet. Using the hint deducts 2 points from that word’s reward (minimum 1). Wrong guesses and reveals reset your streak; nothing else is deducted.
Is Word Scramble good for children and classrooms?
Yes — the deck is all common, classroom-safe vocabulary, there are no ads inside the game, no chat and nothing to sign up for, and the untimed format suits mixed speeds. Teachers often set a target streak as a warm-up task.
What is the difference between this and the Word Unscrambler?
The game deals you one fair puzzle at a time and scores your solving. The Word Unscrambler is a tool: give it any letters and it lists every word they can make, with game scores. One is play; the other is power.
More word tools and lists
Browse the full collection on our Word Finder & Word Tools hub. Keep playing with the Word Unscrambler, draw fresh words from the Random Word Generator, or hunt by rules with the Word Finder.
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.
function ilmScoreWord(w, VAL) {
var s = 0;
for (var i = 0; i < w.length; i++) s += VAL[w[i]] || 0;
return s;
}
function ilmRackCounts(rack) {
var counts = {}, wild = 0;
rack = (rack || ”).toLowerCase();
for (var i = 0; i < rack.length; i++) {
var ch = rack[i];
if (ch === ‘?’ || ch === ‘*’) wild++;
else if (ch >= ‘a’ && ch <= ‘z’) counts[ch] = (counts[ch] || 0) + 1;
}
return { counts: counts, wild: wild };
}
// Rack solver: every word buildable from the rack (subset of tiles, ? = blank,
// blank-covered letters score 0), scored with VAL. opts may carry starts,
// ends, contains (lowercase strings) and exactLen (0 = any).
// Returns [{w, s}] sorted length desc, score desc, A-Z.
function ilmRackSolve(rack, words, VAL, opts) {
opts = opts || {};
var rc = ilmRackCounts(rack), counts = rc.counts, wild = rc.wild;
var total = wild;
for (var k0 in counts) total += counts[k0];
var starts = (opts.starts || ”).toLowerCase();
var ends = (opts.ends || ”).toLowerCase();
var contains = (opts.contains || ”).toLowerCase();
var exactLen = opts.exactLen || 0;
var out = [];
for (var j = 0; j < words.length; j++) {
var w = words[j];
if (w.length < 2 || w.length > total) continue;
if (exactLen && w.length !== exactLen) continue;
if (starts && w.indexOf(starts) !== 0) continue;
if (ends && w.slice(w.length – ends.length) !== ends) continue;
if (contains && w.indexOf(contains) === -1) continue;
var need = {};
for (var k = 0; k < w.length; k++) { var c = w[k]; need[c] = (need[c] || 0) + 1; }
var 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;
}
// Crossword pattern solver: pattern is letters plus ? or . for unknown
// squares. If len is given and longer than the pattern, the pattern is
// padded with ? on the right; if the pattern is longer than len, no match.
// Returns matching words sorted A-Z.
function ilmCrossword(pattern, words, len) {
pattern = (pattern || ”).toLowerCase().replace(/\./g, ‘?’);
var effLen = len || pattern.length;
if (pattern.length > effLen) return [];
var pat = pattern;
while (pat.length < effLen) pat += ‘?’;
var out = [];
for (var j = 0; j < words.length; j++) {
var w = words[j];
if (w.length !== effLen) continue;
var ok = true;
for (var i = 0; i < effLen; i++) {
var p = pat[i];
if (p !== ‘?’ && p !== w[i]) { ok = false; break; }
}
if (ok) out.push(w);
}
out.sort();
return out;
}
// Pattern + rack solver (Word Solver): the word must match the pattern
// positionally; letters on fixed squares are already on the board (free),
// letters on ? squares must come from the rack (? in the rack = blank tile,
// blank-covered letters score 0). Returns [{w, s}] score desc, A-Z.
function ilmPatternRackSolve(rack, pattern, words, VAL) {
pattern = (pattern || ”).toLowerCase().replace(/\./g, ‘?’);
var rc = ilmRackCounts(rack), counts = rc.counts, wild = rc.wild;
var out = [];
for (var j = 0; j < words.length; j++) {
var w = words[j];
if (w.length !== pattern.length) continue;
var ok = true, score = 0;
var needFromRack = {};
for (var i = 0; i < w.length; i++) {
var p = pattern[i];
if (p >= ‘a’ && p <= ‘z’) {
if (p !== w[i]) { ok = false; break; }
score += VAL[w[i]];
} else {
needFromRack[w[i]] = (needFromRack[w[i]] || 0) + 1;
}
}
if (!ok) continue;
var deficit = 0;
for (var L in needFromRack) {
var have = counts[L] || 0;
if (needFromRack[L] <= have) score += VAL[L] * needFromRack[L];
else {
deficit += needFromRack[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.s – a.s || (a.w < b.w ? -1 : a.w > b.w ? 1 : 0);
});
return out;
}
// Letter filter (Words With Letters): include = letters that must ALL be in
// the word (multiset: "ee" means at least two e’s); exclude = letters that
// must NOT appear. Optional exactLen, starts, ends. Returns words A-Z.
function ilmFilterWords(words, f) {
f = f || {};
var inc = (f.include || ”).toLowerCase();
var exc = (f.exclude || ”).toLowerCase();
var starts = (f.starts || ”).toLowerCase();
var ends = (f.ends || ”).toLowerCase();
var exactLen = f.exactLen || 0;
var incNeed = {};
for (var i = 0; i < inc.length; i++) {
var c0 = inc[i];
if (c0 >= ‘a’ && c0 <= ‘z’) incNeed[c0] = (incNeed[c0] || 0) + 1;
}
var excSet = {};
for (var e = 0; e < exc.length; e++) {
var c1 = exc[e];
if (c1 >= ‘a’ && c1 <= ‘z’) excSet[c1] = true;
}
var out = [];
for (var j = 0; j < words.length; j++) {
var w = words[j];
if (exactLen && w.length !== exactLen) continue;
if (starts && w.indexOf(starts) !== 0) continue;
if (ends && w.slice(w.length – ends.length) !== ends) continue;
var ok = true;
for (var x = 0; x < w.length; x++) if (excSet[w[x]]) { ok = false; break; }
if (!ok) continue;
var wc = {};
for (var y = 0; y < w.length; y++) wc[w[y]] = (wc[w[y]] || 0) + 1;
for (var L in incNeed) if ((wc[L] || 0) < incNeed[L]) { ok = false; break; }
if (ok) out.push(w);
}
out.sort();
return out;
}
// Random picker: opts {count, len (0 = any 2-15), startsWith}. rng() must
// return [0,1). Samples without replacement.
function ilmRandomWords(words, opts, rng) {
opts = opts || {};
var len = opts.len || 0;
var sw = (opts.startsWith || ”).toLowerCase();
var pool = [];
for (var j = 0; j < words.length; j++) {
var w = words[j];
if (len && w.length !== len) continue;
if (sw && w.indexOf(sw) !== 0) continue;
pool.push(w);
}
var count = Math.min(opts.count || 5, pool.length);
var picked = [];
for (var n = 0; n < count; n++) {
var idx = Math.floor(rng() * pool.length);
picked.push(pool[idx]);
pool.splice(idx, 1);
}
return picked;
}
// Scramble: Fisher-Yates shuffle of the word’s letters, retried until the
// result differs from the original (words made of one repeated letter are
// returned unchanged — none are in the game list).
function ilmScrambleWord(word, rng) {
var letters = word.split(”);
var distinct = {};
for (var d = 0; d < letters.length; d++) distinct[letters[d]] = true;
var nDistinct = 0;
for (var k in distinct) nDistinct++;
if (nDistinct < 2) return word;
for (var attempt = 0; attempt < 200; attempt++) {
var a = letters.slice();
for (var i = a.length – 1; i > 0; i–) {
var j = Math.floor(rng() * (i + 1));
var tmp = a[i]; a[i] = a[j]; a[j] = tmp;
}
var s = a.join(”);
if (s !== word) return s;
}
return letters.slice().reverse().join(”);
}
// ~150 common English words for the Word Scramble game (4-8 letters).
var ILM_GAME_WORDS = [‘apple’,’banana’,’orange’,’garden’,’planet’,’silver’,’market’,’window’,’summer’,’winter’,’spring’,’autumn’,’bridge’,’castle’,’dragon’,’friend’,’school’,’pencil’,’paper’,’river’,’ocean’,’forest’,’jungle’,’desert’,’island’,’mountain’,’valley’,’village’,’kitchen’,’bedroom’,’picture’,’camera’,’guitar’,’piano’,’violin’,’trumpet’,’basket’,’bottle’,’candle’,’mirror’,’button’,’pocket’,’ticket’,’travel’,’journey’,’holiday’,’picnic’,’breakfast’,’dinner’,’supper’,’cheese’,’butter’,’coffee’,’sugar’,’pepper’,’lemon’,’melon’,’grape’,’peach’,’mango’,’rabbit’,’turtle’,’monkey’,’tiger’,’zebra’,’panda’,’koala’,’eagle’,’shark’,’whale’,’snake’,’horse’,’sheep’,’chicken’,’spider’,’flower’,’garden’,’hammer’,’ladder’,’rocket’,’planet’,’comet’,’meteor’,’galaxy’,’nebula’,’tunnel’,’harbor’,’anchor’,’sailor’,’pirate’,’treasure’,’diamond’,’golden’,’copper’,’iron’,’steel’,’wooden’,’cotton’,’leather’,’plastic’,’magnet’,’battery’,’engine’,’wheel’,’brake’,’helmet’,’jacket’,’gloves’,’scarf’,’boots’,’socks’,’shirt’,’dress’,’skirt’,’watch’,’clock’,’phone’,’tablet’,’laptop’,’screen’,’keyboard’,’mouse’,’printer’,’speaker’,’dancer’,’singer’,’farmer’,’doctor’,’nurse’,’teacher’,’writer’,’artist’,’baker’,’driver’,’hunter’,’fisher’,’sailor’,’soldier’,’captain’,’general’,’king’,’queen’,’prince’,’knight’,’wizard’,’witch’,’giant’,’fairy’,’elf’,’dwarf’,’goblin’,’troll’,’phoenix’,’unicorn’,’mermaid’,’thunder’,’lightning’,’rainbow’,’snowflake’,’raindrop’,’sunshine’,’moonlight’,’starlight’,’breeze’,’storm’,’cloud’,’fog’,’frost’,’ice’,’snow’,’rain’,’wind’,’wave’,’sand’,’stone’,’rock’,’cliff’,’cave’,’lake’,’pond’,’stream’,’waterfall’,’meadow’,’prairie’,’savanna’,’tundra’,’volcano’,’glacier’,’canyon’,’oasis’,’lagoon’,’coral’,’pearl’,’shell’,’feather’,’wing’,’claw’,’horn’,’tail’,’mane’];
ILM_GAME_WORDS = ILM_GAME_WORDS.filter(function (w, i) { return ILM_GAME_WORDS.indexOf(w) === i; });
if (typeof module !== ‘undefined’) {
module.exports = { ILM_SCRABBLE: ILM_SCRABBLE, ILM_WWF: ILM_WWF, ILM_CHUMS: ILM_CHUMS,
ilmScoreWord: ilmScoreWord, ilmRackSolve: ilmRackSolve, ilmCrossword: ilmCrossword,
ilmPatternRackSolve: ilmPatternRackSolve, ilmFilterWords: ilmFilterWords,
ilmRandomWords: ilmRandomWords, ilmScrambleWord: ilmScrambleWord, ILM_GAME_WORDS: ILM_GAME_WORDS };
}
var ANSWER = ”, SCRAMBLED = ”, SCORE = 0, STREAK = 0, HINTED = false;
function sendH(){ try { parent.postMessage({wpcId: 5217, wpcH: document.body.scrollHeight + 16}, ‘*’); } catch (e) {} }
window.addEventListener(‘load’, sendH);
function st(msg){ document.getElementById(‘status’).textContent = msg; }
function show(){
document.getElementById(‘scr’).textContent = SCRAMBLED;
document.getElementById(‘score’).textContent = SCORE;
document.getElementById(‘streak’).textContent = STREAK;
document.getElementById(‘wlen’).textContent = ANSWER ? ANSWER.length : ‘–’;
sendH();
}
function newWord(){
ANSWER = ILM_GAME_WORDS[Math.floor(Math.random() * ILM_GAME_WORDS.length)];
SCRAMBLED = ilmScrambleWord(ANSWER, Math.random);
HINTED = false;
document.getElementById(‘guess’).value = ”;
st(‘New word scrambled — ‘ + ANSWER.length + ‘ letters. Good luck!’);
show();
}
function check(){
if (!ANSWER) { newWord(); return; }
var g = document.getElementById(‘guess’).value.replace(/[^a-zA-Z]/g, ”).toLowerCase();
if (!g) { st(‘Type a guess first.’); return; }
if (g === ANSWER) {
var pts = ANSWER.length – (HINTED ? 2 : 0);
if (pts < 1) pts = 1;
SCORE += pts; STREAK += 1;
st(‘Correct! "’ + ANSWER + ‘" — +’ + pts + ‘ points. Streak: ‘ + STREAK + ‘. Next word coming up…’);
show();
setTimeout(newWord, 1400);
} else {
STREAK = 0;
st(‘Not quite — "’ + g + ‘" is not it. The letters are still: ‘ + SCRAMBLED.toUpperCase() + ‘.’);
show();
}
}
document.getElementById(‘check’).addEventListener(‘click’, check);
document.getElementById(‘guess’).addEventListener(‘keydown’, function(e){ if (e.key === ‘Enter’) check(); });
document.getElementById(‘hint’).addEventListener(‘click’, function(){
if (!ANSWER) { st(‘Press New word first.’); return; }
HINTED = true;
st(‘Hint: the word starts with "’ + ANSWER[0].toUpperCase() + ‘" and has ‘ + ANSWER.length + ‘ letters. (Using a hint costs 2 points.)’);
});
document.getElementById(‘reveal’).addEventListener(‘click’, function(){
if (!ANSWER) { st(‘Press New word first.’); return; }
STREAK = 0;
st(‘The word was "’ + ANSWER + ‘". Streak reset — press New word to play again.’);
show();
});
document.getElementById(‘next’).addEventListener(‘click’, newWord);
newWord();
</script>
</body>
</html>
" style="width:100%;height:640px;border:0;display:block;overflow:hidden;" scrolling="no"></iframe></div>
<p><a href="https://ilmhunt.com/word-scramble/" target="_blank" rel="noopener">Word Scramble — Play the Unscramble Game Online for Free</a> by <a href="https://ilmhunt.com/" target="_blank" rel="noopener">IlmHunt</a> — free online tools</p>
