mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 02:11:53 +00:00
2.0 KiB
2.0 KiB
Core — Rust Backend
The Rust backend daemon for StartOS.
Binaries
startbox— Main daemon (runs asstartd)start-cli— CLI interfacestart-container— Runs inside LXC containers; communicates with host and manages subcontainersregistrybox— Registry daemontunnelbox— VPN/tunnel daemon
Key Modules
src/context/— Context types (RpcContext, CliContext, InitContext, DiagnosticContext)src/service/— Service lifecycle management with actor pattern (service_actor.rs)src/db/model/— Patch-DB models (public.rssynced to frontend,private.rsbackend-only)src/net/— Networking (DNS, ACME, WiFi, Tor via Arti, WireGuard)src/s9pk/— S9PK package format (merkle archive)src/registry/— Package registry management
RPC Pattern
See rpc-toolkit.md for JSON-RPC handler patterns and configuration.
Patch-DB Patterns
Patch-DB provides diff-based state synchronization. Changes to db/model/public.rs automatically sync to the frontend.
Key patterns:
db.peek().await— Get a read-only snapshot of the database statedb.mutate(|db| { ... }).await— Apply mutations atomically, returnsMutateResult#[derive(HasModel)]— Derive macro for types stored in the database, generates typed accessors
Generated accessor types (from HasModel derive):
as_field()— Immutable reference:&Model<T>as_field_mut()— Mutable reference:&mut Model<T>into_field()— Owned value:Model<T>
Model<T> APIs (from db/prelude.rs):
.de()— Deserialize toT.ser(&value)— Serialize fromT.mutate(|v| ...)— Deserialize, mutate, reserialize- For maps:
.keys(),.as_idx(&key),.as_idx_mut(&key),.insert(),.remove(),.contains_key()
i18n
See i18n-patterns.md for internationalization key conventions and the t!() macro.
Rust Utilities & Patterns
See core-rust-patterns.md for common utilities (Invoke trait, Guard pattern, mount guards, Apply trait, etc.).