# grafana/grafana-kiosk architecture

> Architecture diagram of the GitHub repository grafana/grafana-kiosk, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/grafana/grafana-kiosk
- Repository: https://github.com/grafana/grafana-kiosk

## Overview

Grafana Kiosk is a command-line application that configures a browser kiosk for Grafana dashboards or playlists. Its main workflow is to load settings, select a login method, automate authentication and navigation, then keep the display running with reload handling. The README also documents multi-monitor/window settings and optional LXDE setup. The entry point and several login implementations are sampled; links for other documented login methods reflect the package structure and documented capabilities, not inspected call sites.

Main entry points: [`pkg/cmd/grafana-kiosk/main.go`](https://github.com/grafana/grafana-kiosk/blob/main/pkg/cmd/grafana-kiosk/main.go) (CLI entry point), [`pkg/browser/browser.go`](https://github.com/grafana/grafana-kiosk/blob/main/pkg/browser/browser.go) (Browser interface), [`pkg/kiosk/login/shared/browser_events.go`](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/shared/browser_events.go) (Browser session helpers), [`pkg/kiosk/login/goauth/goauth.go`](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/goauth/goauth.go) (Generic OAuth login)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Startup and settings"]
  node_entrypoint["CLI entry point<br/>[main.go]"]
  node_settings["Configuration<br/>[config.go]"]
end

subgraph group_auth["Login methods"]
  node_anon["Anonymous login<br/>[anonymous.go]"]
  node_local["Local login<br/>[local.go]"]
  node_gcom["Grafana Cloud login<br/>[gcom.go]"]
  node_oauth["Generic OAuth login<br/>[goauth.go]"]
  node_idtoken["ID token login<br/>[idtoken.go]"]
  node_apikey["API key login<br/>[apikey.go]"]
  node_aws["AWS login<br/>[aws.go]"]
  node_azure["Azure AD login<br/>[azuread.go]"]
end

subgraph group_runtime["Browser runtime"]
  node_shared["Browser session helpers<br/>[browser_events.go]"]
  node_browserapi["Browser interface<br/>[browser.go]"]
  node_chromedp["Chrome automation<br/>[chromedp.go]"]
end

subgraph group_desktop["Desktop setup"]
  node_lxde["LXDE initialization<br/>[lxde.go]"]
end

node_operator(("Kiosk operator"))
node_chromium["Chromium browser"]
node_grafana["Grafana dashboards and playlists"]
node_identity["External identity providers"]
node_desktopos["Linux desktop"]

node_operator -->|"starts"| node_entrypoint
node_entrypoint -->|"loads settings"| node_settings
node_entrypoint -->|"dispatches login"| node_anon
node_entrypoint -->|"dispatches login"| node_local
node_entrypoint -->|"dispatches login"| node_gcom
node_entrypoint -->|"dispatches login"| node_oauth
node_entrypoint -->|"dispatches login"| node_idtoken
node_entrypoint -->|"dispatches login"| node_apikey
node_entrypoint -->|"dispatches login"| node_aws
node_entrypoint -->|"dispatches login"| node_azure
node_entrypoint -.->|"initializes optionally"| node_lxde
node_anon -->|"creates session"| node_shared
node_local -->|"creates session"| node_shared
node_gcom -->|"creates session"| node_shared
node_oauth -->|"creates session"| node_shared
node_idtoken -->|"creates session"| node_shared
node_apikey -->|"creates session"| node_shared
node_aws -->|"creates session"| node_shared
node_azure -->|"creates session"| node_shared
node_anon -->|"drives browser"| node_browserapi
node_local -->|"drives browser"| node_browserapi
node_gcom -->|"drives browser"| node_browserapi
node_oauth -->|"drives browser"| node_browserapi
node_idtoken -->|"drives browser"| node_browserapi
node_apikey -->|"drives browser"| node_browserapi
node_aws -->|"drives browser"| node_browserapi
node_azure -->|"drives browser"| node_browserapi
node_browserapi -->|"implemented by"| node_chromedp
node_chromedp -->|"automates"| node_chromium
node_chromium -->|"navigates to"| node_grafana
node_oauth -.->|"authenticates with"| node_identity
node_aws -.->|"authenticates with"| node_identity
node_azure -.->|"authenticates with"| node_identity
node_lxde -->|"configures"| node_desktopos

click node_entrypoint "https://github.com/grafana/grafana-kiosk/blob/main/pkg/cmd/grafana-kiosk/main.go"
click node_settings "https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/config/config.go"
click node_anon "https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/anonymous/anonymous.go"
click node_local "https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/local/local.go"
click node_gcom "https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/gcom/gcom.go"
click node_oauth "https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/goauth/goauth.go"
click node_idtoken "https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/idtoken/idtoken.go"
click node_apikey "https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/apikey/apikey.go"
click node_aws "https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/aws/aws.go"
click node_azure "https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/azuread/azuread.go"
click node_shared "https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/shared/browser_events.go"
click node_browserapi "https://github.com/grafana/grafana-kiosk/blob/main/pkg/browser/browser.go"
click node_chromedp "https://github.com/grafana/grafana-kiosk/blob/main/pkg/browser/chromedp.go"
click node_lxde "https://github.com/grafana/grafana-kiosk/blob/main/pkg/initialize/lxde.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_entrypoint,node_settings,node_chromium toneBlue
class node_anon,node_local,node_gcom,node_oauth,node_idtoken,node_apikey,node_aws,node_azure toneAmber
class node_shared,node_browserapi,node_chromedp toneMint
class node_lxde toneRose
class node_operator,node_grafana,node_identity,node_desktopos toneIndigo
```

## Components

### Startup and settings

- [CLI entry point](https://github.com/grafana/grafana-kiosk/blob/main/pkg/cmd/grafana-kiosk/main.go): `pkg/cmd/grafana-kiosk/main.go`
- [Configuration](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/config/config.go): `pkg/kiosk/config/config.go`

### Login methods

- [Anonymous login](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/anonymous/anonymous.go): `pkg/kiosk/login/anonymous/anonymous.go`
- [Local login](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/local/local.go): `pkg/kiosk/login/local/local.go`
- [Grafana Cloud login](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/gcom/gcom.go): `pkg/kiosk/login/gcom/gcom.go`
- [Generic OAuth login](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/goauth/goauth.go): `pkg/kiosk/login/goauth/goauth.go`
- [ID token login](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/idtoken/idtoken.go): `pkg/kiosk/login/idtoken/idtoken.go`
- [API key login](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/apikey/apikey.go): `pkg/kiosk/login/apikey/apikey.go`
- [AWS login](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/aws/aws.go): `pkg/kiosk/login/aws/aws.go`
- [Azure AD login](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/azuread/azuread.go): `pkg/kiosk/login/azuread/azuread.go`

### Browser runtime

- [Browser session helpers](https://github.com/grafana/grafana-kiosk/blob/main/pkg/kiosk/login/shared/browser_events.go): `pkg/kiosk/login/shared/browser_events.go`
- [Browser interface](https://github.com/grafana/grafana-kiosk/blob/main/pkg/browser/browser.go): `pkg/browser/browser.go`
- [Chrome automation](https://github.com/grafana/grafana-kiosk/blob/main/pkg/browser/chromedp.go): `pkg/browser/chromedp.go`

### Desktop setup

- [LXDE initialization](https://github.com/grafana/grafana-kiosk/blob/main/pkg/initialize/lxde.go): `pkg/initialize/lxde.go`

### Other components

- **Kiosk operator**
- **Chromium browser**
- **Grafana dashboards and playlists**
- **External identity providers**
- **Linux desktop**

## Connections

- Kiosk operator → CLI entry point: starts
- CLI entry point → Configuration: loads settings
- CLI entry point → Anonymous login: dispatches login
- CLI entry point → Local login: dispatches login
- CLI entry point → Grafana Cloud login: dispatches login
- CLI entry point → Generic OAuth login: dispatches login
- CLI entry point → ID token login: dispatches login
- CLI entry point → API key login: dispatches login
- CLI entry point → AWS login: dispatches login
- CLI entry point → Azure AD login: dispatches login
- CLI entry point → LXDE initialization: initializes optionally
- Anonymous login → Browser session helpers: creates session
- Local login → Browser session helpers: creates session
- Grafana Cloud login → Browser session helpers: creates session
- Generic OAuth login → Browser session helpers: creates session
- ID token login → Browser session helpers: creates session
- API key login → Browser session helpers: creates session
- AWS login → Browser session helpers: creates session
- Azure AD login → Browser session helpers: creates session
- Anonymous login → Browser interface: drives browser
- Local login → Browser interface: drives browser
- Grafana Cloud login → Browser interface: drives browser
- Generic OAuth login → Browser interface: drives browser
- ID token login → Browser interface: drives browser
- API key login → Browser interface: drives browser
- AWS login → Browser interface: drives browser
- Azure AD login → Browser interface: drives browser
- Browser interface → Chrome automation: implemented by
- Chrome automation → Chromium browser: automates
- Chromium browser → Grafana dashboards and playlists: navigates to
- Generic OAuth login → External identity providers: authenticates with
- AWS login → External identity providers: authenticates with
- Azure AD login → External identity providers: authenticates with
- LXDE initialization → Linux desktop: configures
