| Across | Down |
|---|---|
| Clue | Copy |
|---|---|
Generate a grid to populate across clues.
| Clue | Copy |
|---|---|
Generate a grid to populate down clues.
| Fill density | {{ gridStats.fillPercent }} % |
|---|---|
| Letters placed | {{ gridStats.letterCells }} / {{ gridStats.totalCells }} |
| Crossing cells | {{ gridStats.crossingCells }} ({{ gridStats.crossingRate }} %) |
| Words placed | {{ gridStats.totalWords }} of {{ gridStats.totalEntries }} |
| Average word length | {{ gridStats.averageWordLength }} |
| Longest entry | {{ gridStats.longestWord || '—' }} ({{ gridStats.longestWordLength }}) |
| Shortest entry | {{ gridStats.shortestWord || '—' }} ({{ gridStats.shortestWordLength }}) |
| Symmetry match | {{ gridStats.symmetry.percent }} % ({{ gridStats.symmetry.label }}) |
| Unused entries | {{ unusedCount }} |
| Runtime | {{ gridStats.totalRuntimeMs }} ms total (best {{ gridStats.bestAttemptMs }} ms) |
| Best seed | {{ gridStats.bestSeed || 'default' }} |
Run the generator to populate metrics.
| # | Seed | Placed | Fill % | Time (ms) | Note |
|---|---|---|---|---|---|
| {{ run.attempt }} | {{ run.seed || 'default' }} | {{ run.placed }} | {{ run.fillPercent }} | {{ run.genMs }} | {{ run.note || '—' }} |
No attempt data yet.
| Word | Clue | Length | Copy |
|---|---|---|---|
| {{ entry.word }} | {{ entry.clue || '—' }} | {{ entry.word.length }} |
Every entry was placed in the grid.
Crossword puzzles work by making answers confirm one another. Entries run across and down, and each shared letter gives the solver another chance to verify a clue. That structure makes custom crosswords useful for revision sheets, club newsletters, staff activities, themed event handouts, and any situation where the chosen vocabulary matters as much as the finished grid.
This generator builds that kind of puzzle from your own answer-and-clue list instead of from a fixed puzzle bank. One successful run produces the numbered grid, across and down clue lists, attempt statistics, unused-entry diagnostics, and a JSON snapshot of the final layout and export settings.
It is especially helpful when the first acceptable grid is not necessarily the best one. You can enlarge the board, switch between a faster greedy search and a slower backtracking search, repeat seeded attempts, and let the page keep the strongest fill automatically rather than comparing several near misses by eye.
The result views also surface quality signals that lightweight puzzle makers often hide. Fill percentage, crossing rate, symmetry match, word-length spread, and unused count tell you whether the puzzle is merely printable or genuinely well interlocked for the audience you have in mind.
The main boundary is editorial rather than technical. This package constructs the grid cleanly and packages the outputs well, but it does not judge clue quality, theme polish, vocabulary obscurity, or publication standards for you. Treat the generated puzzle as a strong draft that still deserves a quick human review before you hand it to solvers.
Start with the word bank, not with the styling controls. Each non-empty line is read as an answer before the first colon and an optional clue after it. The answer portion is uppercased and reduced to letters A to Z, so punctuation, spaces, and accented characters do not survive placement. In practice that means NEW YORK:City becomes NEWYORK, while a line with no usable letters is ignored.
For a first pass, give the list room. A slightly larger grid and the backtracking strategy usually produce a better classroom or trivia puzzle than forcing a cramped layout too early. If you only want a quick feasibility check, greedy mode is faster and can tell you whether the list is obviously workable before you spend time polishing exports.
The Attempts (best-of) setting becomes the most practical tuning control once the list is clean. Multiple attempts reshuffle the entry order and keep the best result by fill percentage, then by placed-word count, then by faster runtime. That is more useful than manually rerunning the same bank and trying to remember which version looked best.
Grid size is clamped from 5 to 25. Larger grids make long theme answers easier to place, but they can also lower density if the list is short.Min word length controls how short an entry the generator is willing to create when words cross. Standard American-style rules usually prefer three-letter minimums, but this package lets you relax the floor to two when fit matters more than strict convention.Symmetry nudges the search toward rotational or mirror balance and reports a symmetry-match percentage after the run. It is guidance, not a guarantee that the final pattern meets strict newspaper-style construction rules.Seed is for repeatability. Keep the cleaned list and settings unchanged, and the same seed will reproduce the same family of attempts.Before exporting, inspect both the clue tables and the unused-entry panel. A good-looking grid can still hide skipped answers, duplicate removals, or invalid lines that changed the puzzle more than you intended.
Generation begins with cleanup. Duplicate answers are removed after sanitization, invalid lines are logged with a reason, and the surviving entries are paired with their clues. If no clue is supplied, the answer text itself becomes the fallback clue in the rendered lists and exports.
The two search modes share the same legal-placement rules. Answers can run only horizontally or vertically. A placement must stay inside the grid, match any existing letters at intersections, avoid stray letters immediately before or after the word, and avoid side-by-side collisions that would create unwanted fragments shorter than the chosen minimum. The first accepted anchor word is placed across the middle row, then the remaining entries are fitted around it.
Greedy mode always takes the highest-scoring currently available placement for each next word. Backtracking does more work: it ranks candidate placements, explores the strongest branches, and keeps the best grid it has seen until the time budget expires. Candidate scoring rewards crossings, adds a mild center bias, and applies a symmetry penalty when the chosen mirror rule would prefer occupied cells elsewhere.
The best-of loop wraps around either strategy. Each attempt reshuffles the cleaned entries with a seeded pseudo-random generator, builds a grid, derives clue numbering, and records attempt statistics. The winning attempt is the one with the highest fill percentage; ties break on placed-word count and then on faster runtime.
| Output | What it means here | Why it matters |
|---|---|---|
Fill percentage |
Share of all grid cells occupied by letters | Shows density, especially when comparing several attempts of the same bank |
Crossing cells and Crossing rate |
Cells that belong to both an across and a down answer, plus their share of all letter cells | Helps judge how well the puzzle interlocks rather than how full it merely looks |
Symmetry match |
Similarity between the final occupied-versus-empty pattern and the selected mirror rule | Useful for aiming toward balanced layouts without pretending the rule is fully enforced |
Unused entries |
Clean answers that never appeared in the winning attempt | Shows which words still need a larger grid, better connectors, or looser constraints |
Attempt log |
Per-attempt seed, fill, placed count, crossings, symmetry match, and runtime | Makes tuning reproducible instead of guesswork |
The output surface is broader than the finished puzzle image. The grid view can export PDF or DOCX with optional answer reveal, clue lists can be copied or downloaded as CSV and exported as DOCX one direction at a time, the stats tab can export unused entries as CSV or DOCX, and the JSON tab captures inputs, export settings, attempt logs, clue numbering, and the final grid in one structured file.
All of that happens in the browser. There is no tool-specific server helper for generation or export. That local behavior is good for privacy, but PDF capture and document creation still depend on client-side libraries being allowed to load in the page.
WORD:clue. Generate once before fine-tuning so you can see whether the bank is basically workable.Advanced and set the grid size, strategy, minimum word length, symmetry preference, time budget, attempt count, seed, and visual export settings. If the bank is important, favor more attempts before you start editing clues by hand.Crossword Grid tab, then move to Clues and Stats. Confirm that the numbering is clean, the clue fallback text is acceptable wherever you omitted a clue, and the unused list is not hiding a theme entry you expected to see.Fill percentage tells you how much of the square area holds letters. Higher values usually mean denser fill, but not automatically a better solve. A packed grid can still feel awkward if many answers barely cross or if the clue bank itself is weak.
Crossing rate is often the better fairness check. It counts how many filled cells participate in both an across and a down answer. Higher crossing generally means solvers get more confirmation letters and long entries feel less isolated.
Symmetry match needs a careful reading. In this package it measures how similar the final occupied-versus-empty pattern is to the chosen mirror rule. It does not certify strict American-style construction standards such as fully checked letters, fixed black-square counts, or guaranteed theme-entry symmetry.
The attempt log is most valuable when you are tuning rather than solving. If several runs have similar density but one has better crossings or fewer leftovers, that is usually the stronger handout even if the grid looks roughly the same at a glance.
Suppose you have a dozen biology terms with real clue text and want a printable revision puzzle. A 15 x 15 grid, backtracking, a three-letter minimum, and a handful of best-of attempts usually give the generator enough room to interlock medium and long answers without producing too many leftovers. After the run, the clue tab confirms numbering and the stats tab tells you whether any specialized term still failed to fit.
For a club night or staff activity, the seed is often more important than tiny styling changes. Once you find a layout you like, keep the same cleaned list, grid size, strategy, and seed. That lets you regenerate the same puzzle later, adjust only the title or export header, and keep the actual clue numbering and answer positions stable across copies.
If several long themed answers are competing inside a small grid, repeated attempts may keep returning the same high unused count. That is the signal to enlarge the grid, add connector entries, or trim the theme list rather than simply raising the attempt count again. The unused-entry export is useful here because it shows exactly which cleaned answers never made it into the winning attempt.
A clean answer can disappear for three different reasons: it was removed as a duplicate after sanitization, it became invalid because no letters survived cleanup, or it stayed unused because the winning attempt never found room for it. The warning block and unused-entry table tell you which case happened.
No. The symmetry setting biases placement and the stats tab reports how closely the final occupancy pattern matches the chosen mirror rule. It does not enforce every publication-style rule about black squares, word checking, or theme placement.
Yes, as long as the cleaned answer list and all relevant settings stay the same. Change the grid size, strategy, attempt count, minimum length, symmetry, or entry text and the result can change even if the visible seed string does not.
Yes. Clues are optional. When no clue is provided, the package falls back to the answer text in clue tables and exports, which is fine for construction testing but usually not what you want for a polished handout.
No tool-specific backend is used for puzzle generation or exports. The work happens in the current browser session, although local exports still depend on client-side libraries loading correctly in the page.