Keyboard shortcuts

Press ← or β†’ to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

yatr 🦬

Yet another task runner. But this one’s actually good.

🌐 yetanothertaskrunner.com Β· πŸ“¦ crates.io Β· πŸ™ GitHub

yatr test          # Run tests
yatr build         # Build with dependencies
yatr --watch test  # Re-run on file changes

yatr is a fast, single-binary, polyglot task runner with a cache that actually tells the truth: content-addressed, output-restoring, and shareable across machines and CI.

Why yatr?

FeatureMakeJustcargo-makeyatr
Content-addressed cachingβŒβŒβš οΈβœ…
Captures & restores outputsβŒβŒβŒβœ…
Remote / shared cacheβŒβŒβŒβœ…
Signed cache (anti-poisoning)βŒβŒβŒβœ…
Affected (monorepo) detectionβŒβŒβš οΈβœ…
Toolchain managementβŒβŒβŒβœ…
Sandboxed WASM pluginsβŒβŒβŒβœ…
Config schema + LSPβŒβš οΈβŒβœ…
Single binary, zero runtime depsN/Aβœ…βŒβœ…

It sits in the sweet spot: simpler than cargo-make, far more capable than just β€” a correct, fast, hermetic polyglot command runner.

The four things it gets right

  • Trusted β€” a content-addressed cache, cryptographically signed for sharing, with IO-tracing to catch under-declared outputs.
  • Fast β€” ~8 ms startup, a ready-queue scheduler, and affected-detection that skips what git says can’t have changed. (Benchmarks.)
  • Polyglot-complete β€” pin language toolchains so a fresh checkout runs green; write tasks in shell, Rhai, or WASM.
  • Delightful β€” a JSON Schema and a language server for yatr.toml, structured output, and profiling.

Stability

yatr is 1.0. The yatr.toml schema and the CLI surface are stable under semantic versioning: breaking either requires a 2.0. New keys and commands may still arrive in minor releases, but existing ones keep their meaning, and the cache and remote protocols survive across 1.x upgrades. The full history lives in the changelog.

The library/crate API and the WASM plugin ABI (yatr-plugin) remain pre-1.0 and may change while the plugin model evolves.