Mustfile¶
One config. Every language.
A polyglot build orchestrator with first-class support for 40 recipe types across 17+ languages.
Replace your Makefiles, Justfiles, and Taskfiles with a single Mustfile.toml that knows how to build, test, cache, and cross-compile every language in your project.
Quick start¶
# Install
curl -fsSL https://github.com/gregnazario/must/releases/latest/download/install.sh \
-o install.sh && sh install.sh && rm install.sh
# Or build from source
git clone https://github.com/gregnazario/must.git
cd must && cargo install --path crates/must-cli
Create a Mustfile.toml:
[project]
name = "my-app"
[recipe.build]
type = "rust-bin"
package = "my-app"
[recipe.test]
type = "rust-test"
package = "my-app"
deps = ["build"]
[recipe.lint]
type = "shell"
script = "cargo clippy -- -D warnings"
phony = true
Run:
must build # builds the 'build' recipe
must test # runs test + dependencies
must outdated # shows what's stale
must explain build # cache key, inputs, command preview
Why must?¶
| Problem | What must does |
|---|---|
| mtime rebuilds break on branch switches | Content-hashed caching for compiled recipes |
| No language awareness — every build file reinvents toolchains | First-class recipe types that know each toolchain |
| Cross-compilation is manual and per-project | Automatic target resolution + container opt-in |
Different commands per language (npm run, cargo build, go build) |
Consistent verbs: must build, must test, must lint |
| Hard to introspect build state | must list, must graph, must outdated, must explain |
Supported languages¶
| Language | Recipe types |
|---|---|
| Shell | shell |
| Rust | rust-bin, rust-lib, rust-test |
| Go | go-bin, go-test |
| C/C++ | c-bin, c-lib |
| TypeScript | ts-bin, ts-check, ts-lint, npm |
| Python | py-bin, py-test, py-lint |
| Zig | zig-bin, zig-test |
| Java | java-bin, java-test |
| Kotlin | kotlin-bin, kotlin-test |
| Swift | swift-bin, swift-test |
| .NET | dotnet-build, dotnet-test, dotnet-publish |
| Ruby | ruby-bin, ruby-test |
| Dart | dart-bin, dart-test |
| Elixir | elixir-build, elixir-test |
| Flutter | flutter-build, flutter-test |
| Nim | nim-bin, nim-test |
| Docker | docker-build, docker-push |
| Precompiled | precompiled-bin |
| Lua plugins | plugin |
Features¶
- 40 recipe types with first-class caching
- Smart caching — content-hash for compiled, mtime for shell
- Cross-compilation — automatic toolchain resolution
- Dependency graph —
must graphvisualizes your build - Watch mode —
must watchrebuilds on file changes - Lua plugins — extend with
.luascripts - GitHub Actions — drop-in action for CI
- Import — convert Makefiles automatically
Next steps¶
- Getting Started — install and first project
- Config Reference — full Mustfile.toml schema
- CLI Reference — all commands
- Recipes — per-language recipe guides