Create a New Variant
Designing a bespoke ruleset boils down to assembling a config object that describes the board, tiles, dictionary, and rule plug-ins. The easiest way to iterate is to tweak the WASM playground while exporting snapshots for regression tests.
- Copy a config stub. Start from the minimal JSON template below or export one via the playground's Snapshot tab.
variant.json
{
"tileset": {
"tile_kinds": [
{"id":"A","symbol":"A","score":1,"count":10},
{"id":"SUN","symbol":"☀","score":5,"count":1}
]
},
"rack_size": 7,
"board_layout": {"type":"rect","width":11,"height":11},
"ruleset_id": "crossword_classic",
"dictionary_id": "en_demo",
"rng_seed": 7
}
- Fill in geometry. Switch between rectangular, graph, or 3D layouts depending on the adjacency you want. Bonus tiles can be embedded inline or supplied as separate metadata.
- Tune tiles and counts. Add emoji, blanks, or stacked pieces, and remember to keep the bag balanced so racks refresh well.
- Choose lexicon support. Small wordlists can be inlined; larger ones should be shipped as external assets and referenced by ID.
- Script special rules. Register custom validators or scoring hooks through the rule plug-in system when classic crossword rules are not enough.
- Lock determinism. Use named seeds in configs and fixtures so tests reproduce the exact rack order.