Jumbled text rarely arrives one word at a time. Puzzle pages, quiz rounds and classroom worksheets scramble whole lines — and this tool unscrambles them whole. Type a line of jumbled words and it restores each word in place, showing you the rebuilt sentence first and the evidence underneath: for every word, all of its full unscrambles, plus the shorter words hiding inside it. Where a jumbled word honestly has more than one answer, the restored line underlines it and you can click to swap through the alternatives. It runs in your browser against our 359,039-word list. You can use this Unscramble Words free on IlmHunt — no sign-up needed, and it runs entirely in your browser.
How Unscramble Words works
Each word in your line is handled independently. The tool looks for full unscrambles — words from the list that use exactly the same letters, no more and no fewer. If your typed word is already a real word it is left untouched. If exactly one full unscramble exists, the choice is made for you. If several exist, the restored line picks the first and underlines it; clicking steps through the rest, because no tool can know from letters alone which word a sentence meant. Beneath the line, each word gets a section listing all its full unscrambles and up to thirty shorter words it contains, with Scrabble scores — so a word with no full unscramble still gives you something to work with, and usually reveals a typing slip.
How to use it
Type or paste the whole jumbled line, spaces and all, up to twenty words. Capitals are ignored and punctuation is stripped. Press Unscramble and read the restored line at the top. Then scan the per-word sections for anything underlined in the line — those are your judgement calls. If a word came out wrong, click it in the restored line to swap in its next unscramble rather than retyping anything.
A worked example
Type kciuq nworb xof and the line comes back as quick brown fox — no clicks needed, because each of those three scrambles has exactly one full unscramble in the list, which the per-word sections confirm. Now type hte: the sections show three full unscrambles — eth, het and the — and the restored line underlines the word so you can click through to the. That honesty is the point: letters alone cannot tell eth from the, and a tool that silently guessed would be wrong a third of the time. One more everyday case: odg offers dog and god — context decides, and the click makes it instant.
Where jumbled sentences show up
The daily jumble puzzle is the famous one: four scrambled words and a cartoon caption answer built from their letters, where unscrambling the line in one pass keeps the whole puzzle in view. Teachers scramble sentences for ordering exercises and reading practice, and the restored line doubles as an answer key. Quiz and trivia rounds use jumbled lines as a speed challenge. And language learners use short scrambled lines to rehearse word order in a new language — type the jumble, restore it, and check your instinct against the list. In every case the pattern is the same: machines are fast at permutations, humans are better at meaning, and this tool is built to hand the meaning decisions back to you clearly marked.
Limitations worth knowing
The tool works word by word and knows no grammar or context, so ambiguous words genuinely need your click — that is a limit of the problem, not a missing feature. It rearranges letters rather than correcting them: a word typed with a wrong letter unscrambles into the wrong family, though the contained-words list usually exposes the slip. Proper names, capitalisation and punctuation are not restored, and words missing from our list stay as typed, with their shorter contained words shown where any exist.
Unscramble Words – frequently asked questions
What if a word has several unscrambles?
All of them are listed under that word, and the restored line underlines it — click the word to cycle through the options until the sentence reads right.
Does it fix spelling mistakes?
No. It only rearranges the letters you give it. If a word has no full unscramble, a letter is probably wrong — the shorter words it contains will hint at what was meant.
How many words can I unscramble in one line?
Up to twenty words per run, which covers puzzle lines, worksheet sentences and quiz questions. For many separate single words, the batch unscrambler linked below is faster.
Are capital letters and full stops a problem?
No — capitals are treated as lowercase and punctuation is ignored, though the restored line does not put them back.
More word tools and lists
Browse the full collection on our Word Finder & Word Tools hub. Closest relatives: the Word Unscrambler for single racks, the batch Word Unscramblers for lists of jumbled words, and the Word Cookies Answers solver for letter-bank games.
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>Unscramble Words – Sentences Too</h2>
<p class="sub">Type a line of jumbled words and watch it come back restored. If a word has more than one possible unscramble, click it in the restored line to swap to the next option – every alternative is listed below.</p>
<label for="line">Your jumbled line</label>
<input type="text" id="line" class="small" style="text-transform:none;letter-spacing:0" placeholder="e.g. kciuq nworb xof" autocomplete="off" spellcheck="false">
<br>
<button id="go" type="button">Unscramble</button>
<div id="status"></div>
<div id="restored"></div>
<div id="results"></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: 5216, 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>';
}
var state = [];
function renderRestored(){
var html = state.map(function(item, i){
if (!item.alts.length) return item.token;
return '<span data-alt="' + i + '" title="Click to swap">' + item.alts[item.pick] + '</span>';
}).join(' ');
document.getElementById('restored').innerHTML = '<div class="big">' + html + '</div>';
document.querySelectorAll('#restored span[data-alt]').forEach(function(sp){
sp.addEventListener('click', function(){
var item = state[parseInt(sp.getAttribute('data-alt'), 10)];
item.pick = (item.pick + 1) % item.alts.length;
renderRestored(); sendH();
});
});
}
function run(){
ensureWords(function(){
var raw = document.getElementById('line').value.toLowerCase().split(/\s+/)
.map(function(x){ return x.replace(/[^a-z]/g, ''); }).filter(function(x){ return x.length; }).slice(0, 20);
if (!raw.length) { st('Type at least one jumbled word.'); return; }
state = [];
var html = '';
raw.forEach(function(tok, i){
var alts = ilmFullAnagrams(tok, WORDS);
var pick = 0;
if (alts.indexOf(tok) !== -1) pick = alts.indexOf(tok);
state.push({ token: tok, alts: alts, pick: pick });
var subs = ilmSolve(tok, WORDS, VAL, {});
html += '<div class="grp"><h3>' + tok + '</h3>';
if (alts.length) {
html += '<p class="mut">Full unscrambles: ' + alts.map(function(a){ return '<strong>' + a + '</strong>'; }).join(', ') + '</p>';
} else {
html += '<p class="mut">No full unscramble in the word list – shorter words it contains:</p>';
}
var show = subs.filter(function(x){ return x.w.length < tok.length; }).slice(0, 30);
show.forEach(function(x){ html += '<span class="chip">' + x.w + '<sup>' + x.s + '</sup></span>'; });
if (!show.length && !alts.length) html += '<p class="none">No words found in those letters.</p>';
html += '</div>';
});
renderRestored();
document.getElementById('results').innerHTML = html;
st('Line restored. Click any underlined word to swap it for another unscramble.');
sendH();
});
}
document.getElementById('go').addEventListener('click', run);
document.getElementById('line').addEventListener('keydown', function(e){ if (e.key === 'Enter') run(); });
</script>
</body>
</html>
" id="wpc-frame-5216" 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-5216');function wpcResize(h){if(f){f.style.height=(h+24)+'px';}}window.addEventListener('message',function(e){if(e && e.data && e.data.wpcId===5216 && e.data.wpcH){wpcResize(e.data.wpcH);}});if(f){f.addEventListener('load',function(){wpcResize(460);});}})();</script></p>
<p><a href="https://ilmhunt.com/unscramble-words/" target="_blank" rel="noopener">Unscramble Words — Restore Jumbled Words and Sentences</a> by <a href="https://ilmhunt.com/" target="_blank" rel="noopener">IlmHunt</a> — free online tools</p>
