Skip to content

Releases: JosunLP/checkai

CheckAI v0.5.2

07 Mar 13:34

Choose a tag to compare

Fixed

  • Web analysis UI contract drift — Fixed the TypeScript analysis client so it now submits jobs to /api/analysis/game/{game_id} and polls /api/analysis/jobs/{job_id} instead of outdated /api/games/* paths
    • Reworked the analysis panel to render the actual job-based backend payload (status, progress, completed summary, failure state) instead of assuming live search telemetry fields that were never returned by the API
    • Reset analysis polling cleanly when switching games so stale background polling does not leak across views
  • Frontend API typing alignment — Synced the web UI's TypeScript models with the Rust API contract
    • Added position_history to the web GameState type
    • Expanded move/action response typing to match the real server payloads
    • Replaced stale analysis result typing with explicit job/result summary types
  • Documentation and version metadata — Updated OpenAPI metadata, README installation snippets, changelog entries, and analysis/tablebase docs so published docs match current behavior
    • Clarified that the analysis API is job-based game review, not a live score/nodes stream
    • Clarified current Syzygy support as analytical / heuristic scaffolding rather than full binary probing

Added

  • Regression coverage — Added tests for move-quality threshold boundaries and GameStateJson position-history export consistency

CheckAI v0.5.1

06 Mar 23:06
958bb03

Choose a tag to compare

Fixed

  • Bun/WASM package contents — Fixed the published @josunlp/checkai package so the compiled WebAssembly binary is included in release tarballs instead of only the generated glue JavaScript
    • Added a prepack packaging guard so Bun packaging and publishing always verify the generated pkg/ artifacts before release
    • Removed the generated pkg/.gitignore during packaging, which previously caused package tarballs to omit pkg/checkai.js and pkg/checkai_bg.wasm
    • Added explicit npm subpath exports for the raw generated artifacts (@josunlp/checkai/raw and @josunlp/checkai/wasm)

CheckAI v0.5.0

05 Mar 23:06

Choose a tag to compare

Added

  • WebAssembly (WASM) build — The core chess engine is now compiled to WebAssembly via wasm-pack, enabling use from JavaScript/Node.js environments
    • New wasm/ crate with #[path] re-exports of core engine modules (types, movegen, eval, search, zobrist) — zero code duplication
    • WASM-compatible search using web-time crate instead of std::time::Instant
    • js-sys integration for timestamps and random ID generation
  • npm package (@josunlp/checkai) published to GitHub Packages
    • Node.js CLI tool (checkai) installable via npm install -g @josunlp/checkai
    • JavaScript/ESM library API (import { engine } from "@josunlp/checkai")
  • Full feature parity in WASM — All major features available in the npm package:
    • Position analysis: legalMoves, evaluate, bestMove, isCheckmate, isStalemate, isCheck, isInsufficientMaterial, makeMove
    • Game management: createGame, createGameFromFen, gameState, gameSubmitMove, gameProcessAction, gameMoveHistory, gameFen, deleteGame, listGames
    • Export: gameToPgn, gameToJson, gameToText
    • Board display: boardToAscii
  • Node.js CLI commandsfen, moves, eval, search, move, board, play, game new/state/move/action/list/delete, export, version
  • Release workflow — New wasm job in release.yml builds the WASM package, creates a tarball release asset, and publishes to GitHub Packages using GITHUB_TOKEN

CheckAI v0.4.0

05 Mar 20:00
7c4116b

Choose a tag to compare

Added

  • Modern TypeScript Web UI — Complete modular rewrite of the browser frontend
    • Built with @bquery/bquery v1.4 (TypeScript-first DOM library with signals)
    • Tailwind CSS v4 with custom @theme tokens for consistent design
    • Vite v7 build system with HMR, path aliases, and production bundling
    • 12 modular TypeScript source files: types, store, api, ws, i18n, ui, board, game, archive, analysis, main, styles
    • Reactive signal-driven architecture with unidirectional data flow
    • SVG chess board with click selection, legal move indicators, check highlight, and board flip
    • Analysis panel with start/stop, real-time polling, score formatting (including mate detection)
    • Promotion dialog with piece picker
    • FEN copy, PGN copy, and FEN import directly from the toolbar
    • WebSocket connection indicator with auto-reconnect
    • Vite-built SPA embedded into the Rust binary via rust-embed (dual DistAssets + WebAssets with priority fallback)
  • FEN/PGN API endpoints — Three new REST endpoints for position interchange
    • GET /api/games/{id}/fen — Export full 6-field FEN notation
    • POST /api/games/fen — Create a new game from a FEN string with full validation
    • GET /api/games/{id}/pgn — Export PGN with Seven Tag Roster headers
    • Complete parse_fen() parser and game_to_pgn() generator
    • OpenAPI/Swagger annotations for all new endpoints
  • King safety evaluation — Pawn shield analysis, open file penalties near the king, enemy piece tropism within Chebyshev distance 2
  • Piece mobility evaluation — Pseudo-legal square counts for knights, bishops, rooks, and queens with separate midgame/endgame scoring
  • Static Exchange Evaluation (SEE) — Filters bad captures at low depth (≤ 3) to reduce search explosion
  • Futility pruning — Skips quiet moves when static evaluation plus margin is far below alpha at depth ≤ 3
  • Bun as the frontend package manager and script runner (replaces Node.js/npm)
  • Build script (build.rs) — Ensures web/dist/ exists at compile time so rust-embed compiles without a prior web build (fixes CI for clippy/test jobs)

Changed

  • rust-embed now uses include-exclude feature to exclude TypeScript source, node_modules, and build config from the legacy WebAssets embed
  • Evaluation module description updated from "PeSTO position evaluation" to "PeSTO evaluation + king safety + mobility"
  • Search module description updated to include SEE and futility pruning
  • VitePress documentation updated for all new features: architecture, analysis engine, web UI, REST API, landing page

Fixed

  • Promotion dialog: piece symbols were not displayed because dataset.piece was read instead of dataset.promote — now correctly reads the data-promote attribute from the HTML buttons
  • CI build: #[derive(RustEmbed)] failed when web/dist/ did not exist; added build.rs to auto-create the directory so cargo clippy and cargo test work without a prior web build
  • Collapsed nested if statements in king tropism evaluation (clippy collapsible_if)
  • Replaced manual range check with RangeInclusive::contains in futility pruning (clippy manual_range_contains)

CheckAI v0.3.1

04 Mar 23:16
ba5e710

Choose a tag to compare

Added

  • VitePress documentation site — Complete project documentation built with VitePress and deployed to GitHub Pages
    • Guide section: Getting Started, CLI Commands, Docker, Configuration, Web UI, Analysis Engine, Opening Book, Tablebases, Architecture, Internationalization
    • API Reference: REST API, WebSocket API, Analysis API with full endpoint docs, request/response examples, and code samples (JavaScript, Python)
    • Agent Protocol: Overview, Game State schema, Move Output schema, Chess Rules (FIDE 2023), Special Actions, worked examples
    • Changelog page mirroring CHANGELOG.md
    • Local search, edit-on-GitHub links, dark mode support
  • GitHub Actions workflow (docs.yml) — Automatically builds and deploys documentation to GitHub Pages on every release (release: published) with manual trigger support

CheckAI v0.2.2

01 Mar 22:13

Choose a tag to compare

Fixed

  • Draw offer logic: offers now persist correctly after the offerer makes a move, allowing the opponent to accept or decline; previously, offers were cleared immediately on any move
  • AGENT.md example 15 (Sicilian Defense): corrected en_passant field from null to "e3" after 1. e4

Added

  • 37 comprehensive unit tests in game.rs covering all critical chess engine edge cases:
    • Draw offer lifecycle (persist, decline-by-moving, accept, self-accept rejection)
    • Resignation (both sides)
    • Checkmate patterns (Scholar's mate, Fool's mate)
    • Stalemate detection
    • Castling (kingside, blocked by check, blocked by attacked transit square)
    • En passant (capture, discovered check blocking, expiration after one move)
    • Pawn promotion (requirement enforcement, queen promotion)
    • Pinned pieces (rook along pin line, knight with no moves)
    • Halfmove clock (reset on pawn move, reset on capture)
    • Fullmove number increment after Black's move
    • Position history tracking and threefold repetition claim
    • 50-move rule claim (valid and premature)
    • Insufficient material (K vs K, K+N vs K, K+N+N vs K, K+B vs K+B same/different color)
    • Castling rights updates (king move, rook move, rook capture)
    • Game flow validation (move after game over, illegal move, opponent piece)

CheckAI v0.2.1

01 Mar 00:31

Choose a tag to compare

Fixed

  • Web UI now embedded into the binary via rust-embed, eliminating the need for an external web/ directory
    • Fixes Specified path is not a directory: "web" error when running after installation
    • Frontend is always in sync with the binary version — no separate copy/update step needed
  • Removed actix-files dependency in favor of rust-embed for self-contained static asset serving
  • Cleaned up broken web-directory copy logic from update.rs
  • Reverted unnecessary web-copy additions in install.ps1 (no longer needed)

CheckAI v0.2.0

28 Feb 23:54

Choose a tag to compare

Added

  • Full internationalization (i18n) for all user-facing strings (backend + frontend)
    • Supported languages: English, German, French, Spanish, Chinese (Simplified), Japanese, Portuguese, Russian
    • English as default with automatic fallback
    • Backend: rust-i18n crate with YAML locale files and t!() macro
    • CLI: --lang flag for explicit locale override, auto-detection via CHECKAI_LANG env var and system locale
    • REST API: per-request locale via ?lang= query parameter and Accept-Language header
    • Web UI: browser-based locale detection with language selector dropdown and localStorage persistence
  • i18n.rs helper module for locale detection and HTTP request extraction
  • Web UI language selector in header with live locale switching
  • web/js/i18n.js frontend translation module with 8 languages (~120 keys each)
  • CI/CD pipelines for GitHub Actions (build, test, release)
  • Cross-platform install and uninstall scripts (Linux, macOS, Windows)
  • Automatic update check on startup (notifies when a new version is available)
  • checkai update command for in-place self-updating on all platforms
  • CHANGELOG.md following Keep a Changelog format
  • Semantic versioning (SemVer) for all releases

Changed

  • All source code comments translated to English
  • All hardcoded user-facing strings in 10 Rust source modules replaced with t!() i18n calls
  • Web UI default language changed from German to English with data-i18n attribute system
  • PIECE_NAMES constant replaced with pieceName() function using i18n lookups

Fixed

  • Resolved 24 Clippy warnings (collapsible if-let, redundant closures, &PathBuf&Path, io_other_error, unnecessary .to_string() on t!() results)