Skip to main content
Run the OSS appliance when you want one machine to own the API, local Supabase, Caddy/static console, and the local microVM runtime. This path is separate from hosted private beta and from the hosted fleet topology.

Support Matrix

Use one Ubuntu 22.04 or 24.04 x86_64 bare-metal host with KVM available; x86_64 is the only validated host class today (the installer also builds for aarch64, but that path is unvalidated). macOS and Windows are not supported hosts: Firecracker needs /dev/kvm, which a typical laptop — or a nested VM / WSL2 — does not provide. In the cloud, use a bare-metal instance (for example an AWS *.metal); standard VM instances do not expose KVM. Size the host with at least 8 vCPU, 32 GiB RAM, and 200 GiB free disk for basic smoke tests. 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. Unsupported in OSS v0:
  • multi-host scheduling, autoscaling, HA control planes, and hosted edge
  • apps/edge as 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:
It builds the checkout, installs local Supabase and appliance services, starts them, and runs doctor/status/smoke/launch-gate checks. See 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:
Keep /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:
Run a machine from Python:
Open the static console at:
Use the same API key from /etc/nullspace/operator-api-key on the console sign in page.

Preview URLs

Localhost/no-domain mode leaves NULLSPACE_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:
Owned-domain mode requires a DNS name you control, wildcard DNS pointing preview subdomains at the host, Caddy TLS for the apex/console hosts, and these server-side env values in /etc/nullspace/env:
After rerendering ingress with sudo nullspace-host install --repair-env --manifest /mnt/nullspace-release/manifest.json, SDK helpers return signed https://{PORT}-{MACHINE_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 the live machine smoke after doctor/status pass:
Before making public launch claims for a release, run the launch gate on a fresh supported host. Mutating install, restart, reboot, live upgrade, and failure-injection stages require the exact confirmation phrase run nullspace launch gate.
After the host returns from reboot, resume the same run:
For owned-domain evidence, use --mode owned-domain and --public-hostname nullspace.example.

Back Up, Restore, Upgrade, Roll Back

Create a protected appliance backup archive:
Rehearse restore safety before extracting:
Mutating restore requires:
Validate an upgrade manifest before switching releases:
Apply the upgrade, then run status and smoke:
If the recorded upgrade state supports returning to the previous release:
Database migrations are not automatically rolled back. Treat DB rollback as a manual operator boundary and restore from a verified backup when a migration must be reversed.

Troubleshooting

Uninstall

Remove installed surfaces while preserving appliance data:
Destroy config, data, Supabase state, and evidence only after taking and verifying a backup: