Skip to content

Technology Stack

Krasnikov Maksim edited this page Nov 3, 2026 · 6 revisions

Technology stack

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

Layer Choice Why
Host OS Ubuntu 26.04 LTS (Podman 5.7) for development, CI and production; Fedora Server and Debian 13 as secondary targets. Generation stays SELinux-aware (:Z always). Newest Podman among the LTS options and an in-place upgrade for the current server. ADR-008, supersedes 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
Edge Caddy in two tiers, both driven through the admin API: a rootful host edge for TLS and domains, a rootless workspace edge per environment for routes, expose, blue-green and canary. Optional HAProxy on L4. Public tier stays small; version switches never leave the workspace. ADR-009, ADR-010
Auth Local accounts with argon2id, server-side sessions, scoped API tokens, roles, audit log Offline-capable; OIDC added later as a second login. ADR-011
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-odysseus-stella for forced scripted recovery behind an extra guard. The server unit is maurice.service; the project's full name is Maurice Odysseus Stella. ADR-007

Clone this wiki locally