Repository navigation
Technology Stack
Krasnikov Maksim edited this page Oct 22, 2026
·
6 revisions
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 |
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.
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
Maurice PaaS · Apache 2.0 · Repository · Task board