Appearance
7. Deployment View
Soma is deployed as a desktop application (for end users) plus optional server daemons (for connectivity, onboarding, and availability).
Desktop deployment
- Soma is packaged as an Electron app (
desktop/soma). The@soma/nodenapi addon — a cdylib that links thesoma-daemonandsoma-agentdlibrary crates — is unpacked next to the app and loaded by the Electron main process at startup. - There is no separate daemon process and no Unix-socket IPC; daemon operations are plain Rust calls inside the Electron main process. The only inter-process boundary on the desktop side is the renderer ↔ main Electron IPC bridge.
- Tapia is shipped inside the Soma desktop app as the
/practiceroute — there is no separate Tapia Electron app.
Server deployment (typical)
All server peers are subcommands of the single somad binary:
somad relay: public-facing relay nodes for NAT traversal fallback.somad rendezvous: public-facing rendezvous server for discovery.somad bot: optional always-on bot (VDF role) for caching and join-decision automation.somad bff: optional HTTP service for LLM-backed features.somad all --config <file>: compose multiple modes inside one process via a TOML config.
Local development topologies
Host processes
- Run the desktop app directly:
just desktop-run-soma. The embedded daemon starts inside the Electron main process — no separate daemon to launch. - Optionally run server peers on the host:
just backend-run-bot/just backend-run-relay/just backend-run-rendezvous/just backend-run-bff(all dispatch to the singlesomadbinary).
Docker Compose
- Compose bundles live under
compose/and are aggregated bycompose.yml. - The root
justfilehasjust compose-up/just compose-logshelpers.
Kubernetes / Helm
- Helm charts and manifests live under
deploy/. - The
somadcontainer has health/metrics endpoints regardless of which subcommand it is run with.