Fastest path
git clone <repo> && cd capsem
./bootstrap.sh # interactive, prompts [Y/n] before each install
./bootstrap.sh --yes # non-interactive (CI / unattended setup)
just exec "echo hello" # verify VM boots (build-assets runs as part of bootstrap)
bootstrap.sh is the deliberately public repo-root bootstrap entrypoint.
What bootstrap.sh does
Three phases. Default answer at every prompt is Yes — press Enter to install, type n to skip.
- Hard prereqs (you must have):
bash,git,curl. Auto-installed:rustup(sh.rustup.rs),just(just.systems →~/.local/bin). - Dependencies: on Linux, distro-native build/Tauri packages,
cpio, verified Node 24, pnpm 10, Docker + Buildx, Bubblewrap, and immediate Docker/KVM access; on macOS,flock,colima+docker+docker-buildx, Tart, and sshpass through Homebrew. Both platforms installuv, locked Python/frontend dependencies, and then prove the runtime. - Doctor
--fix(build_system/scripts/doctor/doctor-common.sh --fix): installs Rust targets and the exact config-owned Cargo tools (cargo-nextest,cargo-llvm-cov,cargo-audit,b3sum,cargo-tauri, andcargo-sbom); builds VM assets and packs the initrd.
The VM asset rail materializes its digest-pinned OBOM tools inside its own architecture-matched helper; do not install a parallel global cdxgen.
--yes flag and non-tty input both auto-accept every prompt.
After bootstrap
All just recipes (run, test, dev, etc.) check for .dev-setup and auto-run doctor if missing. You can't accidentally skip setup.
Full documentation
- Detailed setup + troubleshooting: Development Guide or
/dev-setupskill - Just recipe reference:
/dev-just - Testing workflow:
/dev-testing
Container runtime
Docker (via Colima on macOS) with 12GB+ RAM (16GB recommended -- the Tauri install-test build OOMs below 12GB). On Linux, bootstrap installs and starts native Docker, repairs current-session Docker/KVM access, and verifies the Bubblewrap host-gate boundary. See /dev-setup for configuration.