Skip to content

stratt

stratt

One set of commands for every repo, whatever language it’s in.

build, test, lint, release, deploy — the same commands in a Go repo, a Python repo, or a PHP one. Stratt detects the toolchain and dispatches; you don’t think about it.

Named for Eva Stratt, Project Director of the Petrova Taskforce in Andy Weir’s Project Hail Mary.

Pre-alpha. Stratt is in active early development. Expect breaking changes until v1.0.

The idea

Every repo needs the same handful of commands — build, test, lint, format, release, deploy — but each language and toolchain spells them differently. Make targets capture the variance per-repo, but every repo’s Makefile becomes its own dialect.

Stratt collapses that to one vocabulary. The differences between toolchains live in stratt’s detection layer; they’re invisible to the user.

$ stratt test              # uv run pytest, or go test ./..., or composer test —
                           # whichever the repo actually uses
$ stratt release minor     # bump the version source, commit, tag, push
$ stratt deploy prod 1.14.1   # bump Kustomize image tags
$ stratt doctor            # show exactly what each command will dispatch to

Two Go projects in your fleet can have completely different release flows (one bump-my-version-driven, one goreleaser-driven) — same stratt release command for both. Stratt detects the right engine and dispatches.

Highlights

  • One vocabulary, every stack. Go, Python+UV, Node+npm, PHP, Docker, Kustomize, MkDocs, Sphinx, Hugo, GitHub Actions, and Ansible (collections, roles, playbooks). Multi-stack repos are normal.
  • Zero config when possible. Detection drives behavior. stratt.toml is optional.
  • Single static binary. No Python or Node runtime required to use stratt itself.
  • Secure self-update. Sigstore artifact attestations verified on every update. Homebrew users get an automatic dispatch to brew upgrade.
  • Composable tasks. Built-in commands and your own custom tasks share one namespace. Override or augment any built-in.

Install

brew tap stratt-sh/tap
brew install stratt

Try it

cd <any-repo-you-have>
stratt doctor

doctor reports the detected stacks and the resolved backend for every universal command. What it shows is exactly what each command will run.