Changelog
All notable changes to CheckAI are documented here. The format follows Keep a Changelog and the project adheres to Semantic Versioning.
[0.8.0] — 2026-06-12
Added
- Animated terminal CLI — A new terminal experience built on
crossterm+indicatif(animated boards, evaluation bar, live search spinners/progress bars) that is TTY-gated and degrades to clean plain text when piped, with--no-color, or withNO_COLOR playvs the built-in engine —checkai playnow plays against the engine, streaming a live animated search and announcing each move with its evaluation, via--vs <engine|human>,--color <white|black|random>,--level <1-10>,--movetime,--depth,--fen,--ascii, and--flip; in-game commands gainhint,undo, andfenwatchcommand — Engine-vs-engine showcase, with--level/--level-white/--level-black, plus--delay,--max-moves,--movetime, and--asciianalyzecommand — Analyze a FEN (--fen) or annotate a whole game (--moves) with a live animated iterative-deepening display, then print the best move, evaluation, mate distance, depth/nodes/time, and principal variation (--depth,--movetime)benchcommand — Run the fixed engine benchmark suite, reporting nodes, time, and nodes-per-second (--depth,--movetime)perftcommand — Verify move generation with perft node counts (DEPTH,--fen,--divide)ucicommand — Run as a UCI engine on stdin/stdout for chess GUIs and match runners; UCI output is intentionally not internationalized- Global
--no-colorflag — Added to every command (alongside--lang); honorsNO_COLORtoo - FEN position loading —
Game::from_fen,Board::from_piece_placement, andCastlingRights::from_fenparse and validate full FEN strings forplay,analyze, andperft - Completed 8-language i18n — Localized all CLI strings, including the engine labels and the
play,watch,analyze,bench, andperftflows, across all eight bundled languages - Community health files —
CONTRIBUTING.md,SECURITY.md, a pull-request template, and structured GitHub issue forms replacing the previous Markdown templates
Changed
playnow defaults to playing vs the engine — Runningcheckai playwith no flags starts a game against the engine (level 5) instead of a two-player game; use--vs humanfor the previous behavior- Search engine overhaul — Full Static Exchange Evaluation, transposition-table aging with depth-preferred replacement and quiescence integration, in-tree hard time/node limits via the
SearchLimits/IterationInfo/search_limitedcontract with per-iteration progress reporting (consumed by the live CLI displays and UCIinfo), mate-distance pruning, reverse futility pruning, adaptive null-move pruning with verification, table-driven Late Move Reductions, Late Move Pruning, Internal Iterative Reduction, check extensions, a corrected counter-move heuristic, gravity-style history with maluses, and a stronger quiescence search (check evasions, delta and SEE pruning) - Evaluation — Added pawn-structure terms (passed, doubled, isolated, backward, connected pawns), king-safety penalties (open files, weakened pawn shield), per-piece mobility, and a tempo bonus on top of the tapered piece-square tables and bishop-pair / rook-file bonuses
- Animated CLI welcome screen — Animated welcome screen and terminal banner, now listing the new commands
- Version metadata — Bumped Rust crate, WASM crate, npm package, web UI, desktop app, OpenAPI metadata, and VitePress version label to 0.8.0
[0.7.0] — 2026-05-13
Added
- Engine test coverage — perft suites for the starting position (depths 1–3, depth-4
#[ignore]-gated) and the Kiwipete benchmark (depths 1–2, depth-3#[ignore]-gated); mate-in-one verification through the full search; transposition-table reuse test across consecutive iterative-deepening runs - Evaluation test coverage — colour-mirror symmetry (starting position and asymmetric material imbalance), tapered-evaluation phase verification, and bishop-pair bonus delta
- REST archive documentation — Documented
GET /api/archive,GET /api/archive/stats,GET /api/archive/{game_id}, andGET /api/archive/{game_id}/replayindocs/api/rest.mdwith request/response shapes and error codes - Desktop packaging smoke test in CI — The desktop CI job now runs
bun run packon Ubuntu to validate the full electron-builder pipeline end-to-end on every push
Changed
- Version metadata — Bumped Rust crate, WASM crate, npm package, web UI, desktop app, and VitePress version label to 0.7.0
[0.6.0] — 2026-03-09
Added
- Electron desktop app — Added a dedicated Svelte-based Electron renderer alongside the web UI
- Includes persistent desktop sessions, native file/folder pickers, local backend launch controls, inline logs, and a multi-view workspace shell
- Packaged desktop builds can check GitHub Releases for updates, download them, and install on restart
- Native desktop installers — Release automation now publishes platform-native Electron installers in addition to updater-compatible artifacts
- Linux releases include
.debalongside AppImage - macOS releases include
.dmgalongside updater-compatible.zip - Windows releases include
.msialongside NSIS for in-app update compatibility
- Linux releases include
- Desktop CI and release automation — GitHub Actions now validate the Electron app on Ubuntu, macOS, and Windows and publish desktop release assets with dependency review coverage
Changed
- Version metadata — Updated project/package version references, install snippets, OpenAPI metadata, and documentation to align with the 0.6.0 desktop release
[0.5.2] — 2026-03-07
Fixed
- Web analysis UI contract drift — Fixed the TypeScript analysis client so it now uses the real
/api/analysis/*endpoints and renders job status / summary data instead of assuming a live search telemetry payload - Frontend API typing alignment — Synced the web UI's TypeScript models with the Rust API contract, including
position_history, move/action responses, and explicit analysis job/result types - Documentation and version metadata — Updated OpenAPI metadata, installation snippets, and docs so the published documentation matches current server behavior
Added
- Regression coverage — Added tests for move-quality threshold boundaries and
GameStateJsonposition-history export consistency
[0.5.1] — 2026-03-06
Fixed
- Bun/WASM package contents — Fixed the published
@josunlp/checkaipackage so release tarballs include the compiled WebAssembly binary instead of only the generated glue JavaScript- Added a
prepacksafeguard to verify generatedpkg/artifacts before Bun packaging / publishing - Removed the generated
pkg/.gitignoreduring packaging sopkg/checkai.jsandpkg/checkai_bg.wasmare no longer filtered out - Added explicit npm subpath exports for the raw generated artifacts:
@josunlp/checkai/rawand@josunlp/checkai/wasm
- Added a
[0.5.0] — 2026-03-05
Added
- WebAssembly (WASM) build — The core chess engine compiled to WebAssembly via
wasm-pack- New
wasm/crate with#[path]re-exports of core engine modules — zero code duplication - WASM-compatible search using
web-timecrate,js-sysfor timestamps and IDs
- New
- npm package (
@josunlp/checkai) published to GitHub Packages- Node.js CLI tool installable via
npm install -g @josunlp/checkai - JavaScript/ESM library API via
import { engine } from "@josunlp/checkai"
- Node.js CLI tool installable via
- Full feature parity in WASM:
- Position analysis:
legalMoves,evaluate,bestMove,makeMove, check/mate/stalemate detection - Game management:
createGame,gameSubmitMove,gameProcessAction, history, FEN export - Export: PGN, JSON, text formatting
- Board display:
boardToAscii
- Position analysis:
- Node.js CLI commands:
fen,moves,eval,search,move,board,play,game,export,version - Release workflow: New
wasmjob builds WASM and publishes to GitHub Packages
[0.4.0] — 2026-03-05
Added
- Modern TypeScript Web UI — Complete modular rewrite with @bquery/bquery v1.4, Tailwind CSS v4, and Vite v7
- 12 modular TypeScript source files with reactive signal-driven architecture
- SVG chess board with click selection, legal move indicators, check highlight, board flip
- Analysis panel with real-time polling and score formatting (including mate detection)
- Promotion dialog, FEN/PGN toolbar tools, WebSocket indicator with auto-reconnect
- Vite-built SPA embedded into the Rust binary via dual
rust-embed(DistAssets + WebAssets fallback)
- FEN/PGN API endpoints
GET /api/games/{id}/fen— Export full 6-field FENPOST /api/games/fen— Create game from FEN stringGET /api/games/{id}/pgn— Export PGN with Seven Tag Roster
- King safety evaluation — Pawn shield, open file penalties, enemy piece tropism
- Piece mobility evaluation — Per-phase square counts for knights, bishops, rooks, queens
- Static Exchange Evaluation (SEE) — Filters bad captures at low depth
- Futility pruning — Skips quiet moves when static eval is far below alpha
- Build script (
build.rs) — Ensuresweb/dist/exists at compile time sorust-embedworks without a prior web build - Bun as frontend package manager (replaces Node.js/npm)
Changed
rust-embedusesinclude-excludefeature to exclude TS source from legacy embed- VitePress documentation updated for all new features
Fixed
- Promotion dialog not showing piece symbols (read wrong
data-attribute) - CI compile error when
web/dist/missing — addedbuild.rsto ensure the directory exists - Clippy warnings: collapsed nested ifs,
RangeInclusive::contains
[0.3.1] — 2026-03-02
Added
- VitePress documentation site — Complete project documentation built with VitePress and deployed to GitHub Pages
- Guide: Getting Started, CLI Commands, Docker, Configuration, Web UI, Analysis Engine, Opening Book, Tablebases, Architecture, i18n
- API Reference: REST API, WebSocket API, Analysis API with full endpoint docs and code samples
- Agent Protocol: Overview, Game State, Move Output, Chess Rules (FIDE 2023), Special Actions, Examples
- Local search, edit-on-GitHub links, dark mode
- GitHub Actions workflow (
docs.yml) — Auto-deploys docs to GitHub Pages on every release
[0.3.0] — 2026-03-02
Added
- Deep game analysis engine — Asynchronous analysis of complete games with a minimum search depth of 30 plies
- Alpha-beta search with PVS/Negascout, transposition table (configurable, default 64 MB), null-move pruning, late move reductions, killer/history heuristics, quiescence search
- PeSTO-style position evaluation with midgame/endgame piece-square tables, pawn structure analysis, bishop pair bonus
- Move quality classification: Best, Excellent (≤10 cp), Good (≤25 cp), Inaccuracy (≤50 cp), Mistake (≤100 cp), Blunder (>100 cp)
- Per-move centipawn loss, principal variation, accuracy percentages per side
- Zobrist hashing with compile-time key generation
- Opening book support — Polyglot
.binformat reader with binary search lookups - Endgame tablebase support — Syzygy tablebase interface with analytical probing for common endgames (KvK, KRvK, KQvK, etc.)
- Analysis REST API at
/api/analysis/*— Architecturally isolated from player-facing endpointsPOST /api/analysis/game/{id}— Submit game for async analysisGET /api/analysis/jobs— List all analysis jobsGET /api/analysis/jobs/{id}— Get job status and resultsDELETE /api/analysis/jobs/{id}— Cancel or delete a job
- Docker support — Multi-stage Dockerfile, docker-compose.yml with volume mounts
- Docker image CI — Release workflow builds and pushes Docker images to GHCR with semver tags
- CLI flags for analysis:
--book-path,--tablebase-path,--analysis-depth,--tt-size-mb
[0.2.2] — 2026-03-01
Fixed
- Draw offer logic: offers now persist correctly after the offerer makes a move
- AGENT.md example 15: corrected
en_passantfield fromnullto"e3"after1. e4
Added
- 37 comprehensive unit tests covering all critical chess engine edge cases
[0.2.1] — 2026-03-01
Fixed
- Web UI now embedded into the binary via
rust-embed, eliminating the need for an externalweb/directory - Removed
actix-filesdependency in favor ofrust-embed
[0.2.0] — 2026-03-01
Added
- Full internationalization (i18n) for all user-facing strings (8 languages)
- CI/CD pipelines for GitHub Actions
- Cross-platform install and uninstall scripts
- Automatic update check on startup
checkai updatecommand for self-updating
Changed
- All source code comments translated to English
- Web UI default language changed from German to English
[0.1.0] — 2025-02-28
Added
- Complete chess engine with full FIDE 2023 rules support
- REST API for AI agents
- WebSocket API with real-time event broadcasting
- Swagger/OpenAPI documentation
- Terminal interface with colored board display
- Game export in text, PGN, and JSON formats
- Game archiving with zstd compression
- Web UI for browser-based game viewing