Cargo rail
Graph-aware monorepo orchestration for Rust workspaces
> Rust monorepo tooling for change detection, graph unification, release automation, and split/sync. The project is written primarily in Rust, distributed under the MIT License license, first published in 2025. Key topics include: build-tools, cargo, cargo-plugin, change-detection, ci.
cargo-rail
Rust monorepo tooling for change detection, graph unification, release automation, and split/sync.
What It Covers
plan/run: file-first change detection for selective build, test, bench, docs, and infra executionunify: workspace dependency unification, feature cleanup, unused dependency detection, and MSRV derivationrelease: version bump, changelog generation, tagging, and publish flow without a large external toolchainsplit/sync: copybara-style crate extraction and bidirectional sync without a separate DSL
Quick Start
bashcargo install cargo-rail cargo rail init cargo rail unify --check cargo rail plan --merge-base --explain cargo rail run --merge-base --profile ci
Pre-built binaries: GitHub Releases
Core Workflows
Change Detection
Use plan to build the deterministic contract and run to execute only the selected work.
bashcargo rail plan --merge-base cargo rail plan --merge-base -f github cargo rail run --merge-base --profile ci
impact is diagnostic. scope is the execution handoff.
Graph Unification
Use unify to keep the workspace dependency graph lean and consistent.
bashcargo rail unify --check cargo rail unify --check --explain cargo rail unify
Release Workflow
Use release for checks, changelog generation, tags, remote push, GitHub Releases, and publish ordering.
bashcargo rail release check cargo rail release run cargo-rail --bump patch --yes
For an owned GitHub release, set both push = true and create_github_release = true.
cargo-rail pushes the release commit and tag before publishing crates or making the GitHub Release public.
Split / Sync
Use split and sync when a crate needs to live in both a monorepo and a standalone repository.
bashcargo rail split init crates/my-crate cargo rail split run crates/my-crate cargo rail sync crates/my-crate --to-remote
GitHub Actions
Use cargo-rail-action for planner gates and execution scope in GitHub Actions.
Config
bashcargo rail init cargo rail config sync cargo rail config validate
Primary references:
Migration
Getting Help
- Issues: GitHub Issues
- Crate: crates.io/cargo-rail
Contributing
See CONTRIBUTING.md.
Security
See SECURITY.md.
License
Licensed under MIT.
Contributors
Showing top 2 contributors by commit count.
