Radix 1.1.0 is the package manager at the center of Radix GNU/Linux. Packages live in an immutable store, profile changes create generations that can be rolled back, and recipes are Janet data rather than programs that run while they are being loaded. GNU Prolog handles the graph and policy checks built into the executable.
This repository builds packages, manages profiles, synchronizes pinned recipe repositories, constructs system closures, and can make an initramfs from a verified runtime profile. It is only the core, not a finished operating system. Package work is in radix-packages and the installer and live image are in radix-linux. The full distribution still depends on a stage-0 host bootstrap and has not completed security, update, hardware, or multi-user qualification.
The build host needs:
- Janet 1.41 or newer, including headers and
libjanet.a; - GNU Prolog 1.5 or newer;
- a C toolchain, static libc development archives, binutils, Make, and
xxd; - Bubblewrap for normal strict package builds; and
- Git, curl, tar, and Python 3 for repository, download, and release checks.
Build the standalone executable with:
make build
./build/radix versionProvide explicit tool locations when necessary:
make build JANET=/path/to/janet GPLC=/path/to/gplcThe default build is static. RADIX_STATIC=0 creates a host-linked PIE for development and should not be distributed to systems with an incompatible loader or libc baseline.
A per-user installation writes below ~/.local and keeps package state below $XDG_DATA_HOME/radix, or ~/.local/share/radix when XDG_DATA_HOME is unset:
make build
./install.shA root-managed installation uses /usr/local, /radix, and /run/current-system:
sudo ./install.sh --systemSystem mode is admin-managed; Radix does not yet provide a multi-user build daemon. Uninstall program files while preserving package state with:
./install.sh --uninstallAdd --purge only when the selected state root should also be removed.
Use a checkout-local state directory for development:
export RADIX_ROOT="$PWD/.radix-state"
export RADIX_REPOSITORY="$PWD"
export RADIX_RUN_ROOT="$RADIX_ROOT/run"
export RADIX_SANDBOX=off
./radix search hello
./radix show hello
./radix install hello --libc=musl
./radix package --list-installed --list-generations
./radix remove helloRADIX_SANDBOX=off is for trusted local testing only. Strict mode is the default for package builds. A recipe marked :bootstrap true still requires the operator to authorize host-readable bootstrap explicitly:
RADIX_ALLOW_HOST_BOOTSTRAP=1 ./build/radix build helloThe included examples/minimal-boot.janet declaration builds a Linux and static BusyBox runtime profile, verifies its closure, and writes a deterministic newc initramfs:
RADIX_ALLOW_HOST_BOOTSTRAP=1 ./build/radix system image \
examples/minimal-boot.janet build/radix-boot
./scripts/inspect-initramfs.py build/radix-boot/initrd
./scripts/boot-vm.sh build/radix-bootThe Linux and BusyBox recipes are stage-0 bootstrap recipes. Their runtime outputs are Radix store objects, but their builds still use trusted host tools. Distributable 1.1 boot images must be assembled from the canonical /radix/store prefix.
Run the portable tests with:
make checkWith Janet, GNU Prolog, and the native build toolchain available, run:
make check-native
make check-install
make release-gateThe slower QEMU gate is separate:
make check-bootmake source-dist creates build/radix-1.1.0.tar.gz and excludes local builds, test output, reports, caches, editor files, and local workspace files while retaining source tests, scripts, packages, workflows, license files, and documentation.
DOCUMENTATION.md contains the architecture, command reference, recipe and repository formats, security boundaries, migration guidance, release history, and contribution process.
Radix is licensed under the GNU General Public License version 3 or later. See LICENSE for the project notice and COPYING for the complete GPLv3 terms.
The project does not currently publish a private vulnerability-reporting address. Until maintainers establish one, open a minimal public issue requesting private contact and do not publish exploit details for deployments you do not own.