{"id":49643752,"url":"https://github.com/sb2bg/crucible","last_synced_at":"2026-05-05T22:04:30.026Z","repository":{"id":348353551,"uuid":"1197533449","full_name":"sb2bg/crucible","owner":"sb2bg","description":"Crucible is continuous integration for chess engines.","archived":false,"fork":false,"pushed_at":"2026-04-22T10:02:10.000Z","size":2768,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-22T11:34:07.956Z","etag":null,"topics":["chess","chess-engine","sprt","testing"],"latest_commit_sha":null,"homepage":"https://sb2bg.github.io/crucible/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sb2bg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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":"2026-03-31T16:54:32.000Z","updated_at":"2026-04-22T10:00:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sb2bg/crucible","commit_stats":null,"previous_names":["sb2bg/crucible"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/sb2bg/crucible","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sb2bg%2Fcrucible","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sb2bg%2Fcrucible/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sb2bg%2Fcrucible/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sb2bg%2Fcrucible/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sb2bg","download_url":"https://codeload.github.com/sb2bg/crucible/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sb2bg%2Fcrucible/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32669438,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-05T11:29:49.557Z","status":"ssl_error","status_checked_at":"2026-05-05T11:29:48.587Z","response_time":54,"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":["chess","chess-engine","sprt","testing"],"created_at":"2026-05-05T22:04:02.738Z","updated_at":"2026-05-05T22:04:30.019Z","avatar_url":"https://github.com/sb2bg.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Crucible\n\n[![ci (main)](https://github.com/sb2bg/crucible/actions/workflows/docker-publish.yml/badge.svg?branch=main)](https://github.com/sb2bg/crucible/actions/workflows/docker-publish.yml?query=branch%3Amain)\n[![release](https://github.com/sb2bg/crucible/actions/workflows/release.yml/badge.svg)](https://github.com/sb2bg/crucible/actions/workflows/release.yml)\n[![latest release](https://img.shields.io/github/v/release/sb2bg/crucible?display_name=tag\u0026sort=semver)](https://github.com/sb2bg/crucible/releases/latest)\n[![license](https://img.shields.io/github/license/sb2bg/crucible)](LICENSE)\n\n[![Experiments screenshot](https://github.com/sb2bg/crucible/blob/main/assets/experiments.png?raw=true)](https://sb2bg.github.io/crucible/)\n\nCrucible is continuous integration for chess engines. It watches your engine's git history, builds every commit, plays it against its predecessor under the Sequential Probability Ratio Test, and shows you an Elo timeline so you can see which changes made the engine stronger or weaker.\n\nExisting platforms such as [OpenBench](https://github.com/AndyGrant/OpenBench) are designed for large teams running distributed tests across many volunteer machines. Crucible is for the solo developer who just wants to know whether the last handful of commits helped. Everything runs on one machine, from a single binary, backed by SQLite. See [Why Crucible exists](docs/motivation.md) for the longer version.\n\nThe full documentation lives at **\u003chttps://sb2bg.github.io/crucible\u003e**, or under [`docs/`](docs/) in this repository.\n\n## Quick start\n\nChoose either Docker or a local Cargo install. Docker is convenient for a long-running daemon with a bundled build environment; Cargo is usually simpler when your engine already builds on the host or depends on unusual local toolchains.\n\nWith Docker:\n\n```bash\ndocker run --rm \\\n  -v \"$PWD:/work\" \\\n  ghcr.io/sb2bg/crucible:latest init\n\n# edit crucible.toml, then:\ndocker compose up -d\n```\n\nThe web dashboard opens at \u003chttp://localhost:8877\u003e. If you bind the dashboard outside the container with `web_host = \"0.0.0.0\"`, Crucible requires a real `server.admin_token`.\n\nThe published image includes common engine tools for Rust, Go, C/C++, Zig, .NET/C#, Java/Maven, JavaScript/npm, and Python/pip. Haskell, unusual SDK versions, host-specific dependencies, and several incompatible runtimes are often easier with a local install; Docker can still work with a custom image or mounted toolchain. See [Docker](docs/docker.md) and [Engine runtimes](docs/engine-runtimes.md).\n\nWith Cargo:\n\n```bash\ncargo install crucible-chess\n```\n\nThis puts a `crucible` binary on your `PATH`; run `crucible init`, add your engine, then run `crucible run`. The crate is named `crucible-chess` because plain `crucible` is taken on crates.io; the binary, library, and command-line interface are unaffected.\n\nOr build from source:\n\n```bash\ncargo build --release\n\n./target/release/crucible init\n\n./target/release/crucible add \\\n  --name my-engine \\\n  --repo https://github.com/you/your-engine \\\n  --build \"make\" \\\n  --binary-path \"target/release/my-engine\" \\\n  --branches main,dev \\\n  --start-from v1.0.0\n\n./target/release/crucible run\n```\n\nThe web dashboard opens at \u003chttp://localhost:8877\u003e. Pass `--tui` to launch the terminal UI alongside the daemon, or run `crucible monitor` in another shell to attach one to a running instance.\n\n## Features\n\n- Continuous SPRT testing of every new commit against its predecessor.\n- Elo timeline with confidence intervals and highlighted tagged releases.\n- Regression hunts that narrow a good-to-bad range down to the first bad commit.\n- Release gates that compare a candidate and baseline against the same external gauntlet.\n- NNUE-style training data exported from self-play and from the regression tests the daemon already runs.\n- Multi-engine, multi-branch support, with [experimental branches](docs/experiments.md) kept in their own lane.\n- Embedded web dashboard plus an optional terminal UI.\n- A single binary, SQLite storage, and no external services.\n\n## Documentation\n\n- [Why Crucible exists](docs/motivation.md)\n- [Getting started](docs/getting-started.md)\n- [Docker](docs/docker.md)\n- [Recommended workflow](docs/workflow.md)\n- [Configuration reference](docs/configuration.md)\n- [Engine runtimes](docs/engine-runtimes.md)\n- [CLI commands](docs/commands.md)\n- [Scheduling](docs/scheduling.md)\n- [Experiments](docs/experiments.md)\n- [Regression hunts](docs/regression-hunts.md)\n- [Release gates](docs/release-gates.md)\n- [Training data](docs/training-data.md)\n- [Exporting results](docs/export.md)\n- [Dashboards](docs/dashboards.md)\n- [Architecture](docs/architecture.md)\n- [CI and releases](docs/ci.md)\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the development setup, testing expectations, and project scope. Security issues should follow the private reporting process in [SECURITY.md](SECURITY.md). Notable changes are tracked in [CHANGELOG.md](CHANGELOG.md).\n\n## License\n\nGPL-3.0. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsb2bg%2Fcrucible","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsb2bg%2Fcrucible","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsb2bg%2Fcrucible/lists"}