i99dash docs
Themes

Themes

What the themes marketplace is, how it relates to mini-apps, and the in-app theming model the car applies.

A theme restyles the i99dash head-unit: colors, wallpapers, corner radii, and typography. Unlike a mini-app, a theme runs no code — it is a single ThemeSpec JSON document the car reads and maps onto its own ThemeData. Users browse, install, and switch themes from Settings → Appearance → Themes.

Themes reuse the mini-app catalog machinery wholesale: the same publish CLI shape, the same .i99theme bundle packer, the same requires/evaluateCompatibility compatibility gate, and the same versioned-CDN distribution. If you have shipped a mini-app, the theme flow will feel identical — i99dash theme <init|validate|build|publish>.

Themes vs mini-apps

Mini-appTheme
What it isA sandboxed web bundle (HTML/JS/CSS)A ThemeSpec JSON design-token document
Runs codeYes (in a web view)No — the car paints from the spec
Manifest field that drives iturl (the WebView origin)spec (inline design tokens)
Permissions / driving surfacepermissions, safeWhileDrivingNone — a theme only paints
Bundle.tar.gz of static files.i99theme (tar.gz of theme.json + assets)
CLI groupi99dash <init|build|validate|publish>i99dash theme <init|build|validate|publish>
CatalogGET /api/v1/mini-appsGET /api/v1/themes

A theme has no host privilege. It is not an Android RRO overlay and it does not touch the system; it only changes how the i99dash app draws its own surfaces.

The theming model

A theme is the inline spec object inside a ThemeManifest. The car's AppTheme.fromSpec() reads it and builds a Flutter ThemeData:

  • The 8 surface colors map 1:1 onto the car's internal palette (background through onSurfaceVariant).
  • accent / secondary / error map onto the Material ColorScheme.
  • Optional wallpaper, typography, shape, and gauge blocks layer on top; omit any of them to keep today's look.

brightness ("light" or "dark") selects the base. The feature ships inert: with no theme selected the car renders exactly its built-in default, because that default is itself expressed as a built-in spec. See the full token tables in the ThemeSpec reference.

Where users pick themes

Themes install from the catalog and apply instantly — no reboot. The car persists the active theme's id locally; switching to another theme or back to the built-in default is a one-tap change under Settings → Appearance → Themes. Because id is what the car stores, it is immutable post-publish — bump version to ship an update, never rotate id.

Start here

On this page