Quordle asks you to solve four Wordles at once in nine guesses, which means four grids of colours to track in your head. This solver tracks them for you. Each board gets its own panel — greens in their spots, yellows in the spots where they appeared, greys in the long box — and one press solves all four boards together, showing exactly which words can still be each board’s answer. You can use this Quordle Solver free on IlmHunt — no sign-up needed, and it runs entirely in your browser.
How the Quordle Solver works
Under the hood it is the same elimination engine as our Wordle Solver, run four times with four independent rule sets — because in Quordle every board has its own answer, and a letter that is grey on board 1 can be green on board 3. Each panel applies the three colour rules strictly: green fixes a position, yellow requires the letter somewhere else, grey removes it — with the duplicate-letter subtlety handled (a letter that is grey in one place but confirmed elsewhere is capped at its confirmed count, not banned). The four answers share nothing except your guesses, so the solver never mixes information between boards.
How to use it
Fill in each board’s panel from its own grid — colours differ per board even for the same guess, so copy carefully, board by board. Press Solve All Four Boards. Then play the numbers: attack the board with the fewest candidates while it is still cheap to do so, and when choosing a guess word, favour one that is still alive on the most boards. Re-enter the colours after each guess; thirty seconds of bookkeeping buys very accurate lists.
A worked example
Four mid-game boards, solved in one pass. Board 1 (green S first, yellow A, grey E/T/O) is down to 230 candidates. Board 2 (green R in position 2, yellow A in position 3, grey E/S/O/I/N) is at 29. Board 3 is the dramatic one: a green L–E finish and a yellow P, with A, R, S, T, O, I and N ruled out, leaves exactly one word standing — duple — so that board is solved outright. Board 4 (a yellow M, grey vowels A/E/I/O plus S and T) sits at 37, including chump, clump, crumb, frump and grump. One press, four honest counts — and you know to spend your next guess on board 3’s neighbours and board 2, not board 1.
Quordle strategy the solver makes possible
Good Quordle play is triage. Early guesses should be information plays shared across all four boards — vowel-heavy openers that light up every grid at once. The mid-game is where players drown: four candidate pools, no idea which board is closest. That is exactly the moment to run this solver. Any board at one candidate is a free solve; any board under thirty deserves direct guesses; any board still in the hundreds needs another information word, ideally one that is itself a candidate on a second board so the guess does double duty. The solver cannot pick your guesses, but with exact counts per board it tells you where each guess earns the most.
Limitations worth knowing
Our five-letter list (15,921 words) is broader than Quordle’s answer pool, so candidate counts are honest upper bounds — the true answer is always included, but a few obscure extras ride along, and a board showing one candidate from a broad list is a certainty, while a board showing ten may really have eight. Merging each board’s grid into one rule set can very occasionally mishandle an exotic duplicate-letter case spread across several guesses.
Quordle Solver – frequently asked questions
Why does each board have its own panel?
Because the four boards have four different answers. The same guess word earns different colours on each board, and mixing them would produce nonsense lists — so each board is filtered by its own greens, yellows and greys.
Can I solve fewer than four boards?
Yes. Leave a panel empty and it simply reports the full list; fill in only the boards you are stuck on.
What should I do when one board reaches a single candidate?
Play it when convenient — it is a guaranteed solve — but if guesses are tight, first check whether a word exists that is a candidate on two boards at once; those guesses are the most efficient in the game.
Does it work for Dordle or other multi-board variants?
The per-board panels work for any Wordle-style game with 5-letter answers. For a two-board game, just use boards 1 and 2.
More word tools
Keep playing: Word Finder & Word Tools hub, Word Unscrambler, Wordle Solver and Anagram Solver — all free, all running on the same 359,039-word list.
Embed this tool on your website — free
Copy the code below and paste it into your page to add this working tool to your own site. A small credit link stays with it — that is all we ask.
var ILM_SCRABBLE = {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};
var ILM_WWF = {a:1,b:4,c:4,d:2,e:1,f:4,g:3,h:3,i:1,j:10,k:5,l:2,m:4,n:2,o:1,p:4,q:10,r:1,s:1,t:1,u:2,v:5,w:6,x:8,y:3,z:10};
function ilmCountLetters(str) {
var counts = {};
for (var i = 0; i < str.length; i++) { var c = str[i]; counts[c] = (counts[c] || 0) + 1; }
return counts;
}
function ilmScoreWith(word, rackCounts, wild, VAL) {
// Score of word built from rack letters; letters covered by wildcards score 0.
// Returns -1 when the word cannot be built.
var need = ilmCountLetters(word), score = 0, deficit = 0;
for (var L in need) {
var have = rackCounts[L] || 0;
if (need[L] <= have) { score += VAL[L] * need[L]; }
else { deficit += need[L] – have; score += VAL[L] * have; if (deficit > wild) return -1; }
}
return score;
}
// Every word buildable from the rack (letters + ? or * wildcards).
// Sorted by length desc, then score desc, then A-Z. [{w, s}]
function ilmRack(rack, words, VAL) {
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 (w.length < 2 || w.length > total) continue;
var s = ilmScoreWith(w, counts, wild, VAL);
if (s >= 0) out.push({ w: w, s: s });
}
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;
}
// Words using every letter of `letters` exactly (perfect anagrams).
// Sorted by score desc, then A-Z. [{w, s}]
function ilmExactAnagrams(letters, words, VAL) {
letters = (letters || '').toLowerCase().replace(/[^a-z]/g, '');
var target = letters.split('').sort().join(''), out = [];
for (var j = 0; j < words.length; j++) {
var w = words[j];
if (w.length !== letters.length) continue;
if (w.split('').sort().join('') === target) {
var s = 0;
for (var k = 0; k < w.length; k++) s += VAL[w[k]];
out.push({ w: w, s: s });
}
}
out.sort(function (a, b) { return b.s – a.s || (a.w < b.w ? -1 : a.w > b.w ? 1 : 0); });
return out;
}
// Wordle/Quordle constraint filter over 5-letter words.
// green: array of 5 — letter fixed at that position, '' when unknown.
// yellow: array of 5 — letter is in the word but NOT at that position, '' when none.
// grey: string of excluded letters. A grey letter that is also confirmed
// (green/yellow) caps that letter's count at the confirmed count.
// Returns matching words in A-Z order.
function ilmWordleFilter(fiveWords, green, yellow, grey) {
var confirmed = {}, i, L;
for (i = 0; i < 5; i++) {
if (green[i]) confirmed[green[i]] = (confirmed[green[i]] || 0) + 1;
if (yellow[i]) confirmed[yellow[i]] = (confirmed[yellow[i]] || 0) + 1;
}
var greySet = {};
grey = (grey || '').toLowerCase();
for (i = 0; i < grey.length; i++) { if (grey[i] >= 'a' && grey[i] <= 'z') greySet[grey[i]] = true; }
var out = [];
for (var j = 0; j < fiveWords.length; j++) {
var w = fiveWords[j], ok = true;
for (i = 0; i < 5; i++) {
if (green[i] && w[i] !== green[i]) { ok = false; break; }
if (yellow[i] && w[i] === yellow[i]) { ok = false; break; }
}
if (!ok) continue;
var wc = ilmCountLetters(w);
for (L in confirmed) { if ((wc[L] || 0) < confirmed[L]) { ok = false; break; } }
if (!ok) continue;
for (L in greySet) {
if (confirmed[L]) { if ((wc[L] || 0) !== confirmed[L]) { ok = false; break; } }
else if (wc[L]) { ok = false; break; }
}
if (ok) out.push(w);
}
return out;
}
// Rack results narrowed by optional starts-with / ends-with / contains filters,
// re-sorted by score desc, then length desc, then A-Z. [{w, s}]
function ilmRackFiltered(rack, words, VAL, opts) {
opts = opts || {};
var starts = (opts.starts || '').toLowerCase(), ends = (opts.ends || '').toLowerCase(),
contains = (opts.contains || '').toLowerCase();
var res = ilmRack(rack, words, VAL).filter(function (x) {
if (starts && x.w.indexOf(starts) !== 0) return false;
if (ends && x.w.slice(x.w.length – ends.length) !== ends) return false;
if (contains && x.w.indexOf(contains) === -1) return false;
return true;
});
res.sort(function (a, b) {
return b.s – a.s || b.w.length – a.w.length || (a.w < b.w ? -1 : a.w > b.w ? 1 : 0);
});
return res;
}
if (typeof module !== 'undefined') {
module.exports = { ILM_SCRABBLE: ILM_SCRABBLE, ILM_WWF: ILM_WWF, ilmRack: ilmRack,
ilmExactAnagrams: ilmExactAnagrams, ilmWordleFilter: ilmWordleFilter,
ilmRackFiltered: ilmRackFiltered, ilmScoreWith: ilmScoreWith, ilmCountLetters: ilmCountLetters };
}
var WORDLIST_URL = 'https://ilmhunt.com/wp-content/uploads/2026/10/wordlist.txt';
var FRAME_ID = 5214;
var WORDS = null, FIVE = null, PENDING = [];
function sendH(){ try { parent.postMessage({wpcId: FRAME_ID, wpcH: document.body.scrollHeight + 16}, '*'); } catch (e) {} }
window.addEventListener('load', sendH);
function st(msg){ document.getElementById('status').textContent = msg; }
function buildBoards(){
var wrap = document.getElementById('boards'), html = '';
for (var b = 0; b < 4; b++) {
html += '<div class="board"><h3>Board ' + (b + 1) + '</h3>' +
'<label>Green — right letter, right spot</label><div class="posrow grow" id="g' + b + '"></div>' +
'<label>Yellow — in the word, wrong spot <span class="hint">(box where it appeared)</span></label><div class="posrow yrow" id="y' + b + '"></div>' +
'<label>Grey — not in the word</label><input type="text" id="grey' + b + '" maxlength="26" placeholder="e.g. etoin" autocomplete="off" spellcheck="false">' +
'<div class="cnt" id="cnt' + b + '"></div><div id="res' + b + '"></div></div>';
}
wrap.innerHTML = html;
for (var b2 = 0; b2 < 4; b2++) { fillRow('g' + b2); fillRow('y' + b2); }
sendH();
}
function fillRow(id){
var row = document.getElementById(id);
for (var i = 0; i < 5; i++) {
var inp = document.createElement('input');
inp.type = 'text'; inp.maxLength = 1; inp.autocomplete = 'off';
inp.addEventListener('input', function(){ this.value = this.value.replace(/[^a-zA-Z]/g, '').slice(0, 1); });
inp.addEventListener('keydown', function(e){ if (e.key === 'Enter') run(); });
row.appendChild(inp);
}
}
function readRow(id){
var out = [], inputs = document.getElementById(id).getElementsByTagName('input');
for (var i = 0; i < 5; i++) out.push((inputs[i].value || '').toLowerCase().slice(0, 1));
return out;
}
buildBoards();
function ensureWords(cb){
if (WORDS) { cb(); return; }
PENDING.push(cb);
if (PENDING.length > 1) return;
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; });
FIVE = WORDS.filter(function(w){ return w.length === 5; });
st('Word list ready — ' + FIVE.length.toLocaleString('en-US') + ' five-letter words.');
var q = PENDING; PENDING = []; q.forEach(function(f){ f(); });
}).catch(function(){ PENDING = []; st('Could not load the word list. Check your connection and press Solve again.'); });
}
function solveBoard(b){
var green = readRow('g' + b), yellow = readRow('y' + b);
var grey = document.getElementById('grey' + b).value.replace(/[^a-zA-Z]/g, '').toLowerCase();
var res = ilmWordleFilter(FIVE, green, yellow, grey);
var cnt = document.getElementById('cnt' + b), box = document.getElementById('res' + b);
if (!res.length) {
cnt.textContent = '0 possible answers — recheck this board\u2019s boxes.';
box.innerHTML = '';
return 0;
}
var show = res.slice(0, 300);
var html = '';
show.forEach(function(w){ html += '<span class="chip">' + w + '</span>'; });
if (res.length > show.length) html += '<p class="none">Showing the first 300.</p>';
box.innerHTML = html;
cnt.textContent = res.length.toLocaleString('en-US') + ' possible answer' + (res.length === 1 ? '' : 's') + ' left on this board.';
return res.length;
}
function run(){
ensureWords(function(){
var parts = [];
for (var b = 0; b < 4; b++) parts.push('Board ' + (b + 1) + ': ' + solveBoard(b));
st(parts.join(' · '));
sendH();
});
}
document.getElementById('go').addEventListener('click', run);
</script>
</body>
</html>
" id="ilmhunt-quordle-solver" title="Quordle Solver — Solve All Four Boards at Once" style="width:100%;max-width:720px;height:640px;border:0;" loading="lazy"></iframe>
<script>(function(){var f=document.getElementById('ilmhunt-quordle-solver');window.addEventListener('message',function(e){if(e&&e.data&&e.data.wpcId===5214&&e.data.wpcH&&f){f.style.height=(e.data.wpcH+24)+'px';}});})();</script>
<p><a href="https://ilmhunt.com/quordle-solver/">Quordle Solver — Solve All Four Boards at Once</a> — a free tool from <a href="https://ilmhunt.com/">IlmHunt — free online tools</a></p>

Pingback: Free Games Like Wordle - Ilmhunt