Releases: uniskela/UniHomelabDash
Release list
UniHomelabDash v0.9.0
Highlights
- Container Control Centre: Overview / Metrics / Logs drawer with inspect and live stats.
- Saved container views (versioned workspace) plus improved log reader.
- Opt-in Portainer container start/stop/restart with confirmation (provider, endpoint, state).
- Label value allowlist; inspect never exposes env, cmd, healthcheck output, or bind sources.
Upgrade notes
- Rebuild/restart as usual (
docker compose up --build -d). No schema migration or new environment variable is required. - Existing services, users, container preferences, and provider credentials are preserved. View prefs auto-upgrade to the versioned workspace.
- Portainer remains read-only until Allow container actions is enabled. Stack actions remain unavailable.
Verification
- npm run lint
- npm run typecheck
- npm test
- npm run build
- npm audit
Container images
docker pull ghcr.io/uniskela/unihomelabdash:v0.9.0docker pull ghcr.io/uniskela/unihomelabdash:0.9.0docker pull uniskela/unihomelabdash:v0.9.0docker pull uniskela/unihomelabdash:0.9.0
What's Changed
Full Changelog: v0.7.0...v0.9.0
v0.7.0
Highlights
- View read-only Portainer stacks across enabled integrations from the new Containers → Stacks screen.
- See active, inactive, unknown, and total lifecycle summaries with stack search, status filters, and endpoint filters.
- Keep healthy stack results visible when another Portainer integration fails; returned errors are redacted and cached briefly.
- Updated Next.js, React, SQLite, Radix, Tailwind, and development tooling within their existing major versions.
- Resolved all dependency advisories reported while preparing the release.
Upgrade notes
- Rebuild/restart as usual (
docker compose up --build -d). No schema migration required. - Existing services, users, container preferences, and provider credentials are preserved.
- Portainer remains read-only; stack actions and inferred container health are not part of this release.
Verification
- npm run lint
- npm run typecheck
- npm test
- npm run build
- npm audit
Container images
docker pull ghcr.io/uniskela/unihomelabdash:v0.7.0docker pull ghcr.io/uniskela/unihomelabdash:0.7.0docker pull uniskela/unihomelabdash:v0.7.0docker pull uniskela/unihomelabdash:0.7.0
Full Changelog: v0.6.2...v0.7.0
v0.6.2
Highlights
- Hide individual containers from the Containers page (persisted preferences).
- Choose layout separately: View as list / grid / tiles, and Grouped by none / host / status / provider.
- Prefixed search for precise queries (
host:,name:,image:,status:,port:,label:,provider:,id:), with negation and quoted values. - Dismissible Containers warning banner and readable Host dropdown options in dark mode.
Upgrade notes
- Rebuild/restart as usual (
docker compose up --build -d). No schema migration required. - View preferences are stored in the existing
settingstable undercontainer_view_prefs.
Verification
- npm run lint
- npm run typecheck
- npm test
- npm run build
Full Changelog: v0.6.1...v0.6.2
v0.6.1
Highlights
- Load Containers asynchronously so the page shell appears immediately.
- Bound Portainer container-list requests (5s default) and briefly skip recently failed endpoints.
- Cache aggregated container lists in-memory for 30s and parallelize provider instance fetches.
- Filter containers by host, running/stopped status, and free-text search.
Upgrade notes
- Rebuild/restart as usual (
docker compose up --build -d). No schema migration required. - Optional tunables:
UH_PORTAINER_LIST_TIMEOUT_MS,UH_PORTAINER_ENDPOINT_COOLDOWN_MS,UH_CONTAINER_LIST_CACHE_MS(seeSECURITY.md/.env.example).
Verification
- npm run lint
- npm run typecheck
- npm test
- npm run build
Full Changelog: v0.6.0...v0.6.1
v0.6.0
Highlights
- Added read-only Portainer integration with multi-instance Settings support.
- Connected via Portainer API tokens (
X-API-Key), with encrypted storage for the token and optional custom CA. - Aggregated Docker and Portainer containers on
/containers, including endpoint-aware status and logs. - Hardened authentication with Next.js
proxy.tsrouting and explicit page-levelrequireAuthchecks. - Upgraded Next.js and related dependencies; documented remaining nested upstream advisories in
SECURITY.md. - Improved provider resilience: request timeouts, partial-failure warnings, reverse-proxy path prefixes, and IPv6/host URL handling.
Upgrade notes
- Rebuild/restart as usual (
docker compose up --build -d). Existing SQLite data and Docker integrations are preserved. - Add Portainer under Settings → Integrations with a base URL and API access token, then use Test connection.
- Portainer remains read-only in this release (list + logs only; no start/stop/restart).
Verification
npm run lintnpm run typechecknpm testnpm run build
What's Changed
Full Changelog: v0.5.0...v0.6.0
v0.5.0
Highlights
- Added support for multiple Docker integrations in Settings.
- Aggregated containers across enabled Docker integrations.
- Added container log viewing with line-count and severity filters.
- Added a richer container details popup with optional labels visibility.
- Added an Add to dashboard flow from container details.
- Improved container health URL prefill by ignoring OCI package URLs, honoring explicit health labels, and inferring URLs from published ports where safe.
- Routed Docker logs and actions to the owning integration.
Verification
- npm run lint
- npm run typecheck
- npm test
- npm run build
Full Changelog: v0.4.0...v0.5.0
v0.4.0
v0.4.0
Docker actions and remote Engine API connections.
Features
- Container actions — start, stop, and restart with confirmation modals (opt-in via Settings)
- Connection modes — local unix socket, remote TCP (port 2375), or remote TLS (port 2376)
- TLS credentials — CA, client cert, and key stored encrypted (never in config JSON)
- Settings → Integrations: connection mode selector, host/port, TLS PEM fields, and Allow container actions toggle
POST /api/docker/containers/[id]/actionsfor authenticated container operations
Safety
- Container actions are disabled by default after upgrade from v0.3.x
- Confirmation dialogs show the exact container name before start/stop/restart
- Actions call Docker Engine POST endpoints only — no arbitrary shell commands
- See SECURITY.md for TCP/TLS and socket risks
Upgrade from v0.3.x
docker pull ghcr.io/uniskela/unihomelabdash:v0.4.0
# or
docker pull uniskela/unihomelabdash:v0.4.0Existing SQLite data and provider settings are preserved. Enable Allow container actions in Settings if you want start/stop/restart.
Full changelog
v0.3.0
v0.3.0
First control-plane milestone: provider system foundation and Docker read-only container status.
Features
- Provider system with typed capabilities, registry, and runtime error isolation
- Virtual manual provider adapter (existing services unchanged)
- Docker read-only container list via opt-in socket mount
- Settings → Integrations: enable, configure, and test Docker connection
- New Containers page with mobile-first detail sheet
- Encrypted credential storage helper for future API-token integrations
Operations
- Copy
docker-compose.override.example.ymltodocker-compose.override.ymlto mount/var/run/docker.sock:ro - Enable Docker in Settings → Integrations, then Test connection
- See SECURITY.md for Docker socket risks
Upgrade
Pull the new image and restart:
docker pull ghcr.io/uniskela/unihomelabdash:v0.3.0
# or
docker pull uniskela/unihomelabdash:v0.3.0Existing SQLite service data is preserved. A new providers table is created automatically on startup.
CI
- Fixed invalid GitHub Actions workflow:
permissionsmoved to workflow root in.github/workflows/ci.yml
Full changelog
v0.2.1
v0.2.1
Patch release fixing first-run setup on Docker/LAN installs, plus small operator and auth improvements.
Fixes
- First-run setup no longer redirects to invalid
0.0.0.0URLs (ERR_ADDRESS_INVALIDin the browser) - Post-setup and post-login navigation now uses a full page load so session cookies are applied before middleware runs
- Authenticated users leaving setup sync are sent to the dashboard instead of login
Operations
scripts/reset-admin.mjs— recover admin access when locked out (requires--confirm)- Change password — available in Settings while signed in (no SMTP / email reset in this release)
Recover admin password (Docker Compose)
RESET_ADMIN_PASSWORD='your-new-password' \
docker compose exec unihomelabdash \
node scripts/reset-admin.mjs --username admin --confirmLocal SQLite
npm run reset-admin -- --username admin --confirmUpgrade
Pull the new image and restart:
docker pull ghcr.io/uniskela/unihomelabdash:v0.2.1
# or
docker pull uniskela/unihomelabdash:v0.2.1Existing SQLite data in your mounted volume is preserved; no migration required.
Full changelog
v0.2.0
Summary
v0.2.0 adds single-admin authentication and a stronger database foundation on top of the v0.1.0 manual-services dashboard. The dashboard is no longer open by default — first-run setup creates the admin account, and all routes are protected by signed session cookies.
What's new
- First-run
/setupto create the admin account /loginand logout from Settings- Middleware protection for dashboard routes
- SQLite migrations (
drizzle/) with startup migrator settingsanduserstables- Safer auth redirects and session handling behind reverse proxies
- PWA offline cache updated for authenticated deployments
Breaking changes
SESSION_SECRETis required in production containers- On first visit after upgrade, complete
/setupto create the admin account - Unauthenticated access to
/,/services, and/settingsis blocked
Upgrade from v0.1.0
- Add
SESSION_SECRETto your.env(generate withopenssl rand -base64 32) - Rebuild/restart:
docker compose up --build -d - Visit the app and complete
/setup(existing services in the SQLite volume are preserved) - Behind HTTPS reverse proxy: set
COOKIE_SECURE=trueandPUBLIC_URLto your public origin
See README.md and SECURITY.md.
Container images
GHCR
docker pull ghcr.io/uniskela/unihomelabdash:v0.2.0Docker Hub
docker pull uniskela/unihomelabdash:v0.2.0Tags v0.2.0 and 0.2.0 point at the same image.
Quick run (generate a secret first or use --env-file .env):
docker run -d --name unihomelabdash \
-p 3000:3000 \
-e SESSION_SECRET="$(openssl rand -base64 32)" \
-v unihomelabdash-data:/app/data \
--restart unless-stopped \
ghcr.io/uniskela/unihomelabdash:v0.2.0Still in v0.1.0 scope
- Manual service bookmarks
- On-demand health checks
- Mobile-first PWA
- Docker Compose deployment (no Docker socket mount)
What's next
- Provider system foundation
- Docker/Portainer read-only status (behind auth)
- Multi-user / OIDC (later)
Full changelog: v0.1.0...v0.2.0