20 chapters · 227 min
Skills
Chapter 2 of 20
Build and review Wix CLI app extensions — dashboard pages, modals, plugins, menu plugins, custom element widgets, Editor React components, site plugins, embedded scripts, backend…
11 minutes · 2,445 words · 26 sections
Helps build extensions for Wix CLI applications. Covers all extension types: dashboard pages, modals, plugins, menu plugins, custom element widgets, Editor React components, site plugins, embedded scripts, backend APIs, events, service plugins, and data collections.
Scaffolding is owned by the Wix CLI. For every extension type except Backend API, files, folders, builder boilerplate, UUIDs, and src/extensions.ts registration are generated by wix generate --params. This skill provides the decision logic, API guidance, configuration semantics, and business-logic patterns that fill in the generated stubs.
Before reporting completion to the user, ALL boxes MUST be checked:
src/extensions/dashboard/pages/<page>/, check for a sibling patterns.json. If it exists, this is an auto-patterns page — you MUST follow AUTO_PATTERNS_DASHBOARD.md (opens in a new tab) Part B and use the override topic-index (banners → custom-slots-override.md, header → custom-header-override.md, actions → custom-actions-override.md, columns → , sections → ). Do NOT edit the page component () to add UI elements directly.🛑 STOP: If any box is unchecked, do NOT proceed to the next step.
| ❌ WRONG | ✅ CORRECT |
|---|---|
| Hand-writing builder files, folders, UUIDs, or extension registration | Run wix generate --params — it owns scaffolding |
| Implementing without reading the extension reference | Always read the relevant reference file first |
| Using MCP discovery without checking refs | Check reference files first |
| Reporting done without validation | Always run validation at the end |
| Letting manual action items get buried | Aggregate all manual steps at the very end |
| Writing custom React for single-collection CRUD when auto-patterns applies | Default to AUTO_PATTERNS_DASHBOARD.md (opens in a new tab) for CRUD admin pages |
Editing the page component (<page-name>.tsx) to add UI (banners, headers, custom actions, slots, sections) when patterns.json exists | Use the matching custom-*-override.md from AUTO_PATTERNS_DASHBOARD.md (opens in a new tab) Part B |
What are you trying to build?
Who will see it?
Where will it appear?
patterns.json, faster to author, iterate by editing JSON, no React rewrite.<Modal />; use a separate Dashboard Modal extension and dashboard.openModal().APP_TOOLS declaration + TOOLS_PROVIDER_CONFIG handler — see APP_TOOLS.md (opens in a new tab)). After event (webhooks/sync)? → Backend Event Extension. Custom HTTP endpoints? → Backend API. Need CMS collections for app data? → Data Collection.| Extension Type | Category | extensionType (for wix generate --params) | Reference File |
|---|---|---|---|
| Dashboard Page | Dashboard | DASHBOARD_PAGE | DASHBOARD_PAGE.md (opens in a new tab) |
| Dashboard Modal | Dashboard | DASHBOARD_MODAL | DASHBOARD_MODAL.md (opens in a new tab) |
| Dashboard Plugin | Dashboard | DASHBOARD_PLUGIN | DASHBOARD_PLUGIN.md (opens in a new tab) |
| Dashboard Menu Plugin | Dashboard | DASHBOARD_MENU_PLUGIN | DASHBOARD_MENU_PLUGIN.md |
Key constraints:
<Modal />; use a separate Dashboard Modal and dashboard.openModal().⚠️ Backend API is the only extension type the CLI does NOT scaffold.
wix generatehas noBACKEND_APIhandler. Create files directly per BACKEND_API.md (opens in a new tab).
| Custom element widget vs Editor React component vs Site Plugin | Dashboard Page vs Modal | Service Plugin vs Event |
|---|---|---|
| Custom element widget: standalone interactive component. Editor React component: React with editor manifest (CSS/data/elements). Plugin: fixed slot in Wix app page. | Page: full page. Modal: overlay; use for popups. | Service: during flow. Event: after event. |
| Topic | Reference |
|---|---|
| Code Quality Requirements (applies to all generated code) | CODE_QUALITY.md (opens in a new tab) |
| Extension Registration | EXTENSION_REGISTRATION.md (opens in a new tab) |
| App Validation | APP_VALIDATION.md (opens in a new tab) |
| App Market Review | APP_MARKET_REVIEW.md (opens in a new tab) |
CRITICAL: Data collections are often needed implicitly — don’t wait for the user to explicitly say “create a CMS collection.” Infer the need automatically.
Skip this section if the user provides a collection ID directly (e.g., an existing site-level collection). In that case, use the provided ID as-is — no Data Collection extension or namespace scoping needed.
Always include a Data Collection extension when ANY of these are true:
| Indicator | Example |
|---|---|
| User mentions saving/storing/persisting app-specific data | “save the fee amount”, “store product recommendations” |
| A dashboard page will manage (CRUD) domain entities | “dashboard to manage fees”, “admin page to edit rules” |
| A service plugin reads app-configured data at runtime | “fetch fee rules at checkout”, “look up shipping rates” |
| User mentions “dedicated database/collection” | “save in a dedicated database collection” |
| Multiple extensions reference the same custom data | Dashboard manages fees + service plugin reads fees |
Why this matters: Without the Data Collection extension, the collection won’t be created when the app is installed, the Wix Data APIs may not work (code editor not enabled), and collection IDs won’t be properly scoped to the app namespace.
If data collection is inferred, follow the App Namespace Requirement to obtain the namespace before proceeding.
When creating a Data Collection, you MUST ask the user for their app namespace from Wix Dev Center. This is a required parameter that must be obtained from the user’s Dev Center dashboard and cannot be recommended or guessed.
If the user hasn’t provided their app namespace, read APP_IDENTIFIERS.md (opens in a new tab) and give the user the instructions to obtain it.
Applies ONLY when a Data Collection extension is being created. If the user provides a collection ID directly, use it as-is — no namespace scoping, no Data Collection extension needed.
When a Data Collection is created alongside other extensions that reference the same collections:
idSuffix for each collection (the Data Collection reference documents the full ID format)<app-namespace>/<idSuffix>) in all extensions that reference the collection via Wix Data API callsApplies when ANY Wix Stores API is used (products, inventory, orders, etc.):
getCatalogVersion()productsV3 (V3) vs products (V1)This is non-negotiable — V1 and V3 are NOT backwards compatible.
Applies when a user wants to submit their app to the Wix App Market, list it publicly, prepare for App Market review, audit decline risk, or fix App Market review feedback. Not needed for private apps or routine version releases.
Read APP_MARKET_REVIEW.md (opens in a new tab) — it contains the full technical checklist, implementation notes with Wix doc links, and the review taxonomy IDs for traceability.
Only ask for configuration values when absolutely necessary for the implementation to proceed. If a value can be configured later or added as a manual step, don’t block on it.
If unclear on approach (placement, visibility, configuration, integration), ask clarifying questions. If the answer could change the extension type, wait for the response before proceeding. Otherwise, proceed with the best-fit extension type.
Use the Extension Types Reference Table and decision content above. State extension type and brief reasoning (placement, functionality, integration).
Workflow: Read extension reference → Check API references → Use MCP only for gaps.
references/backend-event/COMMON-EVENTS.mdreferences/data-collection/WIX_DATA.mdreferences/dashboard-page/DASHBOARD_API.mdreferences/SERVICE_PLUGIN.md together with the matching references/service-plugin/<NAME>.md leafreferences/APP_TOOLS.md; it links to references/app-tools/TOOLS.md (declaration) and references/service-plugin/TOOLS_PROVIDER.md (handler)Platform APIs (never discover - in references):
Vertical APIs (discover if needed):
Decision table:
| User Requirement | Check References / Discovery Needed? | Reason / Reference File |
|---|---|---|
| “Display store products” | ✅ YES (MCP discovery) | Wix Stores API — include Stores Versioning reference |
| “Show booking calendar” | ✅ YES (MCP discovery) | Wix Bookings API not in reference files |
| “Send emails to users” | ✅ YES (MCP discovery) | Wix Triggered Emails not in reference files |
| “Get member info” | ✅ YES (MCP discovery) | Wix Members API not in reference files |
| “Listen for cart events” | Check COMMON-EVENTS.md | MCP discovery only if event missing in reference |
| “Store data in collection” | WIX_DATA.md ✅ Found | ❌ Skip discovery (covered by reference) |
| “Create CMS collections for my app” | Data Collection reference | ❌ Skip discovery (covered by dedicated reference) |
| “Show dashboard toast” | DASHBOARD_API.md ✅ Found | ❌ Skip discovery |
| “Show toast / navigate” | DASHBOARD_API.md ✅ Found | ❌ Skip discovery |
| “UI only (forms, inputs)” | N/A (no external API) | ❌ Skip discovery |
| “Settings page with form inputs” | N/A (UI only, no external API) | ❌ Skip discovery |
| “Dashboard page with local state” | N/A (no external API) | ❌ Skip discovery |
MCP Tools for discovery (when needed):
SearchWixSDKDocumentation - SDK methods and APIs (Always use maxResults: 5)ReadFullDocsMethodSchema - Full type schema for a specific SDK method (parameters, return type, permissions)ReadFullDocsArticle - Prose guides and conceptual articles only (not for SDK method signatures)For each extension except Backend API, run npx wix generate --params '<json>'. The command returns {"success":true,"extensionType":"...","newFiles":[...]} on success.
If the command fails because of unknown or invalid params, run npx wix schema generate --type <extensionType> to print the JSON Schema for that extension type, fix the --params payload, and retry. Do not fall back to manual scaffolding.
What the CLI does automatically:
idsrc/extensions.ts with the import and .use() callBackend API exception: Create src/pages/api/*.ts files manually per BACKEND_API.md (opens in a new tab).
Open every path returned in newFiles and replace stubbed handler bodies / UI / queries with the user’s actual logic, guided by the extension reference file’s API and configuration sections.
wix-design-system skill before editing your first .tsx/.jsx file that imports @wix/design-system. Do NOT invoke it preemptively for backend-only or data-only jobs — it adds large content to context that you won’t use.import "@wix/design-system/styles.global.css"; in the main component entry file (page.tsx, modal .tsx, etc.) — not in child/tab/helper files.idSuffix (case-sensitive). If idSuffix is "product-recommendations", use <app-namespace>/product-recommendations NOT productRecommendations.After all implementation is complete, you MUST run validation. See APP_VALIDATION.md (opens in a new tab) for the complete validation workflow:
npx tsc --noEmit)npx wix build)npx wix preview)Do NOT report completion to the user until validation passes.
If validation fails, fix the errors and re-validate until it passes.
Only after validation passes, provide a concise summary section at the top of your response:
## ✅ Implementation Complete
[1-2 sentence description of what was built]
**Extensions Created:**
- [Extension 1 Name] - [Brief purpose]
- [Extension 2 Name] - [Brief purpose]
**Build Status:**
- ✅ Dependencies: [Installed / status message]
- ✅ TypeScript: [No compilation errors / status]
- ✅ Build: [Completed successfully / status]
- ✅/⚠️ Preview: [Running at URL / Failed - reason]
**⚠️ IMPORTANT: [X] manual step(s) required to complete setup**Present any manual steps the user must perform (e.g., configuring settings in the Wix dashboard, enabling permissions, setting up external services).
Format:
## 🔧 Manual Steps Required
The following actions need to be done manually by you:
### 1. [Action Category/Title]
[Detailed description with specific instructions]
### 2. [Action Category/Title]
[Detailed description]wix generate --params updates src/extensions.ts automatically for every CLI-supported extension type. The only case that still requires manual editing is Backend API. For background, troubleshooting, and the manual recovery pattern when src/extensions.ts drifts, see EXTENSION_REGISTRATION.md (opens in a new tab).
Execute these steps sequentially after all implementation is complete. See APP_VALIDATION.md (opens in a new tab) for the complete guide.
npx tsc --noEmitnpx wix buildnpx wix previewStop and report errors if any step fails. Check .wix/debug.log on failures.
wix schema generate --type <extensionType> when wix generate --params fails — don’t pre-fetch itFor links to official Wix CLI documentation for all extension types, see DOCUMENTATION.md (opens in a new tab).
Install this repository
npx skills add wix/skills/plugin marketplace add wix/skillsSkills install per repository, not per chapter — the CLI has no documented per-skill form, so we do not print one.
Build and review Wix CLI app extensions — dashboard pages, modals, plugins, menu plugins, custom element widgets, Editor React components, site plugins, embedded scripts, backend APIs, backend events, service plugins, data collections, and App Market readiness. Use when building ANY feature or extension for a Wix CLI app or preparing a Wix app for App Market review. Triggers on: add, build, create, implement, help me, dashboard, widget, plugin, backend, API, event, collection, embedded script, service plugin, Editor React component, checkout, shipping, tax, discount, SPI, CMS, schema, tracking, popup, admin panel, menu item, modal, validate, test, verify, register extension, App Market, app review, submission readiness.
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
skills/wix-app/SKILL.mdmain, last pushed 10 August 2026.SKILL.md, not by matching a directory convention. 4 distinct layouts observed: .claude/skills/*/SKILL.md, skills/*/SKILL.md, skills/wix-headless/*/skill.md, skills/wix-replatform/resources/*/SKILL.md.h1 and no skipped levels:custom-columns-override.mdcustom-sections-override.md<page-name>.tsxwix generate --paramswix-design-system skill ONLY before editing the first .tsx/.jsx file that imports @wix/design-system. Skip for backend-only or data-only extensions.@wix/design-system/styles.global.css in the main component entry file (page.tsx, modal .tsx, etc.) — not child/tab/helper files.| Service Plugin | Backend | SERVICE_PLUGIN | SERVICE_PLUGIN.md (opens in a new tab) |
| App Tools (AI assistant tools) | Backend | APP_TOOLS, then SERVICE_PLUGIN with pluginType: TOOLS_PROVIDER_CONFIG | APP_TOOLS.md (opens in a new tab) |
| Backend Event Extension | Backend | EVENT | BACKEND_EVENT.md (opens in a new tab) |
| Backend API | Backend | — (manual, see banner below) | BACKEND_API.md (opens in a new tab) |
| Data Collection | Backend | DATA_COLLECTION | DATA_COLLECTION.md (opens in a new tab) |
| Editor React component | Site | EDITOR_REACT_COMPONENT | EDITOR_REACT_COMPONENT.md (opens in a new tab) |
| Custom element widget | Site | CUSTOM_ELEMENT | CUSTOM_ELEMENT_WIDGET.md (opens in a new tab) |
| Site Plugin | Site | SITE_PLUGIN | SITE_PLUGIN.md (opens in a new tab) |
| Embedded Script | Site | EMBEDDED_SCRIPT | EMBEDDED_SCRIPT.md (opens in a new tab) |
| App Identifiers (Namespace, Code ID) | APP_IDENTIFIERS.md (opens in a new tab) |
| Wix Stores Versioning (V1/V3) | STORES_VERSIONING.md (opens in a new tab) |
| Official Documentation Links | DOCUMENTATION.md (opens in a new tab) |
| Auto-patterns Dashboard Pages | AUTO_PATTERNS_DASHBOARD.md (opens in a new tab) |
.claude-plugin/marketplace.json by Wix, declaring 1 plugin. It is read for editorial metadata only — never as the skill index, which is always the repository tree./wix/skills.md, and each chapter at its own .md URL.90 files · 491 KB
Everything this skill ships beside its prose. All of it is set here, as subchapters of chapter 2.
Documentation the agent loads on demand, rather than up front.
references/21 files · 178 KBreferences/app-tools/1 file · 4 KB
references/auto-patterns-dashboard/20 files · 60 KBreferences/backend-event/1 file · 5 KB
references/custom-element-widget/1 file · 2 KB
references/dashboard-menu-plugin/7 files · 8 KBreferences/dashboard-page/4 files · 39 KB
references/dashboard-plugin/1 file · 10 KB
references/data-collection/1 file · 10 KB
references/editor-react-component/17 files · 107 KBreferences/service-plugin/8 files · 23 KBreferences/site-plugin/2 files · 19 KB
Executable code the skill can run.