# Roadmap This roadmap mirrors the phase plan in [ARCHITECTURE.md](ARCHITECTURE.md#20-phasenplan). It will be kept in sync as scope shifts; treat ARCHITECTURE.md as the source of truth for *why*, and this file as the tracking view for *what/when*. ## Phase 1 — MVP (CLI core) - [x] Repository scaffolding - [x] Reproducible build system: `versions.env` pins, per-package `SlackBuild` scripts, `scripts/build-packages.sh` orchestrator, `scripts/checksums.sh`, `scripts/release.sh`, `scripts/update-versions.sh`, GitHub Actions (`build-packages.yml`, `release.yml`, `lint.yml`) — builds podman, conmon, crun, netavark, aardvark-dns, passt, fuse-overlayfs, and the plugin's own `unraid-podman` scaffolding package. Not yet run end-to-end in a real Slackware environment (see note below). - [x] `podman.plg` install/update/remove manifest — validated well-formed (including full DTD entity expansion inside INLINE script blocks) and release-round-tripped against `scripts/release.sh` with synthetic build artifacts; not yet installed on a real Unraid system. - [x] `rc.podman` init script (start/stop/restart/status) - [x] Storage on cache pool (`podman.img`, XFS ftype=1, overlay driver) — `podman-storage.sh` - [x] Config sync (`/boot/config/plugins/podman/` ↔ `/etc/containers/`) — `podman-config.sh` (seed/sync logic sandbox-tested) - [x] Autostart flat-file mechanism — `podman-autostart.sh`, including per-container Safe-Mode after repeated failures (parsing logic unit-tested) - [x] Preflight checks & error handling (storage mount, disk space, kernel reqs) — `podman-preflight.sh` - [x] Basic logging — `podman_log`/`podman_log_error` in `podman-common.sh`; log rotation still open (cron-based, see ARCHITECTURE.md section 15) - [x] Package + config rollback (backup previous `.txz` / config snapshots) — `podman-backup.sh`; plus `podman-verify-packages.sh` and `podman-update-packages.sh` for integrity checking and reconciliation - [x] Official Unraid array-event hooks (`event/disks_mounted`, `event/stopping`) instead of editing `/boot/config/go` — verified against real-world plugin source (`unassigned.devices`) - [ ] Real-world install/uninstall/update test on an actual (or virtualized) Unraid system — everything above has been syntax-checked, unit-tested in isolation, and XML-validated, but not run against real Unraid/ Podman/Slackware yet ## Phase 2 — WebUI & network management Built ahead of the original phase order (see [webui/README.md](../webui/README.md) and the mockup at `webui/mockups/prototype.html`, which was reviewed before implementation started) — PHP/JS/AJAX, talking to `podman system service` exclusively via `PodmanClient` (two documented, deliberate exceptions: the Terminal panel's one-shot exec model, and the Compose panel's use of the `podman compose` CLI, since libpod has no REST endpoint for either true PTY sessions or Compose — see those ajax/*.php files' header comments). - [x] WebUI stage 1: read-only overview (Dashboard), start/stop/restart/remove for Containers/Pods, backend logic unit- and integration-tested against a fake podman.sock server (real Unix socket, real cURL transport) - [x] Images, Volumes, Networks panels (list + create/remove/pull) — not part of the original "stage 2/3" split, built alongside stage 1 since the backend pattern (PodmanClient + one ajax/*.php file) is identical - [x] Autostart management in GUI (Settings panel — reorder/remove, writes the same `/boot/config/plugins/podman/autostart` file `podman-autostart.sh` reads) - [x] Log viewer (Logs panel, polling-based "Follow") - [x] Terminal panel — one-shot exec, not a true interactive PTY (see `ajax/exec.php`); a real PTY would need a WebSocket bridge, tracked as a follow-up, not implemented as a shell-out workaround - [x] Compose panel — project list + YAML view + up/down/pull via the `podman compose` CLI (the one deliberate CLI exception, see `ajax/compose.php`) - [ ] Container **creation** forms — the Containers panel manages the lifecycle of existing containers only; there is no "new container" form yet (the mockup shows one; the real implementation doesn't wire it up) - [ ] Custom network / macvlan creation UI beyond the basic name+subnet form already in the Networks panel - [ ] Real interactive PTY terminal (WebSocket bridge) - [ ] Storage snapshot feature (reflink-based, BTRFS/ZFS cache pools) - [ ] Run against a real Unraid + Podman install — the backend has been tested against a hand-written fake podman.sock server (verifying the transport layer, JSON shaping, and error handling genuinely work), not against real libpod ## Phase 3 — Rootless & Docker-optional - [ ] Rootless Podman option - [ ] Docker enable/disable switch - [ ] Community Applications template compatibility layer ## Phase 4 — Pods - [ ] Pod support (Quadlet-equivalent without systemd — approach TBD, see ARCHITECTURE.md open question) ## Open questions blocking later phases See [ARCHITECTURE.md, section 21](ARCHITECTURE.md#21-offene-fragen--risiken) for the current list (Podman version/update cadence, cache-pool requirement, service vs. on-demand start, iptables locking with Docker, release signing).