The workshop · Edition No. 13 · 7 Sep 2026

casey/just

Named recipes in a justfile — 'just backup', 'just normalize' — so the command is never the thing that gets lost.

← The workshopRead the whole edition →
just: commands saved under a name. One file of named recipes per project.

35.7k stars · CC0-1.0 · 1.58.0 (2026-08-03) · Track this in Rising ↗

Named recipes in a justfile — 'just backup', 'just normalize' — so the command is never the thing that gets lost.

Verified25 Oct 2026

Radar check

What we found when we opened it. Every bar is one fact, with its date.

Alive90

Last code pushed 19 Oct 2026, 9 days before this check.

Releases100

Latest release 1.59.0 on 15 Oct 2026.

Maturity100

Public since June 2016, a little over 10 years.

Adoption91

36,424 stars and 865 forks.

Activity65

33 commits and 39 new issues in the last 90 days.

Community100

226 contributors. 33 pull requests merged in 90 days.

Security40

No security policy file says how to report a problem. No published security advisories.

Licence CC0-1.0: permissive: use it for anything, keep the noticeSetup effort 1 of 5Payoff 4 of 5
How the bars are scored
  • Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
  • Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
  • Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
  • Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
  • Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
  • Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
  • Security. A published security policy 80, none 40; published advisories are listed, not scored.

Checked by Repo Radar on 25 Oct 2026 from the repository on GitHub. Covered in Edition 13.

▶Repo detailsthe review · specs · pros & cons · install

What it does

It is a command runner. A file called justfile holds named recipes, and each recipe is one or more shell lines. Running just <name> executes that recipe from anywhere inside the project. Recipes take arguments, read variables and environment files, depend on each other, and can be written in another language such as Python by naming its interpreter. just --list prints every recipe with its comment, which makes the file its own documentation. It is one small binary with no runtime to install. Version 1.59.0 was released on 15 October 2026. It is not a build system: it does not track which files changed, so it re-runs whatever it is asked to run.

Why it matters

Who it suits. It suits anyone with a growing pile of long commands, and anyone who returns to a project every few weeks and has to remember how it starts. It suits small teams, because a named recipe is a shared answer instead of a message asking how something is run. Skip it if the work already uses a build system that tracks changes, and skip it if there are only two commands to remember.

Verdict. The cheapest thing in this edition and the only one that gets more useful with every past edition, since each one leaves commands behind. Keep the file honest: a recipe that has gone stale is worse than no recipe, because it fails while looking correct. The syntax is close to Make and deliberately simpler. go-task/task is the alternative for anyone who prefers YAML files, and it does track changes.

Stars35.7k
LicenceCC0-1.0
Latest1.58.0 (2026-08-03)checked 7 Sep 2026
Written inRust
NeedsDocker and Rust and cargo
RunsLocally, on your own machine
Summary (Key Points)from the README
Key features
  • Recipes in any language: Recipes can be written in arbitrary languages such as Python or Node.js, using shebang recipes or `[script(COMMAND)]` recipes.
  • Parallel execution: The `[parallel]` attribute runs dependencies concurrently, and `--jobs` limits how many run at once.
  • Static error checking: Unknown recipes and circular dependencies are reported before anything runs, and syntax errors show their source context.
  • Rich recipe arguments: Parameters support defaults, variadic `+` and `*` forms, long and short options, flags, and regex patterns via `[arg(...)]`.
  • Expression language: Built-in functions, string types (including shell-expanded and format strings), and conditionals are available in assignments and recipe bodies.
  • Multi-file organization: Justfiles can be split with `import` and `mod` statements, and optional imports and modules are supported.
  • Dotenv and environment handling: `.env` files load automatically through `dotenv-*` settings, and `dotenv-command` can source secrets from a vault.
  • Flexible invocation: `just` runs from any subdirectory, lists recipes with `--list`, and offers command-line completion for most shells.
  • Backwards compatibility promise: The README states there will never be a just 2.0, and breaking changes are opt-in per justfile.
Ways to install
Platform or methodWhat it needsEffort
Package managers (cross-platform, BSD, Linux, Windows, macOS)The platform's package manager, such as Homebrew, Cargo, npm, apt, or wingetLow: one command
Pre-built binariesAccess to the releases page, or the install script with a destination directoryLow to medium
GitHub ActionsPre-installed brew or choco, or the setup-just or install-action actionsLow
DockerCopying the binary into a Dockerfile from the GitHub Container RegistryLow
Node.js (just-install)An npm project, which installs a platform-specific binary as a dependencyLow
Nix flakeUsing the repository's flake as an input to another flakeMedium
Building from sourceRust toolchain, then `cargo install just`Medium
Important
  • Windows shell: On Windows, `just` needs `sh` from Git for Windows, GitHub Desktop, or Cygwin, or you must set a different shell such as PowerShell.
  • Shebang limits: Windows does not support shebang lines, and shebang recipes fail in temporary directories mounted `noexec`.
  • Unstable features: Unstable features such as `set lists` and user-defined functions error unless you pass `--unstable`, set `unstable`, or set `JUST_UNSTABLE`.
  • Line-by-line execution: Each recipe line runs in a fresh shell, so variables, directory changes, and multi-line constructs do not persist unless you use a shebang recipe.
  • Recursive calls: Calling `just` recursively from a recipe reruns assignments, may run dependencies twice, and does not pass command-line arguments on.
  • PowerShell arguments: PowerShell handles positional arguments differently, so `positional-arguments` can break PowerShell recipes.
  • Install rate limits: `install.sh` can fail on shared IPs such as GitHub Actions because of API rate limits, so pass `--tag` or a `GITHUB_TOKEN`.
  • Import ordering bug: The README calls the ordering of duplicate imports at the same depth a bug that is kept for compatibility.

Written by an AI model from the project’s README; not part of the review, and it can be wrong.

Setup effort
1 / 5
Payoff
4 / 5
Good
  • One small program, no runtime, nothing to host.
  • just --list prints every recipe with its comment, so the documentation writes itself.
  • CC0-1.0 terms, so there is never a licence question.
Watch for
  • Not a build system: it does not track what changed and re-runs everything it is asked for.
  • A stale recipe fails while looking correct, which is worse than having none.
  • One more small syntax to learn, and it handles shell lines slightly differently from a plain script.
Install
brew install just        # or: cargo install just
just --list
Screenshots
casey/just: GitHub preview cardcasey/just: Screenshot 1

On Stack Radar: Build & Ship › Developer Environments › Terminal Tools.

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.