← Blog

Justfile — Why I Define Standard Project Commands Explicitly

The Short Version

To me, a Justfile is not just a convenience layer. It is the standard execution interface for a project.

It tells humans and tools what the stable commands are.

Why I Use It

As a project grows, raw commands become longer and more inconsistent.

uv run python manage.py runserver --settings=config.settings.dev
uv run pytest domains --cov=domains -x -v
docker compose -f docker/docker-compose.dev.yml up -d db redis

Expecting every contributor to remember the exact command sequence is unrealistic.

So I define a stable interface:

  • just dev
  • just test
  • just check
  • just deploy

Why Not Just Use Makefile

make is fundamentally a build tool. It can work as a task runner, but that is not really what it was designed for.

just feels closer to what I want:

  • simpler syntax
  • better cross-platform ergonomics
  • clearer use as a project command contract

Why It Matters in DAEMON-Style Projects

In my projects, the Justfile helps standardize:

  • development commands
  • test entrypoints
  • deployment commands
  • environment-specific details hidden behind stable verbs

That makes onboarding easier, and it also helps AI-assisted workflows behave more consistently.

The value is not that it saves keystrokes. The value is that it defines how this project is meant to be operated.