Use when building interactive components for predefined slots in Wix business solutions. Triggers include site plugin, slot, Wix app integration, plugin explorer, business solution extension.
Installation
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Use when building interactive components for predefined slots in Wix business solutions. Triggers include site plugin, slot, Wix app integration, plugin explorer, business solution extension.
compatibility
Requires Wix CLI development environment.
Wix Site Plugin Builder
Creates site plugin extensions for Wix CLI applications. Site plugins are custom elements that integrate into predefined slots within Wix business solutions (like Wix Stores, Wix Bookings, Wix eCommerce), extending their functionality and user experience.
Site owners can place site plugins into UI slots using the plugin explorer in Wix editors.
Quick Start Checklist
Follow these steps in order when creating a site plugin:
Prop names in widget.getProp() and widget.setProp() use kebab-case (e.g., "display-name")
Always update both local state AND widget prop in onChange handlers
Widget properties are bound to custom element attributes — changes automatically update the corresponding attribute
Wrap content in WixDesignSystemProvider > SidePanel > SidePanel.Content
Use WDS components from @wix/design-system
Import @wix/design-system/styles.global.css for styles
Include aria-label for accessibility
Color & Font Picker Fields
Site plugin settings panels can use inputs.selectColor() and inputs.selectFont() from @wix/editor to open the native Wix Editor color and font picker dialogs.
ColorPickerField
Opens the Wix color picker with theme colors, gradients, and more — NOT a basic HTML <input type="color">.
Site plugins integrate into predefined slots in Wix business solutions. Each slot is identified by:
appDefinitionId: The ID of the Wix app (e.g., Stores, Bookings)
widgetId: The ID of the page containing the slot
slotId: The specific slot identifier
Common placement areas include product pages (Wix Stores), checkout and side cart (Wix eCommerce), booking pages (Wix Bookings), service pages, event pages, and blog post pages.
For supported pages, common Wix App IDs, and how to find slot IDs, see SLOTS.md.
Extension Registration
Extension registration is MANDATORY and has TWO required steps.
Step 1: Create Plugin-Specific Extension File
Each site plugin requires an extension file in its folder:
The id must be a unique, static UUID v4 string. Generate a fresh UUID for each extension - do NOT use randomUUID() or copy UUIDs from examples. Replace {{GENERATE_UUID}} with a freshly generated UUID like "95a28afd-7df1-4e09-9ec1-ce710b0389a0".
Property
Type
Description
id
string
Unique static UUID v4 (generate fresh)
name
string
Internal name for the plugin
marketData.name
string
Display name in plugin explorer and app dashboard
marketData.description
string
Description shown in plugin explorer and app dashboard
marketData.logoUrl
string
Path to logo file ({{BASE_URL}} resolves to public folder)
placements
array
Array of slot placements where plugin can be added
placements.appDefinitionId
string
ID of the Wix app containing the slot
placements.widgetId
string
ID of the page containing the slot
placements.slotId
string
ID of the specific slot
installation.autoAdd
boolean
Whether to auto-add plugin to slots on app installation
tagName
string
HTML custom element tag (kebab-case, must contain a hyphen)
element
string
Relative path to plugin component
settings
string
Relative path to settings panel component
Step 2: Register in Main Extensions File
CRITICAL: After creating the plugin-specific extension file, you MUST read wix-cli-extension-registration and follow the "App Registration" section to update src/extensions.ts.
Without completing Step 2, the site plugin will not be available in the plugin explorer.
Checkout Plugins
If you are building a plugin for the checkout page, it may not support automatic addition upon installation. You must create a dashboard page to provide users with a way to add the plugin to their site. See EXAMPLES.md for the dashboard page pattern.
Examples
For complete examples with all three required files (plugin component, settings panel, extension configuration), see EXAMPLES.md.
Example use cases:
Best Seller Badge - Customizable badge on product pages with text and color settings
Booking Confirmation - Custom confirmation message for booking pages
Product Reviews Summary - Star rating and review count display
Data-Driven Plugin - Plugin with Wix Data API integration and editor environment handling
Best Practices
Implementation Guidelines
Use inline styles - CSS imports are not supported in custom elements
Handle editor environment - Show placeholders when in editor mode for data-dependent plugins
Do not call define() - Wix handles customElements.define() for you automatically
Validate all input - Check required props are present
Follow naming conventions - kebab-case for all attributes and widget API
Keep plugins focused - Each plugin should do one thing well
Test in multiple slots - If supporting multiple placements, test each one
Support both Stores versions - Include placements for both old and new Wix Stores product pages for maximum compatibility
Editor Sandboxing
Site plugins are sandboxed when rendered in the editor. This means they're treated as if they come from a different domain, which impacts access to browser storage APIs.
Restricted APIs in the editor:
localStorage and sessionStorage (Web Storage API)
document.cookie (Cookie Store API)
IndexedDB API
Cache API
How to handle sandboxing:
Use the viewMode() function from @wix/site-window to check the current mode before accessing restricted APIs:
import { windowas wixWindow } from'@wix/site-window';
const viewMode = await wixWindow.viewMode();
if (viewMode === 'Site') {
const item = localStorage.getItem('myKey');
} else {
// Mock storage or modify API usage for editor mode
}
Using Wix SDK Modules in Site Plugins
Site plugins can import and use Wix SDK modules directly — you do NOT need createClient(). The Wix runtime provides the client context automatically.
// ❌ WRONG — Do NOT use createClient in site pluginsimport { createClient } from"@wix/sdk";
const wixClient = createClient({ modules: { items, products } });
await wixClient.items.query(...); // Wrong — API surface differs through client
Performance Considerations
Keep bundle size small - plugins load on user-facing pages