Support Matrix
Use one Ubuntu 22.04 or 24.04 x86_64 bare-metal host with KVM available. The host needs root or sudo access, Docker Engine with Compose v2, Caddy, and a reflink-capable XFS data filesystem mounted at/var/lib/nullspace/data.
Keep runtime state, template-control, snapshots, runtime artifact cache, and
active rootfs sources on that same filesystem.
| Surface | OSS v0 support |
|---|---|
| API/runtime ownership | One nullspace-api process in single_host mode |
| Durable state | Local self-hosted Supabase |
| Console | Static build served by Caddy at /console or console.<domain> |
| Preview ingress | API-compatible Caddy ingress |
| Operator tool | nullspace-host on the appliance host |
| Release source | Checksummed release manifest artifacts |
- multi-host scheduling, autoscaling, HA control planes, and hosted edge
apps/edgeas a required ingress component- managed custom preview domains
- self-hosted Supabase HA
- hibernate, resume, and fork launch claims until the runtime compatibility gates for snapshot and guest-agent upgrades are complete
Install From A Release Manifest
If you are installing from a source checkout, use the source installer:docs/product/single-host-setup.md in the source checkout for storage,
owned-domain, and rerun options.
For packaged releases, download or mount a release bundle that contains
manifest.json and the nullspace-host operator tool. Install the operator
tool first, then converge the appliance from the manifest:
install renders /etc/nullspace/env, generates local Supabase secrets,
renders the Supabase Compose and Caddy configs, applies migrations, seeds the
first DB-backed operator API key, fetches and verifies release artifacts, and
writes redacted evidence.
The first API key is written once on the host:
/etc/nullspace/operator-api-key, /etc/nullspace/env, and
/etc/nullspace/supabase.env root-readable only. Service-role keys stay on the
server and are not part of the static console build.
Enable services after the install has rendered configs and fetched artifacts:
Check The Host
Run non-mutating diagnostics first:doctor checks host, service, Supabase, artifacts, storage, network,
ingress, and Firecracker hardening facts. status reports service liveness,
API readiness/degraded state, worker status, runtime capacity, storage
pressure, and ingress state.
Collect bounded redacted logs when a check fails:
Connect With SDK Or CLI
The localhost/no-domain appliance serves API traffic through Caddy on the same origin as the console:/etc/nullspace/operator-api-key on the console sign
in page.
Preview URLs
Localhost/no-domain mode leavesNULLSPACE_PUBLIC_HOSTNAME unset. It is for
private operator-only use and does not issue signed public preview hostnames.
Use direct local mappings from the SDK or CLI:
/etc/nullspace/env:
sudo nullspace-host install --repair-env --manifest /mnt/nullspace-release/manifest.json,
SDK helpers return signed
https://{PORT}-{SANDBOX_ID}.nullspace.example/... and matching wss://
preview URLs through API-compatible ingress. Caddy obtains exact-host preview
certificates on demand after asking the loopback-only API TLS gate; a wildcard
certificate is not required for OSS single-host mode.
See Preview URLs and
WebSockets for client behavior.
Smoke And Launch Gate
Run the fast Caddy fixture smoke without creating a microVM:run nullspace launch gate.
--mode owned-domain and
--public-hostname nullspace.example.
Back Up, Restore, Upgrade, Roll Back
Create a protected appliance backup archive:Troubleshooting
| Symptom | What to check |
|---|---|
doctor reports KVM or CPU virtualization failures | Confirm the host is x86_64 bare metal with KVM enabled and that the service user can use /dev/kvm. |
| Storage falls back to byte copy | Put NULLSPACE_DATA_DIR, active rootfs sources, template-control, snapshots, and runtime artifact cache on the same reflink-capable XFS filesystem. |
| Console opens but API calls fail | Check sudo nullspace-host status --json, Caddy status, and that the console build uses VITE_NULLSPACE_API_BASE=same-origin for /console mode. |
| Localhost preview URL is missing signed URL fields | This is expected when NULLSPACE_PUBLIC_HOSTNAME is unset. Use direct get_host_info() mappings or configure owned-domain mode. |
| Owned-domain preview URLs are not issued | Confirm NULLSPACE_PUBLIC_HOSTNAME, NULLSPACE_EDGE_PUBLIC_BASE_URL, and NULLSPACE_EDGE_ACCESS_TOKEN_SIGNING_KEY are set, then rerender with sudo nullspace-host install --repair-env. |
| Backup warns about missing Supabase dump | Confirm Docker Compose v2 is installed and the local Supabase stack is running, or use the packaged Supabase volumes with the warning recorded in evidence. |