Wordfeud games are usually lost in the same place: a rack of letters you cannot turn into a word while the clock — and your opponent — move on. This free Wordfeud Helper ends the stall. Type in your letters, use ? for a blank tile, and it finds every word your rack can make, scored with Wordfeud’s own tile values, which are not the same as Scrabble’s. Results are grouped by length with the best scores first, and optional start, contains and end filters let you fit a word to the exact gap on your board. It runs entirely in your browser against our 359,039-word list.
How the Wordfeud Helper works
The helper treats your letters as a set of tiles where duplicates matter. For every word in the list it checks whether your tiles can cover the word’s letters: each letter uses up one matching tile, and any letter you are missing uses one of your blank tiles instead. Words that would need more blanks than you hold are rejected. Survivors are scored by adding up Wordfeud tile values, with blank-covered letters scoring zero — exactly the rule on a real board. The optional filters run before scoring: starts with and ends with match words to letters already placed, and contains finds words that use a letter you want to play through.
How to use it
Type your rack into the letters box — order does not matter. If you are aiming at a specific spot, fill in whichever filters apply: the letters a new word must begin with because they are already on the board, a letter it must pass through, or the letters it must end with. Press Find Words and scan from the top: the longest, highest-scoring plays sit first. Before spending a blank, it is worth searching once without the ? to see what the rack makes on its own.
A worked example
Enter the seven tiles aeinrst and the helper returns 468 words. Fourteen of them use all seven tiles, including retinas, stainer, nastier, retsina and stearin — playing all seven earns the same satisfaction as a Scrabble bingo. In Wordfeud values retinas scores 9 (R2, E1, T1, I2, N1, A1, S1). Add st in the starts-with filter and the list narrows to openings like stainer, stearin, strain and stain — the words that can hook onto an S-T already on the board.
Wordfeud values are not Scrabble values
This is the detail most helpers get wrong. Several tiles are priced differently in Wordfeud: B is worth 4 instead of 3, C is 5 instead of 3, F is 5 instead of 4, I is 2 instead of 1, O is 3 instead of 1, U is 3 instead of 1 and Y is a hefty 8 instead of 4. A word built from those letters is worth noticeably more in Wordfeud than the same word in Scrabble, and a helper using the wrong table will rank your plays in the wrong order. This one uses the Wordfeud table throughout, so the play it puts first really is your best-scoring option.
Limitations worth knowing
Our list is a broad English word list, deliberately wider than the dictionary Wordfeud itself uses, so a small number of obscure entries here will not be accepted in the app — if a word looks strange, expect Wordfeud to have the final say. Scores are tile sums only: the helper cannot see your board, so double and triple letter and word squares, and points from words formed sideways, are not included. It also cannot know which letters remain in the bag, so endgame tile-tracking is still your job.
Wordfeud Helper – frequently asked questions
Is using a Wordfeud helper cheating?
That depends on the game you agreed to play. Against friends who are happy for everyone to use help, it is a house rule like any other. In ranked or competitive games against strangers, using a solver is against the spirit of the match — most players use tools like this for practice and for learning new words between games instead.
How do blank tiles work?
Type ? wherever you hold a blank. The helper treats it as any letter, and any letter it covers scores zero, matching Wordfeud’s own rule.
How many letters can I enter?
Up to 12 — more than a full Wordfeud rack of 7, which is handy when you want to check what a rack plus a letter already on the board can make.
Does it work for Scrabble too?
The word finding does, but the scores would be wrong, because the two games price tiles differently. Use our Scrabble tools on this page’s hub for Scrabble-valued results.
More word tools and lists
Browse the full collection on our Word Finder & Word Tools hub. Closest relatives: the Word Unscrambler for any rack, the Board Solver for 4×4 letter grids, and Unscramble Letters for a tile-by-tile view with a best-plays panel.
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>Wordfeud Helper</h2>
<p class="sub">Enter your Wordfeud rack and get every word it can make – scored with real Wordfeud tile values, grouped by length. Use <strong>?</strong> for a blank tile.</p>
<label for="rack">Your letters</label>
<input type="text" id="rack" maxlength="12" placeholder="e.g. aeinrst or qu?z" autocomplete="off" spellcheck="false">
<label for="sw">Starts with (optional)</label>
<input type="text" id="sw" class="small" maxlength="4" placeholder="e.g. st" autocomplete="off" spellcheck="false">
<label for="ct">Contains (optional)</label>
<input type="text" id="ct" class="small" maxlength="4" placeholder="e.g. ai" autocomplete="off" spellcheck="false">
<label for="ew">Ends with (optional)</label>
<input type="text" id="ew" class="small" maxlength="4" placeholder="e.g. ed" autocomplete="off" spellcheck="false">
<br>
<button id="go" type="button">Find Words</button>
<div id="status"></div>
<div id="results"></div>
</div>
<script>
var VAL = {a:1,b:4,c:5,d:3,e:1,f:5,g:3,h:4,i:2,j:6,k:6,l:2,m:4,n:1,o:3,p:3,q:10,r:2,s:1,t:1,u:3,v:5,w:5,x:9,y:8,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: 5211, 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 clean(id){ return document.getElementById(id).value.toLowerCase().replace(/[^a-z]/g, ''); }
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 letters.'); return; }
var res = ilmSolve(rack, WORDS, VAL, { startsWith: clean('sw'), endsWith: clean('ew'), contains: clean('ct') });
document.getElementById('results').innerHTML = groupHtml(res, true);
st(res.length.toLocaleString('en-US') + ' words found, scored with Wordfeud tile values.');
sendH();
});
}
document.getElementById('go').addEventListener('click', run);
document.getElementById('rack').addEventListener('keydown', function(e){ if (e.key === 'Enter') run(); });
</script>
</body>
</html>
" id="wpc-frame-5211" 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-5211');function wpcResize(h){if(f){f.style.height=(h+24)+'px';}}window.addEventListener('message',function(e){if(e && e.data && e.data.wpcId===5211 && e.data.wpcH){wpcResize(e.data.wpcH);}});if(f){f.addEventListener('load',function(){wpcResize(460);});}})();</script></p>
<p><a href="https://ilmhunt.com/wordfeud-helper/" target="_blank" rel="noopener">Wordfeud Helper — Find Every Word in Your Rack</a> by <a href="https://ilmhunt.com/" target="_blank" rel="noopener">IlmHunt</a> — free online tools</p>
