Skip to content

Install

Giant ships as a small suite of static binaries: the giant engine plus the porcelains it dispatches to (giant-build, giant-task, giant-tui, and friends). No runtime dependencies, no daemon, no JVM. Pick whichever installation method fits your environment.

The install script detects your OS and architecture, downloads the matching release tarball from GitHub, and installs the suite into /usr/local/bin (or ~/.local/bin if you don’t have root):

Terminal window
curl -fsSL https://giant.build/install.sh | sh

Want a specific version? Pass GIANT_VERSION:

Terminal window
curl -fsSL https://giant.build/install.sh | GIANT_VERSION=0.1.0 sh

Supported platforms:

PlatformTriple
Linux x86_64 (musl, static)x86_64-unknown-linux-musl
Linux aarch64 (musl, static)aarch64-unknown-linux-musl
macOS x86_64x86_64-apple-darwin
macOS aarch64 (Apple Silicon)aarch64-apple-darwin

Each release ships a SHA256SUMS file and the install script verifies the tarball against it. To check by hand:

Terminal window
curl -fsSL https://github.com/giantdotbuild/giant/releases/latest/download/SHA256SUMS

The engine alone can’t do much - giant build dispatches to the giant-build porcelain on PATH - so install at least the engine and the build porcelain:

Terminal window
git clone https://github.com/giantdotbuild/giant
cd giant
cargo install --path crates/giant # the engine
cargo install --path crates/giant-build # giant build / test / verify
# Add the other porcelains you want (each becomes `giant <name>`):
cargo install --path crates/giant-task
cargo install --path crates/giant-gen
cargo install --path crates/giant-tui
# Engine with the remote-cache feature (Bazel HTTP cache protocol)
cargo install --path crates/giant --features remote

Requires Rust 1.95 or newer.

The repo ships a flake exposing every first-party binary as its own package, plus a giant-suite meta-package that bundles all of them. CI pushes every build to the giant Cachix cache and the flake advertises it, so when nix asks whether to trust the substituter, saying yes gets you prebuilt binaries instead of a compile (Linux and macOS, x86_64 and aarch64 on Linux, aarch64 on macOS):

Terminal window
# Everything (the giant-suite meta-package: all first-party binaries)
nix profile install github:giantdotbuild/giant
# Or pick individual binaries
nix profile install github:giantdotbuild/giant#giant
nix profile install github:giantdotbuild/giant#giant-tui
# Run without installing
nix run github:giantdotbuild/giant -- build
nix run github:giantdotbuild/giant#giant-tui
# Build locally and inspect the result
git clone https://github.com/giantdotbuild/giant
cd giant
nix build .#giant-suite
./result/bin/giant --version

The flake doesn’t replace devenv.nix - devenv stays the dev shell (devenv shell for the full toolchain). The flake’s devShells.default is a thin fallback for people who don’t run devenv.

CI builds every commit on main for x86_64/aarch64 Linux and aarch64 macOS and pushes the results to giant.cachix.org, so nix installs substitute prebuilt binaries instead of compiling.

The flake advertises the cache, so plain flake commands just need a yes at the trust prompt (or --accept-flake-config in scripts):

Terminal window
$ nix profile install github:giantdotbuild/giant
do you want to allow configuration setting 'extra-substituters'
to be set to 'https://giant.cachix.org' (y/N)? y

To trust it permanently (no prompts, works for transitive use too):

Terminal window
cachix use giant
# or by hand, in nix.conf:
# extra-substituters = https://giant.cachix.org
# extra-trusted-public-keys = giant.cachix.org-1:v3xudJPm6zp3waq/lTUVqKBwm+BWzbs3aVZopsD4QM4=

Add the flake as an input, put the suite in your packages, and pull the cache - devenv has cachix support built in:

devenv.yaml
inputs:
giant:
url: github:giantdotbuild/giant
devenv.nix
{ inputs, pkgs, ... }:
{
packages = [ inputs.giant.packages.${pkgs.stdenv.system}.giant-suite ];
cachix.pull = [ "giant" ];
}

One caveat, and it applies to any Cachix cache, not just this one: devenv fetches the cache’s signing key from Cachix automatically, but the nix daemon only accepts substituters from users in its trusted-users list. For everyone else it prints a warning and compiles from source. This is the daemon’s security model - accepting a cache means accepting its binaries into the shared store - so no repo-local config can grant it. One-time setup per machine, either:

# NixOS / nix-darwin configuration - all devenv caches then just work
nix.settings.trusted-users = [ "root" "@wheel" ];

or trust this one cache system-wide without trusting the user:

Terminal window
sudo cachix use giant # appends the substituter + key to /etc/nix/nix.conf

After either, every devenv shell in a project that pulls the cache has the whole suite on PATH, prebuilt.

The flake also exposes overlays.default for setups that prefer pkgs.giant / pkgs.giant-suite via an overlay.

Terminal window
$ giant --version
giant 0.1.0
$ giant --help

Remove the binaries wherever your install method placed them:

Terminal window
(cd "$(dirname "$(which giant)")" && rm giant giant-*)

Clear the cache too if you don’t want it lingering:

Terminal window
giant clean -y
# or
rm -rf ~/.cache/giant
Terminal window
# bash
giant completions bash > /etc/bash_completion.d/giant
# zsh
giant completions zsh > "${fpath[1]}/_giant"
# fish
giant completions fish > ~/.config/fish/completions/giant.fish