Skip to main content
Themes (/admin/themes) switches the public storefront between ready-made design packages under themes/<id>/.

Built-in packages

Prefer capabilities over hardcoding theme ids in custom code. Streamlix / StreamTube must not regress the Streamly path.

Apply vs Preview

Hard rule: live storefront look changes only when an operator clicks Apply (or edits Brand & Experience). Install/export never auto-apply.

Isolation rules

  • One route tree — do not fork /movies, /title, etc. per theme.
  • Skins via templateEntryStorefrontThemeProvider / getStorefrontSkin.
  • CSS chrome scoped with html[data-storefront-theme="…"] (Streamlix square/flat rules).
  • Page content width follows theme pageShell.

Zip install / export (roadmap in UI)

APIs exist (/api/operator/themes/install, export, delete), but gallery upload/export/uninstall controls are hidden (SHOW_THEME_PACKAGE_IO_UI = false). Treat third-party zip IO as roadmap in the UI. Uploaded zips contain theme.json + config.json only — they cannot ship new React templates; they skin a built-in templateEntry. Built-in ids cannot be overwritten on install. SEO keys are stripped on install/apply. Deep dives: Themes & Skins, Brand Presets, Themes Package System.