Skip to content

Repository files navigation

Bro

Build · Repeat · Orchestrate

CI release license

bro run build — cold, then fully cached

What is Bro

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.

Quick start

Install Bro first:

Linux / macOS:

curl -fsSL https://hypervapor.org/bro/install.sh | sh

Windows (PowerShell):

irm https://hypervapor.org/bro/install.ps1 | iex

The 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 version

Runnable projects live in examples/: shell, Go, and TypeScript.

Why Bro

  • 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.yaml behaves 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:

Bro vs make / just / go-task / turbo — where Bro wins

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.

Documentation

License

MIT — LICENSE.

About

A universal local task runner

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages