DevLogTechnical writing
Tools

just: Make Without the Build System

October 25, 2026

Some tools fix a thing you didn't know was broken until you meet the replacement. For me, that tool is just — a command runner written in Rust by Casey Rodarmor, the same mind behind the Ordinals protocol. It doesn't build anything. It just saves named commands and runs them for you. That turns out to be exactly what most of us quietly use make for.

The pitch is one line: write recipes in a file called justfile, run them with just <name>. A minimal one looks like this:

default: help

help:
    @just --list

build:
    npm run build

test:
    npm test

lint:
    cargo clippy -- -D warnings

Type just and you get a checklist of every recipe and its comment. Type just test and the tests run. Nothing rebuilt, nothing to keep fresh.

Where just quietly improves on make is what it refuses to do. Make assumes every target is a file and forces you to sprinkle .PHONY everywhere. Just has no file-dependency model at all — it is a command runner, not a build system, and its author is explicit that it should stay that way. There are no tab-or-die rules: spaces work. Errors include the line of your justfile that broke. And you can run any recipe from any subdirectory, not just the repo root. Four decades of Makefile muscle memory, without the four decades of baggage.

The real wins come as a project grows. Recipes take arguments, so just deploy staging and just deploy prod share a single step. You can chain dependencies — ci: lint typecheck test build runs them in order, and just flags circular ones before anything runs. A set dotenv-load directive pulls your .env in automatically, so secrets and URLs live outside the checked-in file. Need a recipe in a language that isn't shell? Shebang recipes let you drop in Python or Node directly. --dry-run shows you what would run before you commit to it.

Every recipe line runs in a fresh shell, which sounds fussy until you realize it keeps cd from leaking between steps. It loads .env, prints just --list as built-in help, and ships shell-completion scripts for most popular shells. Whatever you type it as, just on its own greets new teammates with the project's actual commands instead of a short WTF-stare.

Pronunciation aside, adoption has been steady. The project sits at version 1.59 and has pulled in roughly 35,000 stars on GitHub — helped, no doubt, by how effortless it is to reach. On Debian 13 and Ubuntu 24.04 it's a single apt install just. Elsewhere there's brew install just, cargo install just, choco install just, and winget install --id Casey.Just. The whole program is one dependency-free binary, a few megabytes, cross-platform on Linux, macOS, and Windows. Popular command runners include task (YAML-based, Go) and cargo-make, but just keeps the philosophy most makeheads already think in.

It is not for everyone. If your project genuinely compiles files, keep Make — dependency tracking is its job and just's maintainer has said repeatedly his tool will never take it on. Teams that don't use just yet face one more binary in their onboarding, though the one-line install in a README defuses that fast. And it isn't a scheduler; hand cron or a systemd timer a just backup call instead.

For everything else — the scripts, the aliases, the "I swear that command worked last week" recipes — just is the clean room you didn't know you needed. It's the first tool I install on a fresh box now, and it makes everything just a bit easier.

← More Tools