Next (Unreleased)
Changes below are merged on
mainand will be included in the upcoming release.
-
🚀 [STORE] Migrate persistence layer from LokiJS to SQL (SQLite) with Drizzle ORM, automatic schema migrations, and transparent legacy data migration
-
🚀 [AUTH] Add Role-Based Access Control (RBAC) with 3 roles: Administrator (
admin), Read/Write (rw), and Read-Only (ro) -
🚀 [AUTH] Add Database-backed User Management in Web UI (Configuration > Users) with role management and secure password resets
-
🚀 [AUTH] Add Personal API Tokens with granular scopes (
read,write) and optional expiration dates for programmatic REST API access -
🚀 [OIDC] Add automatic user onboarding and role synchronization from Identity Provider group claims (
admingroup,rwgroup,groupsclaim) -
🚀 [PROFILE] Add User Profile page with theme preference synchronization (dark/light) across sessions, password change, and API token management
-
🚀 [LOG] Migrate logger from unmaintained Bunyan to Pino with Pino-pretty formatting
-
🚀 [UI] Add live logs viewer via Server-Sent Events (SSE)
-
🚀 [DOCS] Add interactive UI live demo simulator with homelab mock data
-
🚀 [TESTS] Add end-to-end Cucumber API scenarios and Playwright UI tests covering user management, personal API tokens, and full RBAC enforcement
-
🚀 [CI] Add automated UI screenshot capture pipeline with Playwright and dark mode support
-
🚀 [UI] Add demo mode with mock services for static deployment
-
🚀 [REGISTRY] Enable anonymous access by default for Gitlab public registry
-
🚀 [API] Refactor REST API to a Design-First architecture:
- Establish
openapi.yamlas the authoritative single source of truth for the entire API contract - Standardize API error payload format (
{ error, message }) across all endpoints
- Establish
-
🚀 [DOCS] Integrate interactive OpenAPI API Reference in Docusaurus with "Try it out" explorer, request/response schema inspector, and code samples
-
🚀 [REGISTRY] Support direct bearer-token authentication for custom registries
-
🔧 [DOCS] Refresh OpenID Connect (OIDC) and container registry documentation with modern Vue 3 UI screenshots and fix relative asset paths
-
⚠️ [AUTH] Anonymous authentication removed: WUD now enforces mandatory authentication. At least one administrator account must be provisioned (via
WUD_AUTH_ADMIN_USER/WUD_AUTH_ADMIN_PASSWORD, legacyWUD_AUTH_BASIC_*, or an OIDC provider with an admin group). WUD will fail-fast on startup if no administrator is available. -
⚠️ [AUTH] Deprecate static Basic Authentication environment variables (
WUD_AUTH_BASIC_*): Administrators should be bootstrapped viaWUD_AUTH_ADMIN_USER/WUD_AUTH_ADMIN_PASSWORD(or via OIDC admin groups), and local users should be managed dynamically via the Web UI (Configuration > Users). -
⚠️ [API] Standardize REST API contract and error responses:
- Structured Error Payloads: All error responses now consistently return
{ "error": "<ErrorType>", "message": "<Details>" }. Custom scripts or integrations parsing legacy flat error strings (e.g.{ "error": "Error description..." }) need to be updated to readmessage. - OpenAPI Schema Alignment: Endpoints and payloads are now strictly aligned with the OpenAPI specification (
/api/openapi.yaml). - Authentication: External REST API requests now use standard HTTP Basic Authentication (
basicAuth). Direct cookie-based session authentication is no longer exposed as an external API authentication scheme.
- Structured Error Payloads: All error responses now consistently return
-
🐛 [WATCHER] Fix docker watcher crashing on startup when
watchdigestdefaultis configured by restoring the property and passing it to registries (fixes #1150) -
🐛 [REGISTRY] Fix Gitlab registry provider ignoring configuration defaults (fixes Gitlab registry integration)
-
🐛 [WATCHER] Fix docker watcher ignoring container labels when registry provider is unknown (fixes #1124)
-
🐛 [WATCHER] Fix tag listing exclusion for non-semver tags breaking digest updates when
wud.tag.includeis used (fixes #1164) -
🐛 [WATCHER] Fix WUD_WATCHER_LOCAL_WATCHATSTART=false being ignored on empty store (fixes #1184)
-
🐛 [TAG] Fix tag comparison when coerced semver versions are equal by falling back to string comparison (fixes #1183)
-
🐛 [UI] Fix group by label in containers table (fixes #1182)