Enter comma-separated word-clue pairs. Try some thing simple like

APPLE, green, BANANA, yellow

or have some fun with

A PRIORI, Not empirical, POSED, Not natural-looking, ARMHOLE, Sometimes hard-to-find shirt opening, ROUNDER, Drunkard, ALLUDES, Makes reference to, CZAR, Government policy chief, RIP, Headstone inits, CAMERA, Smartphone feature, FINESSE, Deft touch, GRANNIES, Ones in rocking chairs stereotypically, DOPE, Pretty cool in slang, GREECE, Mamma Mia setting, TREAT, Goody, ZOOM, Speed along, BURRITO, Chipotle choice, MENUS,Things in restaurant windows, FEAT, Herculean act

START!

The algorithm uses dynamic programming to efficiently generate possible puzzle tile placements, it then ranks them based on number of tile intersections, word placement distributions, etc, finally returning the best. The use of dynamic programming and beam search avoids iterating through the exponential number of possible puzzle configurations. The scoring system aims to maximize the number of word intersections, create balanced horizontal and vertical words, and evenly spread out the words.

Here are Source for the crossword generator and source for the servlet and web frontend.

This app was inspired by my granddad's love for puzzles. My family used it to created custom puzzles to keep him entertained during recovery from surgery.