Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Configuration

The dashboard reads a single JSON file at /dashboard.config.json:

{
  "dataSource": {
    "mode": "kanidm",
    "apiBasePath": "",
    "openApiPath": "/docs/v1/openapi.json"
  },
  "siteName": "My Org",
  "logoUrl": "https://example.com/logo.svg",
  "loginMessage": "Sign in with your organisation account",
  "adminGroup": "idm_admins",
  "theme": {
    "mode": "system",
    "preset": "blue"
  }
}

Fields

FieldTypeDescription
dataSource.mode"kanidm" | "mock""kanidm" for real API, "mock" for demo data
dataSource.apiBasePathstringBase path for the Kanidm API (empty for same-origin)
dataSource.openApiPathstringPath to the Kanidm OpenAPI spec
siteNamestringSite title shown in the browser tab and login page
logoUrlstringFallback logo when native Kanidm domain branding is unavailable
loginMessagestringMessage displayed on the login page
adminGroupstringKanidm group whose members get admin console access
theme.mode"light" | "dark" | "system"Colour scheme mode
theme.presetstringColour preset name

Static vs. native branding

The dashboard has two branding layers:

  1. Static config (dashboard.config.json) — deploy-time settings: company name, fallback logo, login message, and theme. Update the file and restart.
  2. Native Kanidm — domain display name, domain image, and OAuth2 application icons are read from (and written to) Kanidm directly via the REST API. These take precedence over static config when available.

Demo mode

For development and demos without a Kanidm backend, use scripts/fixtures/dashboard.config.mock.json:

cp scripts/fixtures/dashboard.config.mock.json public/dashboard.config.json
vp dev

The mock data source pre-seeds people, groups, and applications so every page is explorable immediately.