Skip to content

Technology Stack

Krasnikov Maksim edited this page Oct 22, 2026 · 6 revisions

Technology stack

Decided choices link to their architecture decision record (ADR).

Layer Choice Why
Host OS Fedora Server for development and Alpha; Debian 13 as second target; production host moves to the Fedora family (Fedora Server or AlmaLinux 10) at MVP. SELinux enforcing is assumed. Freshest Podman and Quadlet, native support. ADR-003
Runtime Podman 5.x, crun, netavark, aardvark-dns Rootless, DNS by name, fast start
Orchestration systemd --user + Quadlet Restarts, dependencies, auto-update with rollback
Control plane and agent Rust: tokio, axum, zbus for systemd D-Bus, Podman REST client generated from its OpenAPI spec, sqlx. One binary, static musl build. Type-enforced plan/apply, memory safety in the root agent. ADR-001, ADR-002
Panel database PostgreSQL from the first commit, versioned migrations Accounts, roles and audit land right after the data layer. ADR-004
API ConnectRPC over a Protobuf schema in proto/; Rust server, TypeScript clients One schema for UI, CLI, MCP and bots; browser-friendly, gRPC-compatible. ADR-005
UI SolidJS SPA built with Vite, embedded in the binary; own component kit in packages/ui on Kobalte primitives No Node runtime on the host; kit to be published separately later. ADR-006
Proxy Caddy (admin API), optional HAProxy Auto TLS, on-demand TLS, hot config
Registry zot or distribution Light local OCI registry
Cache (catalogue) Dragonfly by default, Valkey as an option Dragonfly uses all cores on big hosts; Valkey for exact Redis compatibility
Backups restic + rclone, pg_dump, clickhouse-backup Dedup, encryption, any S3
Logs journald Rotation and rate limiting out of the box
Events In-process from podman events and the journal; NATS considered at Beta when external consumers appear No bus needed on one host at Alpha
AI Vercel AI SDK or LiteLLM; MCP server Any provider by key, single access path for clients
Dev environment toolbx / distrobox, tmux or zellij, SSH Mutable container with shared home, persistent sessions

Starter set and small hosts

The panel must run on a small VPS (1 vCPU, 1 GB) as well as on bare metal. The starter set is therefore the panel, PostgreSQL and Caddy. Registry, Dragonfly, VictoriaMetrics, VictoriaLogs and the rest are catalogue services the user adds when needed.

Repository layout

crates/        Rust workspace: control plane, agent, quadlet generator, validator, CLI
proto/         ConnectRPC schema, source of truth for the API
packages/ui    Solid component kit (to be extracted later)
packages/web   Panel SPA
docs/          ADRs and working notes (Obsidian vault)

CLI: one binary, three entry points as safety tiers. marik for read and reversible actions, maurice for everything with confirmation on destructive actions, maurice-odyssey-stella for forced scripted recovery behind an extra guard. The server unit is maurice.service; the project's full name is Maurice Odyssey Stella. ADR-007

Clone this wiki locally