Spec-level (feature) comparison. Deliberately not implementation-level — no language, runtime, supervision, or transport is chosen yet. Rows that were purely about how (message bus, process supervision, bundled engine) have been removed and folded into the behaviour they deliver.
Legend: ✅ in scope · ❌ out of scope · 🔶 in scope but diverges from casa-img
| # | Feature | casa-img | Maison | Notes |
|---|---|---|---|---|
| Dashboard / home | ||||
| 1 | App grid home screen | ✅ | ✅ | The core of Maison |
| 2 | App tiles with burger menu (open, restart, stop, start, uninstall…) | ✅ | ✅ | Same options as CasaOS |
| 3 | Drag-to-reorder tiles | ✅ | ✅ | |
| 4 | Add external link (bookmark tile) | ✅ | ✅ | |
| 5 | Promo / onboarding cards | ✅ | ❌ | Dropped |
| 6 | Global search bar | ✅ | ❌ | Dropped |
| Apps — model | ||||
| 7 | An "app" = a multi-service Docker Compose stack | ✅ | ✅ | Full compose stacks, same as CasaOS |
| 8 | Same on-disk app file structure as CasaOS | ✅ | ✅ | App data / compose layout matches CasaOS |
| 9 | Store apps: compose copied as-is and brought up | ✅ | ✅ | Maison does not rewrite the store's yml |
| 10 | Unmanaged-app discovery: detect an external Compose stack carrying x-casaos and show it as an app tile |
🔶 | ✅ | Not store-linked = "unmanaged app". Replaces the manual "install customized app" form |
| 11 | Manual "Install a customized app" form | ✅ | ❌ | Replaced by #10 (auto-discovery) |
| App configuration (per-app settings) | ||||
| 12 | App settings/config window (ports, env, volumes…) | ✅ | 🔶 | Diverges: Maison keeps a CasaOS-style config window, but writes a separate override compose file instead of editing the original yml |
| 13 | Restart / stop / start / uninstall controls | ✅ | ✅ | Via the burger menu (#2) |
| 14 | Live per-app logs | ✅ | ✅ | |
| 15 | Live per-container stats | ✅ | ✅ | |
| 16 | Real-time app status updates on the dashboard | ✅ | ✅ | Live updates in scope; transport intentionally unspecified |
| App Store | ||||
| 17 | CasaOS App Store UI (browse, category, featured, detail) | ✅ | ✅ | 100% CasaOS-compliant |
| 18 | CasaOS-compliant store format (x-casaos metadata) |
✅ | ✅ | Unchanged format |
| 19 | Multi-store support | ✅ | ✅ | In scope |
| 20 | Install from store | ✅ | ✅ | |
| 21 | Automated app updates | ✅ | ✅ | In scope |
| Backups | ||||
| 21a | Archive an app's data + config on uninstall (never delete) | ❌ | ✅ | casa-img deletes the compose dir on uninstall; Maison archives the whole folder into .backups/<app>/ |
| 21b | On-demand backup of an installed app | ❌ | ✅ | No casa-img equivalent. Two-pass copy (live → stop → delta → start → zip) so downtime is seconds, not minutes. See docs/lifecycle.md |
| 21c | List / restore / delete backups, per app and box-wide | ❌ | ✅ | App Settings → Backups, plus Settings → Backups for archives of apps that no longer exist |
| 21d | Scheduled or automated backups, retention policy | ❌ | ❌ | Manual only for now |
| 21e | Offsite / second-disk backup targets | ❌ | ❌ | Backups sit on the data disk: rollback, not disaster recovery |
| Widgets | ||||
| 22 | Clock / date widget | ✅ | ✅ | |
| 23 | System status widget (CPU %, temp, RAM) | ✅ | ✅ | |
| 24 | Storage widget (health, used/total) | ✅ | ✅ | Read-only stats, not a disk manager |
| 25 | Widget settings (toggle widgets) | ✅ | ✅ | |
| Global settings & platform | ||||
| 26 | Configurable background / wallpaper | ✅ | ✅ | In scope |
| 27 | Light / dark theme | ✅ | ✅ | Part of UX parity |
| 28 | i18n / multi-language | ✅ | ✅ | In scope |
| 29 | Single dashboard container + host Docker socket | ✅ | ✅ | Same deployment model |
| Out of scope (dropped from casa-img) | ||||
| 30 | Authentication / login / users | ✅ | ❌ | Trusted-network boundary instead |
| 31 | File manager / Files app | ✅ | ❌ | Dashboard-only |
| 32 | Multi-user / RBAC | ✅ | ❌ | |
| 33 | Terminal / SSH | ✅ | ❌ | |
| 34 | Disk / RAID management | ✅ | ❌ | |
| 35 | Network shares (Samba/SMB), rclone remotes, ntfs tools | ✅ | ❌ |
- App config → override file (#12). Maison never mutates the compose file it got from the store. User edits in the settings window are written to a separate override compose file that is layered on top, so the original stays pristine and updates stay clean.
- Unmanaged apps (#10, #11). No manual custom-install form. Instead Maison watches
Docker: any Compose stack that carries
x-casaosmetadata — even one it didn't install — surfaces as an app tile, marked as unmanaged (not tied to a store entry). - Backups (#21a–c) are an addition, not parity. casa-img has no backup feature at
all — its only "backups" are a
.bakof the compose file during an update and log rotation. Maison's flat app model is what makes this cheap: the folder is the app, so one archive holds the compose, the override, the.envand the data, and restores into a working app on its own.