Skip to main content

Why Broski Exists

Broski was built to close the gap between simple command runners and deterministic build systems.

The core gap

Most teams use one of these patterns:

  • Make/Just: fast to adopt, but limited explainability and weak determinism.
  • Heavy build systems: strong determinism, but high complexity and onboarding cost.

Broski aims for the middle:

  • shell-first authoring
  • deterministic graph execution when declared
  • interactive mode for local DX
  • explicit cache miss reasoning

What teams struggle with today

1) “Why did this rebuild?”

Without manifest diffs, CI reruns are hard to reason about.
Broski answers with --explain against previous manifests.

2) “Why did this pass locally but fail in CI?”

Implicit inputs cause nondeterministic behavior.
Broski requires explicit contracts for graph-mode tasks.

3) “Why is my local runner corrupting outputs on failure?”

Partial outputs can leak from failed executions.
Broski uses transactional output promotion to keep artifact state safe.

Execution model at a glance

Where Broski is stronger than Make/Just

ProblemMakeJustBroski
Content-level cache keysNoNoYes
Structured cache miss reasonsLimitedNoYes
Transaction-safe output promotionNoNoYes
Interactive local task supportYesYesYes
Secret-safe explain outputNoNoYes

Where to go next