Skip to main content
In development. 86d is being built in the open. Every capability is Experimental until it earns evidence, so check maturity levels before you rely on anything here.
A Template is a folder holding everything visual about your Store: the MDX files that make up each page, a config.json listing which Modules are on and what colors to use, and any global CSS. Swap the Template and your Store looks different. Your Module logic, API routes, and commerce data do not move. That separation is the point. Redesigning your Storefront should not be able to break Checkout. The starter Template, brisa, ships under templates/. Copy it when you want your own.

What is in a Template

config.json

config.json controls presentation and local Module configuration for the active Template. Commerce facts stay in the Store Runtime domains that own them, so nothing in this file can change a price or a stock count.
config.json

The fields that matter

The complete schema is in the config.json reference.
Every first-party registry entry is Experimental right now. Name each package explicitly, set advanced.version to 1 and allowExperimentalModules to true, and read the list again before you deploy.

Colors

Colors are OKLCH values. OKLCH is perceptually uniform, which means raising lightness by the same amount looks like the same amount of change across every hue. Picking a palette stops being trial and error. Every token in variables.light and variables.dark maps to a CSS custom property Tailwind reads.
The format is oklch(lightness chroma hue). To move your brand color, change the hue (0 to 360) on primary and leave lightness and chroma alone. Changing all three at once is how palettes end up muddy.

Logic and presentation are separate files

Every visual component in a Template splits in two:
  • .tsx holds the logic: state, data fetching, event handlers, configuration.
  • .mdx holds the markup: a render template that receives everything as props.
navbar/index.tsx
navbar/1.mdx
Numbered MDX files (1.mdx, 2.mdx, 3.mdx) are design variants of the same component. Switching designs means changing which numbered file the .tsx imports. The logic never moves, so a redesign cannot introduce a data bug.

Make your own

1

Copy brisa

This copies the starter into templates/my-theme/ and updates theme and name in the new config.json.
2

Edit the MDX

Change layout.mdx, index.mdx, and any page-level MDX to match your design. Module components are available by name with no imports.
3

Activate it

Activation points the template/* path alias in apps/store/tsconfig.json at your new directory.
4

Restart

MDX edits hot-reload. config.json changes need the restart.
You can also pull a Template from GitHub or npm:
86d template add has the full specifier grammar. The command fails if the downloaded Template has no config.json, and the Template has to ship an explicit modules array. Copy the shape of templates/brisa/config.json.
Rename the folder and the theme field has to change with it. A mismatch fails the build, which is better than the alternative but still costs you a confused ten minutes.