First-run bootstrap for local mode (admin #1 / setup experience) #51

Closed
opened 2026-07-29 02:12:09 +00:00 by Cordy · 1 comment
Owner

Long-term onboarding answer for deployments without an IdP (local auth mode, tiny installs) — the lane where auth.adminGroups (IdP-managed admin) can't help.

Direction (Portainer/Immich/Grafana pattern): on first start with no users configured, print a one-time setup URL/token to the logs (never "first user to race wins" on a network-reachable instance); the setup page creates the first account and marks it admin. After that, day-to-day admin management belongs to the settings surface (see the settings-store issue).

Scope this with the broader "first five minutes" polish pass before public launch (v0.4 "commercial-ready" / GitHub mirror going public) — install experience, sensible defaults, docs. Not urgent for the dogfood: OIDC deployments get admin-by-group instead.

Long-term onboarding answer for deployments **without** an IdP (local auth mode, tiny installs) — the lane where `auth.adminGroups` (IdP-managed admin) can't help. Direction (Portainer/Immich/Grafana pattern): on first start with no users configured, print a one-time setup URL/token to the logs (never "first user to race wins" on a network-reachable instance); the setup page creates the first account and marks it admin. After that, day-to-day admin management belongs to the settings surface (see the settings-store issue). Scope this with the broader "first five minutes" polish pass before public launch (v0.4 "commercial-ready" / GitHub mirror going public) — install experience, sensible defaults, docs. Not urgent for the dogfood: OIDC deployments get admin-by-group instead.
Author
Owner

Shipped in v0.3.11 (PR #56). Local mode with no configured users and an empty local-users store now prints a one-time setup token to the logs and serves a branded /setup page that creates the first admin (persisted to auth.localUsersPath, flagged admin, logged straight in). Token never exposed over HTTP; setup closes permanently after the first user. OIDC/LDAP deployments use auth.adminGroups and are unaffected.

Shipped in **v0.3.11** (PR #56). Local mode with no configured users and an empty local-users store now prints a one-time setup token to the logs and serves a branded `/setup` page that creates the first admin (persisted to `auth.localUsersPath`, flagged admin, logged straight in). Token never exposed over HTTP; setup closes permanently after the first user. OIDC/LDAP deployments use `auth.adminGroups` and are unaffected.
Cordy closed this issue 2026-07-29 04:54:57 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#51
No description provided.