Load games from PGN libraries, navigate move by move, and get real-time engine evaluation — all in your browser with a self-contained Go binary. No cloud, no setup, no dependencies.
A streamlined workflow for studying any chess game.
Paste PGN text, load a .pgn file, or drag & drop. Multi-game files are supported — a searchable table lets you pick any game by player, event, date, or opening.
Choose an engine (Stockfish, Crafty, GNU Chess, or the built-in Go engine) and click Start Analysis. Evaluation lines stream live over WebSocket as you step through the game.
Use the navigation controls to step forward, backward, or jump to any position. The evaluation graph updates in real-time to show where the advantage shifted.
Open a variation window from any position to test alternative lines. Merge a variation back into the main game, or discard it — the original game is never altered.
All assets are embedded in a single binary — no internet required after download.
Load multi-game PGN files and browse a table of all games. Each entry shows players, result, date, event, and identified opening name — select any game to analyze it.
A live canvas graph tracks the engine evaluation across every move, making it easy to spot the moment a mistake was made or an advantage was squandered.
Choose to highlight the single best move, show the top 3 alternatives with arrows, or animate the full principal variation — all rendered directly on the board.
Every position is identified in real-time against 3,594 openings from the Lichess ECO database. The current opening name and code are shown as you navigate.
Open a variation from any position in a separate window and explore freely. Merge the variation back into the main game or close it without affecting the original.
Optional Polyglot .bin opening book reader written in pure Go. Book moves return instantly before engine calculation begins.
Set either side to any discovered engine and play a full game with clocks, resign/draw controls, and PGN export. A useful complement to analysis mode.
Multi-platform images (amd64, arm64, armv7) with 10+ pre-installed engines. Deploy anywhere in seconds with docker run.
Choose the method that suits you best.
# Pull and run — opens on port 35256 docker run -p 35256:35256 vpoluyaktov/gochess-board:latest # Open your browser at http://localhost:35256
The Docker image includes Stockfish 16, Fairy-Stockfish, Fruit, Toga II, Glaurung, Crafty, GNU Chess, HoiChess, and FairyMax pre-installed — ready for deep analysis. See docker/DOCKER.md for docker-compose and volume options.
# Prerequisites: Go 1.24+ git clone https://github.com/vpoluyaktov/gochess-board.git cd gochess-board go build -o gochess-board ./cmd/gochess-board ./gochess-board # The built-in engine works immediately. # Install stronger engines for deeper analysis: sudo apt-get install stockfish crafty
# All flags and their defaults: ./gochess-board \ --port 35256 # Web server port --book-file <path> # Polyglot .bin opening book --persistent-engines # Keep engines alive between moves --no-browser # Don't auto-open browser --no-tui # Disable terminal UI --log-level INFO # DEBUG | INFO | WARN | ERROR --restart # Kill existing process on same port
Engines are discovered automatically at startup from the system PATH. Any engine can be used for both analysis and playing.
| Engine | ELO Range |
|---|---|
| GoChess (built-in) Go | ~1000–1200 |
| Stockfish 16 | 1320–3190 |
| Fairy-Stockfish 11.1 | 1350–2850 |
| Fruit 2.1 | ~2700 |
| Toga II 3.0 | ~2700 |
| Glaurung 2.2 | ~2700 |
| Ethereal | ~3000 |
| Leela Chess Zero | 3100+ |
| Engine | ELO Range |
|---|---|
| Crafty 23.4 | ~2400 |
| GNU Chess 6 | ~2000 |
| HoiChess | ~2200 |
| Fairy-Max | ~1800 |
| Sjeng | ~2000 |
| Phalanx | ~1900 |
The server exposes a clean REST + WebSocket API for all chess operations.
Interactive chess board and analysis UI served as a single HTML page.
List all discovered engines with name, protocol, and executable path.
Send a FEN position and engine name, receive the engine's best move.
Look up the opening name and ECO code for a given move sequence.
Real-time multi-PV analysis streamed via WebSocket as the engine thinks.
# Request a computer move (returns best move + new FEN) curl -X POST http://localhost:35256/api/computer-move \ -H "Content-Type: application/json" \ -d '{"fen":"rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1"}'
Try the live demo instantly, or run your own instance with Docker.