Skip to content

Releases: uniskela/UniHomelabDash

UniHomelabDash v0.9.0

Choose a tag to compare

@uniskela uniskela released this 11 Aug 12:53
f48ee81

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.0
  • docker pull ghcr.io/uniskela/unihomelabdash:0.9.0
  • docker pull uniskela/unihomelabdash:v0.9.0
  • docker pull uniskela/unihomelabdash:0.9.0

What's Changed

  • feat: Container Control Centre (v0.9.0) by @uniskela in #16

Full Changelog: v0.7.0...v0.9.0

v0.7.0

Choose a tag to compare

@uniskela uniskela released this 10 Aug 06:42

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.0
  • docker pull ghcr.io/uniskela/unihomelabdash:0.7.0
  • docker pull uniskela/unihomelabdash:v0.7.0
  • docker pull uniskela/unihomelabdash:0.7.0

Full Changelog: v0.6.2...v0.7.0

v0.6.2

Choose a tag to compare

@uniskela uniskela released this 30 Jul 14:08

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 settings table under container_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

Choose a tag to compare

@uniskela uniskela released this 30 Jul 13:32

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 (see SECURITY.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

Choose a tag to compare

@uniskela uniskela released this 30 Jul 12:05

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.ts routing and explicit page-level requireAuth checks.
  • 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 lint
  • npm run typecheck
  • npm test
  • npm run build

What's Changed

  • feat: add read-only Portainer integration (v0.6.0) by @uniskela in #7

Full Changelog: v0.5.0...v0.6.0

v0.5.0

Choose a tag to compare

@uniskela uniskela released this 26 Jun 10:59

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

Choose a tag to compare

@uniskela uniskela released this 17 Jun 05:33

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]/actions for 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.0

Existing 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.4.0

v0.3.0

Choose a tag to compare

@uniskela uniskela released this 17 Jun 05:32

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.yml to docker-compose.override.yml to 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.0

Existing SQLite service data is preserved. A new providers table is created automatically on startup.

CI

  • Fixed invalid GitHub Actions workflow: permissions moved to workflow root in .github/workflows/ci.yml

Full changelog

v0.2.1...v0.3.0

v0.2.1

Choose a tag to compare

@uniskela uniskela released this 17 Jun 02:48

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.0 URLs (ERR_ADDRESS_INVALID in 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 --confirm

Local SQLite

npm run reset-admin -- --username admin --confirm

Upgrade

Pull the new image and restart:

docker pull ghcr.io/uniskela/unihomelabdash:v0.2.1
# or
docker pull uniskela/unihomelabdash:v0.2.1

Existing SQLite data in your mounted volume is preserved; no migration required.

Full changelog

v0.2.0...v0.2.1

v0.2.0

Choose a tag to compare

@uniskela uniskela released this 14 Jun 05:56

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 /setup to create the admin account
  • /login and logout from Settings
  • Middleware protection for dashboard routes
  • SQLite migrations (drizzle/) with startup migrator
  • settings and users tables
  • Safer auth redirects and session handling behind reverse proxies
  • PWA offline cache updated for authenticated deployments

Breaking changes

  • SESSION_SECRET is required in production containers
  • On first visit after upgrade, complete /setup to create the admin account
  • Unauthenticated access to /, /services, and /settings is blocked

Upgrade from v0.1.0

  1. Add SESSION_SECRET to your .env (generate with openssl rand -base64 32)
  2. Rebuild/restart: docker compose up --build -d
  3. Visit the app and complete /setup (existing services in the SQLite volume are preserved)
  4. Behind HTTPS reverse proxy: set COOKIE_SECURE=true and PUBLIC_URL to your public origin

See README.md and SECURITY.md.

Container images

GHCR

docker pull ghcr.io/uniskela/unihomelabdash:v0.2.0

Docker Hub

docker  pull  uniskela/unihomelabdash:v0.2.0

Tags 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.0

Still 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