Skip to main content

The stylesheet

Compile to a path inside the theme root, and commit the output:
package.json
The compiled stylesheet is a committed artifact. The published bundle is the theme root, so a stylesheet produced only by a local build step is absent from the bundle. Publishing rejects a bundle whose templates link a root-relative stylesheet it does not contain:
Without the check, the theme publishes and every store using it renders unstyled HTML.
Only literal root-relative href values ending in .css are verified. A CDN link or an href containing ${ } is not checked.
slurp gitignore writes a .gitignore for a theme, including the files that must not be ignored.

Accent colours

An accent is a color setting applied as CSS custom properties. Store RGB channels, not hex:
A hex value satisfies the first rule and produces invalid CSS in the second. Every opacity modifier breaks, with no error reported.
Define window.__bsApplyAccent(name) to let the builder recolour the preview live. Without it, a merchant’s colour change is not visible until reload. See The builder.

Fonts

Request fonts through the platform, which serves them from the store’s own origin:
Do not link a font CDN. Doing so sends the buyer’s IP address to a third party, which the merchant cannot consent to on the buyer’s behalf.
Families are restricted to an allowlist. Unlisted families and weights are ignored rather than approximated. See Platform assets.

Dark mode

Dark mode is entirely the theme’s responsibility. A theme can be dark-only, light-only, or provide a toggle backed by its own Alpine store.

Static assets

Any non-template file in the bundle is served as a static file. Assets referenced from a marketplace listing resolve to content-addressed URLs with a one-year immutable cache, so a changed file produces a changed URL. Merchant-uploaded images are not theme assets. They come through the media pipeline and arrive in settings as URLs.