Architecture
Status: outline. The full design documents live in the repository; this page is the summary that belongs in public documentation.
ProxDock is one static Go binary with the web UI embedded. It drives system
tools rather than reimplementing them: docker compose for containers, ZFS for
storage, skopeo for image digests, lego for ACME.
The pieces
| Area | Responsibility |
|---|---|
| Store | Cluster state in SQLite, replicated by Raft, with append-only schema migrations |
| Compose | The transformation engine: preview diff, refusals, self-reference variables |
| App lifecycle | Create, update, edit, delete, and adoption of an existing dataset |
| Backup | Snapshot, send, verify, receive, re-point |
| Migrate | Node-to-node handoff: preflight, pre-seed, cutover, rollback |
| Netgroup | Network zones: MAC derivation, address allocation, NIC detection |
| PKI | The cluster CA and each node's mTLS identity |
| Server | The HTTPS API, request routing, and the embedded UI |
Two principles worth stating
Nothing is written before it is shown. The transformation preview is not a convenience feature layered on top; it is the only way an application is created. There is no path that applies a Compose file without producing the diff first.
The recovery path is the working path. Migration reuses backup and restore rather than having its own faster route, so the code that gets your data back runs constantly instead of sitting untested.
Where decisions are made
To be written: the split between what the leader decides, what a node decides for itself, and what is refused at the edge before either gets involved.