{"id":43263512,"url":"https://github.com/tomcant/anodos","last_synced_at":"2026-02-01T15:01:30.307Z","repository":{"id":48826452,"uuid":"515343928","full_name":"tomcant/anodos","owner":"tomcant","description":"A UCI-compatible chess engine written in Rust.","archived":false,"fork":false,"pushed_at":"2026-02-01T10:28:10.000Z","size":355,"stargazers_count":4,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-01T10:47:46.002Z","etag":null,"topics":["alpha-beta-pruning","chess","chess-engine","negamax","rust","uci"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tomcant.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-07-18T21:17:04.000Z","updated_at":"2026-02-01T10:28:09.000Z","dependencies_parsed_at":"2025-12-31T05:00:58.076Z","dependency_job_id":null,"html_url":"https://github.com/tomcant/anodos","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/tomcant/anodos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomcant%2Fanodos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomcant%2Fanodos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomcant%2Fanodos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomcant%2Fanodos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tomcant","download_url":"https://codeload.github.com/tomcant/anodos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomcant%2Fanodos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28980855,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T13:38:33.235Z","status":"ssl_error","status_checked_at":"2026-02-01T13:38:32.912Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alpha-beta-pruning","chess","chess-engine","negamax","rust","uci"],"created_at":"2026-02-01T15:01:29.081Z","updated_at":"2026-02-01T15:01:30.299Z","avatar_url":"https://github.com/tomcant.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n  ![Anodos logo](./anodos.png)\n\n  \u003ch1\u003eAnodos – Chess Engine\u003c/h1\u003e\n\n  [![Build][build-badge]][build-link]\n  [![Release][latest-badge]][latest-link]\n\n\u003c/div\u003e\n\n## Overview\n\nAnodos is a UCI-compatible chess engine written in Rust. Built from scratch with bitboard-based move generation and alpha-beta optimised search.\n\n## Features\n\n- Move generation\n  - Bitboards for pseudo-legal move generation\n  - [Fancy magic][fancy-magic-link] sliding piece attacks\n- Search\n  - Iterative deepening\n  - Aspiration windows\n  - Negamax with alpha/beta pruning\n  - Null-move pruning\n  - Extended/reverse futility pruning\n  - Principal variation search\n  - Late move reductions\n  - Quiescence search\n  - Check extension\n  - Transposition table with Zobrist keys\n  - Move ordering\n    - TT move\n    - MVV/LVA\n    - Killer moves\n    - History heuristic\n- Evaluation\n  - Basic material counting\n  - MG/EG PSQTs (currently with game phase tapering for the king only)\n  - Piece mobility\n- Universal Chess Interface\n  - Play via any UCI-compatible GUI (e.g. Cute Chess, En Croissant)\n  - Basic time management with `movetime` / `wtime` / `btime` / `winc` / `binc`\n\n## Roadmap\n\n- Search\n  - Counter-move heuristic\n  - Static exchange evaluation\n  - Multi-threading\n- Evaluation\n  - Insufficient material draw detection\n  - Tapered PSQTs for all other pieces\n  - Syzygy tablebase support\n\n## Universal Chess Interface\n\nSupported commands:\n\n```\nuci\nisready\nucinewgame\nposition startpos [moves ...]\nposition fen \u003cfen\u003e [moves ...]\ngo [infinite]\ngo depth \u003cn\u003e\ngo nodes \u003cn\u003e\ngo movetime \u003cms\u003e\ngo wtime \u003cms\u003e btime \u003cms\u003e [winc \u003cms\u003e] [binc \u003cms\u003e]\nsetoption name Hash value \u003cMB\u003e\nstop\nquit\n```\n\n## Non-standard Commands\n\nBeyond the UCI protocol, the engine supports these debugging/utility commands:\n\n| Command | Description |\n|---------|-------------|\n| `perft \u003cdepth\u003e` | Run perft to validate move generation |\n| `printboard` | Display the current position |\n| `printfen` | Output the current position as a FEN string |\n| `domove \u003cmove\u003e` | Make a move on the current position (e.g., `domove e2e4`) |\n\n## Compilation\n\nThis project uses Rust edition 2024, so you'll need Rust 1.85+ (stable).\n\n### Building and Running\n\nFor the best performance, always use release mode:\n\n```sh\ncargo build --release\n./target/release/anodos\n```\n\nAlternatively, you can run in release mode directly:\n\n```sh\ncargo run --release\n```\n\nTo enable debug assertions (useful during development for catching bugs), use:\n\n```sh\ncargo run\n```\n\nOnly use debug mode for testing and development; release mode is strongly recommended for actual games or benchmarks.\n\n### PGO (Profile-guided Optimisation)\n\nBinaries published on the [Releases][releases-link] page are built with PGO (see [.github/workflows/release.yml][release.yml-link]).\n\nTo run a local PGO build:\n\n```sh\nrustup component add llvm-tools-preview\ncargo install cargo-pgo\n\n# Build an instrumented binary\ncargo pgo build\n\n# Collect profiles by running the benchmark command\ncargo pgo run -- bench\n\n# Build the optimised (PGO) binary\ncargo pgo optimize\n```\n\n## Testing\n\nRun the test suite:\n\n```sh\ncargo test\n```\n\nThis includes a shallow perft check from the starting position (depth 5).\n\nTo run the deeper perft test suite (ignored by default), include ignored tests and use release mode:\n\n```sh\ncargo test --release -- --include-ignored\n```\n\n## Benchmarking\n\nTo measure the engine's nodes-per-second performance, run the binary as follows:\n\n```sh\n./anodos bench [--depth \u003cDEPTH\u003e] [--tt-mb \u003cMB\u003e]\n```\n\n- `--depth` (default: 13) sets the search depth for each position\n- `--tt-mb` (default: 64) sets the transposition table size in MB\n\n\n[build-link]: https://github.com/tomcant/anodos/actions/workflows/test.yml\n[build-badge]: https://img.shields.io/github/actions/workflow/status/tomcant/anodos/test.yml?style=for-the-badge\u0026branch=main\u0026logo=github\n\n[latest-link]: https://github.com/tomcant/anodos/releases/latest\n[latest-badge]: https://img.shields.io/github/v/release/tomcant/anodos?style=for-the-badge\u0026label=latest%20release\n\n[fancy-magic-link]: https://www.chessprogramming.org/Magic_Bitboards#Fancy\n\n[releases-link]: https://github.com/tomcant/anodos/releases\n[release.yml-link]: https://github.com/tomcant/anodos/blob/main/.github/workflows/release.yml\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomcant%2Fanodos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomcant%2Fanodos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomcant%2Fanodos/lists"}