Skip to content

A theme is one file.

Colours, fonts, radius and spacing are declared as tokens, and the admin panel renders an editor for them without the theme author writing a line of React. Light and dark live in the same manifest, so there is no such thing as a dark variant that drifts.

Shipped with the platform

What a manifest can declare

  • Colours, fonts, radius and spacing as tokens, each one rendered as a field in the admin panel.
  • Light, dark or any named mode, with its own token values, in the same file.
  • Settings with labels and inputs that core renders for you, so a theme author writes no React for them.
  • Component overrides: replace the header, the footer or the hero and leave the rest alone.
  • Named slots a module can contribute into, declared by the theme rather than fixed by core.
  • Its own group in the admin sidebar, with a label and an icon.
  • Modules it suggests, shown as a banner the operator can dismiss. It never installs anything on its own.
  • Its own strings, in every locale, synced when the theme is activated.

Writing one

Declare the tokens you want an operator to be able to change, override the components you want to replace, and stop. Everything you do not declare keeps working.

Colours, fonts, radius and spacing are declared as tokens, and the admin panel renders an editor for them without the theme author writing a line of React. Light and dark live in the same manifest, so there is no such thing as a dark variant that drifts.
The default. Light and dark in one manifest on a neutral palette with a single blue accent, and every pair of tokens meets WCAG AA.