Install hal0
hal0 installs from a single command. The bootstrap script is the trust boundary: it fetches the release manifest, verifies the tarball, unpacks it, and hands off to the real installer.
curl -fsSL https://hal0.dev/install.sh | bashRequirements
Section titled “Requirements”- Linux, x86_64 — hal0 ships amd64-only binaries (the FastFlowLM
.deband the toolbox container images). ARM and macOS/Windows are not supported. - systemd —
systemctlmust be onPATH(outside--devmode). - Python ≥ 3.12 — the package requires 3.12+; the installer is tested on 3.11–3.14 and builds a dedicated virtualenv.
- A container runtime — every inference slot runs in a container. The installer auto-installs podman if no runtime is found.
- ~20 GB free disk under the data directory, plus free ports
8080(API) and3001(OpenWebUI).
Supported package managers for auto-installing prerequisites (podman, the Python venv stdlib): apt (Debian/Ubuntu), dnf/yum (Fedora), pacman (Arch), zypper (openSUSE), and apk (Alpine).
What the bootstrap does
Section titled “What the bootstrap does”-
Fetch the release manifest — by default the latest
stable.jsonfrom GitHub Releases. Override withHAL0_RELEASES_URLor pick a channel withHAL0_CHANNEL. -
Download and SHA-256-verify the tarball against the digest in the manifest. A mismatch aborts the install.
-
Cosign keyless verify, when available — if
cosignis onPATH, the Fulcio-issued certificate and signature are checked against the workflow OIDC identity declared in the manifest; a failed check aborts the install. Ifcosignis not installed, the bootstrap proceeds on the SHA-256 check alone with a loud warning — cosign is no longer a hard requirement for the one-line install. SetHAL0_INSTALL_REQUIRE_COSIGN=1to restore the old strict behavior (fail instead of warn when cosign is missing). -
Unpack and hand off to
installer/install.sh, which runs pre-flight checks, installs podman + the Python venv, builds the dashboard, writes config and systemd units, runs first-run setup (hal0 setup --auto --no-pull --no-extensions) to seed a hardware-recommended slot configuration, and starts the API.
Environment variables and flags
Section titled “Environment variables and flags”The installer reads several environment variables and accepts a few flags:
| Variable | Default | Purpose |
|---|---|---|
HAL0_PREFIX | /usr/lib/hal0 | Installation root (FHS layout with a versioned dir + current symlink) |
HAL0_PORT | 8080 | API bind port |
HAL0_MODELS_DIR | /var/lib/hal0/models (or $PWD/.hal0ai/var/lib/hal0/models under --dev) | Where Hugging Face pulls land |
HAL0_PYTHON | python3 | Python interpreter to build the venv from |
HAL0_NO_PROBE | (unset) | Set to 1 to skip first-run automatic setup (hardware-recommended slot seed) |
HAL0_INSTALL_REQUIRE_COSIGN | (unset) | Set to 1 to make the bootstrap refuse the install outright when cosign isn’t present, instead of warning and proceeding on the SHA-256 check alone |
| Flag | Effect |
|---|---|
--dev | Local-only editable install under $PWD/.hal0ai — no systemd, no host package changes |
--no-start | Set everything up but do not enable/start the units |
--models-dir=PATH | Absolute path where pulls land (same as HAL0_MODELS_DIR) |
Verify the install
Section titled “Verify the install”Once the installer finishes, check system and slot status:
hal0 statusRe-run the full pre-flight set (architecture, systemd, Python, container runtime, disk, ports) any time:
hal0 doctorRe-run hardware detection (CPU, RAM, GPU, NPU) on its own with:
hal0 probeThe API listens on http://localhost:8080. Service-level checks:
systemctl status hal0-apisystemctl list-units 'hal0-slot@*'journalctl -fu hal0-apiUninstall
Section titled “Uninstall”The CLI wraps installer/uninstall.sh:
hal0 uninstall # conservative: keep /etc/hal0 + models/registryhal0 uninstall --purge # clean slate: also wipe config, data, user, imagesThe conservative default stops services and removes code, units,
venvs, binaries, and every hal0 podman container, but keeps /etc/hal0
(config) and the data directory (models, registry, OpenWebUI state) so a
re-install reuses them. --keep-data is a legacy alias for this same
default — it’s kept for back-compat, not because the default changed.
--purge (alias --clean-slate) additionally removes the config and
data directories, the hal0 system user and group, and all hal0/toolbox
podman images. It prompts for a typed DELETE confirmation unless you pass
--force (or set HAL0_FORCE=1).
Next steps
Section titled “Next steps”First-run setup already seeded a hardware-recommended slot and profile during install. From here:
- Run the interactive
hal0 setupTUI to pick real models and extensions — see First-run setup. - Pull a model and assign it to a slot — see Load your first model.
- Open the dashboard at
http://<host>:8080/to manage slots, profiles, and stacks.