Skip to content

Themes

Your storefront, in your stack.

Shopify has thousands of themes, all written in Liquid. WooCommerce and PrestaShop tie you to PHP. Here a theme is just a website that talks to the store over HTTP — so the same panel installs and customises one written in Next and one written in Astro, without knowing or caring which is which.

Nine stacks the platform knows how to run.

Adding a tenth is a row in a table, not a change to the contract.

  • Next.js

    next buildserver
  • Astro

    astro buildserver
  • Nuxt

    nuxt buildserver
  • SvelteKit

    vite buildserver
  • Remix

    remix vite:buildserver
  • Vite + React

    vite buildstatic
  • Vue

    vite buildstatic
  • Eleventy

    eleventystatic

Said plainly

Nine stacks can be run. Real themes exist in two of them today. The engine supports the other seven; nobody has shipped a theme in them yet, and pretending otherwise would be found out on the first click.

The two that exist.

  • Growshop Premium

    Next.js 15

    Growshop, CBD, high-risk retail

    The reference theme for the contract. Age gate, guest checkout, and bank transfer, cash on delivery and Bizum as the default payment methods — a deliberate choice for a sector the card gateways keep dropping.

    pages
    13
    blocks
    8
    settings
    46
    tokens
    44
  • Home page of the Dulce Obrador demo storeOpen the live demo

    Dulce Obrador

    Vite + React

    Artisan bakery and pastry

    Dark luxury, with a made-to-order cake configurator and an allergen table that follows EU food information rules. Ships with 24 demo products, so it can be shown before the shop behind it exists.

    pages
    16
    blocks
    7
    settings
    34

Customising never edits the theme.

Your colours, your copy and your settings live in a separate file that the panel writes. That is the whole reason updating a theme cannot wipe your brand — which is exactly what breaks anywhere “customise” means editing the theme’s own files.

  • 01

    The form builds itself

    Each theme declares what it lets you change, and the panel generates the form from that. Eighteen field types, and settings that only appear when they make sense — the cash-on-delivery surcharge stays hidden until you enable cash on delivery.

  • 02

    One colour repaints the scale

    Colours can be tied to a design token, and derived shades recalculate from it. Changing the brand colour repaints the whole site, not one button.

  • 03

    Drag the home page around

    Editor on the left, your real storefront on the right. Reorder sections, hide them, preview at desktop, tablet and phone. Click a section in the list and it highlights on the page; click the page and it selects in the list.

Installing a theme is running someone else’s code on your server.

So it happens in two steps. You upload the file, and before anything runs you get a report: which theme it is, whether it is signed and by whom, the exact commands that would run, and every external domain it would talk to. It sits in quarantine until you say yes.

Honest caveat: this is enough for themes you wrote or bought from someone you know. Running arbitrary themes from strangers would need sandboxed builds — locked-down containers, restricted network, CPU and memory limits — and that is not built yet.

  1. 01

    The system decides the commands

    A theme's manifest can suggest how to build it, but what actually runs comes from a table inside the platform. Without that rule, installing a theme would mean running whatever its author felt like.

  2. 02

    Installed with lifecycle scripts off

    In all five package managers. It is the counter to the classic attack: a postinstall hidden three dependencies deep.

  3. 03

    Read before it runs

    Six signals — spawning processes, eval, long base64, writing files, reaching for secrets in the environment, and any external domain the theme did not declare.

  4. 04

    Confined by design

    A theme receives exactly three values: the store address, the publishable key that already travels to every visitor's browser, and its own URL. The validator refuses any theme asking for a variable that looks like database or payment access.

The contract is written down, and it is short.