Skip to content

Giant

Build orchestration

The cache and the graph of a big build system, in a tool you can read.

A small build engine: content-addressed caching, a cross-language dependency graph, parallel builds - driven over a tiny JSON protocol. Tasks, the interactive UI, and config generation ship as separate porcelain binaries you put on PATH.

$ curl -fsSL giant.build/install.sh | sh

A green moss-covered giant tending a city of small robots, with a sign reading 'We grow together - built to serve, programmed to care.'
$ giant build
✓ BUILD    //proto:gen              340ms
✓ CACHE    //src/auth:auth            2ms
↓ REMOTE   //src/core:core          120ms
✓ BUILD    //cmd/server:server     1.24s

OK    2 built · 1 cached · 1 remote  in 1.27s

Language-agnostic

The engine knows nothing about Go, Rust, or Docker. Targets are just inputs → command → outputs in plain giant.yaml files.

Content-addressed cache

SHA-256 keys over inputs, environment, and dependency hashes. Local cache by default; bring your own bazel-remote, sccache, or S3 backend for shared builds.

A core you control

One static binary that builds, caches, and speaks NDJSON. No JVM, no daemon, no plugins in your process. Everything else - tasks, the TUI, generation - is a porcelain on your PATH. Uninstall one and the feature is gone.

The Giant kneeling in a forest clearing, tending small robot saplings.

Built to serve, programmed to care.

Giant is a quiet build tool. It doesn’t run a daemon. It doesn’t take over your terminal. It doesn’t ship a TUI you didn’t ask for. You run giant build and it finishes. You run it again and the cache holds.

The whole engine is small enough to read in an afternoon - no plugin DLLs, no embedded scripting, no language-specific special cases. Every behaviour comes from one of two places: your giant.yaml or a porcelain binary on your PATH.

Affected detection

Builds only what changed since main, via git diff or an explicit file list.

Early cutoff

Upstream rebuild with byte-identical outputs leaves downstream cache-warm.

Watch mode

Continuous rebuilds with a debouncer that honors your selection patterns.

Path labels + exclusion

giant build ‘//src/…’ ’!//src/legacy/…’ - same language across build, test, watch, affected.

Tags

Mark targets with release, flaky, anything. Filter via —tag / —no-tag.

An engine you can talk to

Builds run over NDJSON. A TUI, an IDE, or a web app drives Giant without linking its code.

LRU cache eviction

Cache stays under a configured size limit. No giant gc needed; it just works.