Theme SDK Guide

Everything you need to build Fez-compatible themes

Theme Structure

themes/your-theme/
├── manifest.json       # Metadata, presets, sections
├── schema.json         # Customizable settings (→ auto UI)
├── sections/           # React components
│   ├── hero.tsx
│   ├── featured-products.tsx
│   └── newsletter.tsx
└── index.ts            # Registration

manifest.json

{
  "id": "my-theme",
  "name": "My Theme",
  "version": "1.0.0",
  "author": "Your Name",
  "sections": ["hero", "categories-grid", "featured-products"],
  "presets": [{
    "id": "default",
    "name": "Default",
    "settings": {
      "primaryColor": "#3b82f6",
      "backgroundColor": "#ffffff",
      "headingFont": "Tajawal",
      "borderRadius": 12
    }
  }]
}

Setting Types (9 types)

TypeUI ControlProperties
colorColor Picker + Hexdefault
textText Inputdefault, placeholder
textareaTextareadefault, placeholder
urlURL Input (LTR)default, placeholder
rangeSlidermin, max, unit, default
selectButtons (≤4) / Dropdownoptions[], default
toggleToggle Switchdefault
imageUpload + Preview
fontFont Selector + Previewdefault

Section Component

import type { ThemeSectionProps } from "@/lib/theme-engine/types";

export default function HeroSection({
  settings, storeData, locale, t
}: ThemeSectionProps) {
  return (
    <section style={{
      background: `linear-gradient(135deg, ${settings.primaryColor}, ${settings.secondaryColor})`,
      fontFamily: `'${settings.headingFont}'`,
    }}>
      <h1>{settings.heroTitle || t("hero.welcome")}</h1>
    </section>
  );
}

💡 showWhen

"showWhen": { "settingId": "showBanner", "value": true }

Publishing

1
Register in Partners Portal
2
Create New Theme
3
Upload manifest + schema + sections
4
Publish to appear in the store