Bro is a universal local task runner. Declare tasks in a bro.yaml; Bro
schedules them as a DAG and caches every result by content — so a second
run of anything unchanged takes milliseconds.
Install Bro first:
Linux / macOS:
curl -fsSL https://hypervapor.org/bro/install.sh | shWindows (PowerShell):
irm https://hypervapor.org/bro/install.ps1 | iexThe script detects the architecture, verifies the checksum, installs to
%LOCALAPPDATA%\Programs\bro, and adds it to your PATH.
A project is a directory with a bro.yaml — no init, no daemon:
version: "1"
tasks:
count:
cmd: "wc -l < lines.txt > count.txt && cat count.txt"
inputs: ["lines.txt"]
outputs: ["count.txt"]Common commands:
bro run <task> [args...] # run a task and its dependencies
bro list # list tasks and dependencies
bro watch <task> # re-run when inputs change
bro clean [--outputs] # clear the cache (and declared outputs)
bro version # show versionRunnable projects live in examples/: shell, Go, and
TypeScript.
- Content-addressed caching. A task's fingerprint covers its command, environment, input contents, and dependency outputs. Change nothing, pay nothing.
- Correct by construction. A change invalidates exactly the affected tasks and their downstream — never a stale hit, never a rebuild because a comment changed.
- One binary, anywhere. Commands run in an embedded POSIX shell, so the
same
bro.yamlbehaves identically on Linux, macOS, and Windows — for Go, Node, Python, shell, or code generators. - Scales to teams. Remote cache over S3/MinIO or plain HTTP lets CI and teammates share cache entries; LRU eviction keeps disk usage bounded.
- Eats its own dog food. This repo's CI builds and tests itself through
bro run— Bro's cache, scheduler, and embedded shell are exercised on every push.
The numbers. The engine is fast on its own — 50 tasks all cache hits in 23.5 ms, a single-task hit in 0.73 ms, a 10,000-file fingerprint in 20.3 ms (methodology). The four-round competitor suite (report) shows where that pays off:
On a realistic workload, a clean CI worker with a primed remote cache rebuilds the graph in 0.23 s — about 18× faster than the best competitor, who has no remote cache and redoes the work. The chart shows only the cells Bro wins; the report is honest about the rest.
- Getting started in 5 minutes
- Best practices for
inputs - Technical specification
- Benchmarks · Competitor report
MIT — LICENSE.

