PuzzleKit Web provides step-wise and explainable inference flow for logical puzzles (only slitherlink for now). The core goal is not just to output a final answer, but to make each deduction step explicit: what changed, why it changed, and which rule produced this change.
Current focus:
- Pure web-based solving experience
- Rule-driven, explainable, replayable deduction flow
- Modular Slitherlink rule architecture (including strong-inference fallback)
- Practical interoperability with common puzzle URL formats (currently centered on puzz.link)
PuzzleKit Web is a reasoning-engine-centered puzzle tool:
domainhandles puzzle IR, rules, inference, and replay semanticsfeatureshandles controls, board rendering, step explanations, and stats views- The UI is not a black-box "give me the answer" interface, but a visualization layer for deduction
Slitherlink rules are modularized under src/domain/rules/slither/rules/, including:
- Pattern rules (
patterns.ts) - Core constraints (
core.ts) - Color-based inference chain (
color.ts) - Sector inference and propagation (
sectorInference.ts,sectorPropagation.ts) - Conservative branch-based strong inference (
strongInference.ts) - Shared helpers (
shared.ts)
Execution order is centrally managed in src/domain/rules/slither/rules.ts: deterministic rules first, then strong inference.
- Node.js 18+ (latest LTS recommended)
- npm 9+
npm install
npm run devThis starts the local Vite development server.
npm run lint # ESLint
npm run test:run # Vitest unit tests
npm run build # TypeScript + Vite production build
npm run test:e2e # Playwright end-to-end tests- Import puzzle state from URL
- Create custom blank Slitherlink grids (rows/cols configurable)
- Edit Slitherlink clues directly in cells (
0to3and?)
URL support note: URL import is currently focused on
puzz.link.penpa-style URL support is planned next.
Next Step: apply one inference stepPrevious Step: rewind one stepSolve Next 100 Steps: auto-advance 100 steps until no more progress (or limit reached)Reset Replay: return to initial puzzle state- Each rule step stores message + diffs + affected regions for replay and explanation
- Reasoning timeline in the
Reasoning Stepspanel - Toggle between latest 30 steps and full history
- Vertex numbering overlay for board analysis
- Live metrics: total steps, total modifications, unique techniques, draft difficulty score
- Terminal report when solving stalls: decided-edge ratio, unknown-edge count, blocker reasons
- Rule usage statistics to analyze deduction paths
- Export current puzzle state (including puzz.link encoding attempts)
- One-click copy to clipboard
penpa-style URL support- Configurable solver parameters (for example: step limits, strong-inference budget)
- Broader Slitherlink rule coverage
- More puzzle type adapters (e.g. Masyu, Nonogram) with stronger plugin support
- Unique-solution checking and diagnostics
This project is built around one idea: solving is not only about the final answer, but also about understanding and replaying the reasoning process.
- Most solvers focus on "what is the final solution", but not "how the solution is obtained" or "what should be deduced next".
- By supporting
puzz.linkURLs, the tool can better fit into existing puzzle-sharing workflows and community standards. - It offers a lightweight, browser-native alternative to mobile games and desktop software.
The long-term direction is to build a puzzle reasoning tool that is:
- Pure web implementation
- Explainable
- Step-by-step replayable
- Progressively deduction-oriented
- Thanks to AI vibe-coding tools such as
CodexandCursorfor helping accelerate development and refactoring.
This repo is inspired by the browser plugin Puzzlink_Assistance, which helps with trivial inference for puzz.link-style puzzles.
The detailed inference techniques can be found in How slitherlink should be solved.
