Penmark
Penmark is a toolkit in Rust for creating, playing, and analyzing Nikoli-style pen-and-paper puzzles. Through a unified view of pen-and-paper puzzles, a new constraint programming engine written from scratch, and a portable WASM library, Penmark aims to be the best in class toolkit for these pen-and-paper puzzles in all regards.
This book documents how Penmark is structured, why it’s structured that way, and how to use it. It’s updated regularly throughout development; changes often appear here before being implemented.
What’s in this book
- Core concepts — the conceptual layers (genre / puzzle / game), grid substrates, regions, and the rule vocabulary that every constraint draws from.
- Implementations — the trait surface
(
Puzzle,Game, the four action traits), tagged serialization, dispatching, the propagation engine, and the Puzzlehound dataset. - Solver, Generator, Grader, Enumerator — one section per action.
- Frontends — CLI verbs and the directory layout that holds it together.
- Roadmap — MVP scope, performance state, open work.
Chapters are mostly self-contained; cross-links handle the cases where one needs to lean on another. Skim the library-structure and genre-puzzle-game chapters first if you want orientation; otherwise jump wherever.