Crossword overview
{{ gridSize }} × {{ gridSize }}
{{ placedWordCount }} placed {{ fillPercent }}% filled {{ unusedCount }} unused All entries placed {{ strategyLabel }} {{ symmetryLabel }} Best of {{ attemptCount }} Attempt #{{ bestAttemptNumber }} ~{{ gen_ms }} ms {{ limitingNote }}
Seed: {{ seed }}
One entry per line. Example: WORD:clue
{{ duplicateWords.length }} duplicate{{ duplicateWords.length === 1 ? '' : 's' }} removed.
{{ dup.word }}
{{ invalidLines.length }} invalid line{{ invalidLines.length === 1 ? '' : 's' }} ignored.
  • {{ bad.line || '(blank)' }} — {{ bad.reason }}
Square side length (5–25). Common picks: 13, 15, 17.
Backtracking hunts for denser fills; Greedy is quicker with shorter lists.
Blocks placements that create short (1–2 letter) answers.
Match classic American-style black square symmetry when needed.
Higher limits explore more permutations when backtracking.
tries
Using best of {{ attemptTarget }} attempt{{ attemptTarget === 1 ? '' : 's' }}.
{{ cellSize }} px
Adjust on-screen and export cell dimensions.
Fill in a seed to replay a specific grid.
Switch between a table or a stacked list on exports.
Choose which masthead details appear above the grid.
{{ border_px }} px
Tweak stroke width and boost contrast for photocopies.
Letter scale {{ letter_scale.toFixed(2) }}
Fine-tune the appearance of blank cells and letter sizing.
Choose the target paper size for export.
Switch to landscape when the grid needs additional width.
mm
Neutral export margin is 10 mm.
Across Down
Across
Down
Across clues ({{ across.length }})
Clue Copy

Generate a grid to populate across clues.

Down clues ({{ down.length }})
Clue Copy

Generate a grid to populate down clues.

Grid quality
Attempt #{{ bestAttemptNumber }}
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.

Attempt log
# Seed Placed Fill % Time (ms) Note
{{ run.attempt }} {{ run.seed || 'default' }} {{ run.placed }} {{ run.fillPercent }} {{ run.genMs }} {{ run.note || '—' }}

No attempt data yet.

Unused entries ({{ unusedCount }})
Word Clue Length Copy
{{ entry.word }} {{ entry.clue || '—' }} {{ entry.word.length }}

Every entry was placed in the grid.


        
:

Introduction:

Crossword puzzles interlock themed answers across and down so solvers uncover a grid one intersection at a time. Educators, trivia hosts, and content teams rely on the format to reinforce vocabulary while keeping difficulty approachable.

This generator assembles your word list into a numbered grid and runs a best-of shuffle across multiple attempts to surface the densest fill. Live diagnostics flag duplicates or malformed lines before the search begins, so you only test clean data.

After each run the stats tab reports fill density, crossing balance, and unused entries, making it easy to tune constraints and export polished puzzles, clue tables, DOCX packets, or printable PDFs.

Technical Details:

Every attempt starts from the same sorted word bank, seeded by your optional text to deliver reproducible shuffles. Backtracking spends a configurable time budget exploring placements, while the greedy pass resolves quickly for shorter lists. The best-of loop repeats the search the number of times you choose and retains the grid with the highest fill density, largest placed word count, and—in the event of a tie—the fastest runtime.

Metrics emphasise how efficiently letters occupy the grid and how often entries cross. Symmetry options bias scoring toward rotational or mirror layouts without blocking viable asymmetric fills. Unused items stay visible so you can decide whether to enlarge the grid, relax minimum word length, or replace short fragments with sturdier anchors.

P = F N × N × 100 R = C F × 100
Symbols and measures
Symbol Meaning Unit / Type Source
N Grid side length integer (cells) Input
F Letter cells filled integer (cells) Derived
P Fill percentage percentage, one decimal Derived
C Cells that host both across and down answers integer (cells) Derived
R Crossing rate (share of letters that intersect) percentage, one decimal Derived
U Unused entries after the best attempt count Derived
T Total runtime across best-of attempts milliseconds Derived

Interpret higher P and R values as denser, fairer puzzles. When U climbs, try increasing grid size, relaxing minimum word length, or raising the attempt count so more shuffles search the space before the time budget expires.

Workflow:

  1. Prepare the word bank: enter one answer per line, append a colon and clue when needed, and watch the live alert for duplicate removals or invalid characters.
  2. Set constraints: choose grid size, minimum crossing length, symmetry mode, and the time budget. Adjust the best-of attempt count to explore more shuffles, and add a seed when you need reproducible layouts.
  3. Generate and review: press Generate to run the loop, then inspect the summary badges, the stats tab, crossing rate, unused entry table, and the attempt log to confirm density and fairness.
  4. Export and share: copy or download clues in CSV or DOCX, export JSON, capture PDFs with custom headers, and share the seed plus settings so collaborators can recreate the winning grid.

Diagnostics & Optimisation:

  • Duplicate answers are automatically removed and listed, preventing identical words from competing for the same slot.
  • Each malformed line shows its original text and reason so you can trim punctuation or add vowels before regenerating.
  • The stats tab surfaces fill percentage, crossing rate, longest and shortest entries, unused count, and symmetry match so you can balance theme entries against connectors.
  • Unused entries stay in a dedicated table with copy and CSV download actions, making it easy to repurpose leftovers for a future puzzle.
  • The attempt log records seed, placements, fill percent, runtime, and any time-budget notes for every shuffle, helping you decide whether to tweak constraints or rerun with a fresh seed.

Exports & Sharing:

  • Clues tab: copy or download Across and Down tables in CSV, or export each list as a DOCX file with grid size, title, and optional seed in the header.
  • Stats tab: copy the unused entry list or download it as CSV to reuse words in another puzzle or share with teammates.
  • JSON tab: capture the full input and output payload for archiving, scripting, or automated testing.
  • Grid actions: toggle answer reveal for proofing and export PDF versions with optional title, date, and header note.

FAQ:

How do best-of attempts work?

The tool runs the generator the number of times you request, tracking fill percentage, placed word count, and runtime. The attempt with the strongest score becomes the active grid, while all run details remain in the log.

Does the seed guarantee the same puzzle?

Yes, as long as grid size, strategy, minimum word length, symmetry, time budget, and attempt count stay the same. Change any of those parameters and the shuffle will diverge even with identical seeds.

How can I balance difficulty?

Aim for a high crossing rate and moderate unused count. Increase minimum word length to avoid short entries, adjust symmetry to suit your theme, and add longer anchors when the stats reveal sparse regions.

Why are some words missing from the final grid?

Words only appear if they were placed in the winning attempt. Check the unused list, raise the time budget or attempt count, or expand the grid so the search has space to fit more entries.

Troubleshooting:

  • No placements: confirm at least one entry is three letters or longer, then increase grid size or time budget.
  • Low crossing rate: add medium-length connectors or raise the attempt count to explore more layouts.
  • Too many unused words: relax minimum word length, disable symmetry bias, or enlarge the grid by two cells.
  • PDF export stalled: ensure the html2pdf library is allowed by your content blocker and retry once it finishes loading.

Glossary:

Fill percentage (P)
Share of grid cells occupied by letters.
Crossing rate (R)
Portion of filled cells that participate in both an across and a down answer.
Best-of attempts
Loop that reruns the generator multiple times and keeps the strongest grid.
Seed
Optional text that locks the pseudo-random shuffle for reproducible results.
Symmetry
Preferred balance pattern for black squares (none, mirror, or rotational).