How to Install just on Ubuntu: A Handy Command Runner for Your Projects
just is a lightweight command runner for the commands you keep re-typing on every project: build, test, lint, deploy, seed the database, tail the logs. You record them as recipes in a justfile and then invoke them by name with just <recipe>. It deliberately looks like make so the syntax feels familiar, but it strips out the build-system machinery that makes Makefiles awkward for plain task running.
The payoff is that each repository gains a small, self-documenting catalogue of commands. Anyone can run just --list to discover what a project supports, and the whole team ends up running identical commands rather than slightly different ad-hoc scripts.
Ubuntu does not carry just in its default archives, and compiling it means installing the Rust toolchain. The unofficial deb.griffo.io repository removes that friction by offering a current prebuilt package installable with apt.
What Makes just Special?
- π Readable recipes - Named recipes in a plain
justfilethat reads like a task list. - π§ A runner, not a builder - Focused on executing commands, without
makeβs incremental-build surprises. - π€ Arguments and defaults - Recipes take positional parameters, defaults, and variadic arguments.
- π Portable - Works on Ubuntu, macOS, and Windows and can call any interpreter.
- π Discoverable -
just --listshows every recipe and its documentation comment. - 𧬠Variables and helpers - Interpolation, environment access, and string functions built in.
- π Polyglot recipes - Write a recipe body in Python, Node, Ruby, or any shebang language.
- β‘ Single fast binary - Compiled in Rust with no runtime dependencies.
Why Use the deb.griffo.io Repository?
- Simple installs and upgrades through APT, exactly like any other Ubuntu package.
- Automatic dependency management provided by the packaging.
- Tracks upstream releases closely, so new just versions arrive promptly.
- No source builds and no Rust toolchain to maintain.
- Supports current Ubuntu releases (Jammy, Noble, and newer).
Prerequisites
Make sure the following are in place first:
- An Ubuntu system (Jammy 22.04 LTS, Noble 24.04 LTS, or newer)
sudoprivilegescurlinstalled (sudo apt install curlif needed)
Step 1: Add the deb.griffo.io Repository
Register the key and repository with APT:
# Create the keyrings directory
sudo install -d -m 0755 /etc/apt/keyrings
# Download and install the repository GPG key
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
# Add the repository (auto-detects your distro codename)
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
# Update the package list
sudo apt update
Step by step:
- Creates
/etc/apt/keyringswith sensible permissions for repository keys. - Downloads and de-armours the GPG key so APT can verify package signatures.
- Adds the sources entry bound to that key, auto-detecting your Ubuntu codename.
- Updates the package index so APT knows about the new packages.
Step 2: Update the Package List
If you skipped the final command above, run it now:
sudo apt update
Step 3: Install just
Install with APT:
sudo apt install just
APT downloads the latest packaged just and resolves any dependencies.
Step 4: Verify the Installation
Confirm the install by printing the version:
just --version
Expect output similar to:
just 1.34.0
Getting Started with just
Writing a justfile
Create a file called justfile at the top of your project. Each recipe is a name followed by indented commands:
# List available recipes when run with no arguments
default:
@just --list
# Install dependencies
setup:
npm install
# Run the dev server
dev:
npm run dev
# Run tests
test:
npm test
Run any recipe by name from anywhere inside the project:
just setup
just dev
Running just alone executes the first recipe, and just --list prints the full menu with descriptions.
Passing Arguments
Recipes take parameters, and parameters can have defaults:
# Tag a release, defaulting to patch
release level="patch":
npm version {{level}}
# Run a single test file
test-file file:
npx vitest run {{file}}
Invoke them with positional arguments:
just release minor
just test-file src/app.test.ts
Variables and dotenv
Declare variables and toggle settings at the top of the file:
# Load variables from a .env file
set dotenv-load
registry := "ghcr.io/acme"
publish:
docker push {{registry}}/app:latest
set dotenv-load pulls values from a local .env, and {{registry}} interpolates the variable into the command.
Recipes in Any Language
Thanks to shebang support, a recipe can be written in a different interpreter entirely:
# A Node recipe embedded in the justfile
report:
#!/usr/bin/env node
const pkg = require("./package.json");
console.log(`${pkg.name} v${pkg.version}`);
Useful Flags
These flags help in everyday use:
just --list # show every recipe
just --show dev # print a recipe's source
just --choose # pick a recipe interactively (pairs with fzf)
just --set registry local # override a variable at runtime
Keeping just Updated
Since just comes from the repository, it updates with the rest of the system:
sudo apt update && sudo apt upgrade
Other Tools from deb.griffo.io
The repository ships several tools that slot neatly into a project workflow:
- fzf - A fuzzy finder that backs
just --choosefor interactive selection. - lazygit - A terminal UI for Git alongside your recipes.
- zoxide - A smarter
cdfor hopping between projects. - zellij - A multiplexer for running tasks side by side.
Troubleshooting
GPG or Key Errors
If APT reports the repository is not signed, re-import the key:
sudo rm -f /etc/apt/keyrings/deb.griffo.io.gpg
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update
Package Not Found
If APT cannot locate the just package:
- Re-run
sudo apt updateto refresh the index. - Verify your Ubuntu release is supported (Jammy, Noble, or newer).
- Check the sources entry:
cat /etc/apt/sources.list.d/deb.griffo.io.list
just Cannot Find a justfile
just searches the current directory and every parent for a file named justfile or .justfile (case-insensitive). If it reports none found, confirm your location or point at one explicitly:
ls -la justfile
just --justfile ./ops/justfile deploy
Uninstalling
To remove just:
sudo apt remove just
To also remove the repository:
sudo rm -f /etc/apt/sources.list.d/deb.griffo.io.list
sudo rm -f /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update
Conclusion
just replaces scattered helper scripts and forgotten one-liners with a single, discoverable command menu per project, and it keeps everyone on the team running the same tasks the same way. On Ubuntu, installing it from deb.griffo.io gives you a current build that upgrades cleanly with apt upgrade.
Write a justfile once, and your projectβs common commands are always just a just away.
Resources
Disclaimer: The deb.griffo.io repository is an unofficial community project and is not affiliated with the official Debian or Ubuntu projects, or with the upstream just project.