xx
.md

Build consistently. Keep the build simple.

xx is a build system for projects that want more consistency than a collection of shell scripts without adopting a large, fully hermetic build environment.

Build definitions are small Starlark files. They declare tools, environment changes, and commands. xx provisions versioned tools, gives each task a clean environment, and runs independent work concurrently.

xx is not fully hermetic. It deliberately chooses a practical middle ground: reproducible tool versions and controlled task environments, with familiar files and commands.

Why xx?

Managed Go and Node.js language packages are supported. More language and tool packages can be added without changing the core model.

Install

Install xx from source:

go install codeberg.org/tsukinoko-kun/xx@latest

This requires Go. Linux and macOS builds also need a C compiler when Go enables CGO. In a POSIX shell, CGO_ENABLED=0 go install codeberg.org/tsukinoko-kun/xx@latest builds without a C compiler. Projects using xx can request their own managed Go SDK version.

First Project

From a project directory, initialize xx:

xx init

This creates .xx/main.star. Entrypoints live in .xx/ and can use .star, .build, .starlark, .bzl, or .bazel as their extension.

For a Go program in main.go, use:

load("@go@1.26.5", "go_binary")

go_binary(
    entry_point="main.go",
    flags=["-trimpath"],
)

Run the entrypoint by its base name:

xx run main

xx downloads the requested official Go SDK when it is not cached, then writes the binary to .xx/out/main (.xx/out/main.exe on Windows).

Where Next?

Project Status

xx is early software. Managed Go and Node.js packages support Windows x86-64, Windows ARM64, Linux x86-64, Linux ARM64, and macOS ARM64.

Source and issue tracking are on Codeberg. xx is available under the Zlib License.