> Portal Navigation:
> 
> - Append `.md` to any URL under `https://dev.wix.com/docs/` to get its markdown version.
> - Pages are either content pages (article or reference text) or menu pages (a list of links to child pages).
> - To get a menu page, truncate any URL to a parent path and append `.md` (e.g. `https://dev.wix.com/docs/sdk.md`, `https://dev.wix.com/docs/sdk/core-modules.md`).
> - Top-level index of all portals: https://dev.wix.com/docs/llms.txt
> - Full concatenated docs: https://dev.wix.com/docs/llms-full.txt

## Resource: About Editor React Components

## Article: About Editor React Components

## Article Link: https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/about-editor-react-components.md

## Article Content:

# About Editor React Component Extensions
<blockquote class="caution">

__Alpha:__
Editor React Components are currently in alpha. This feature is subject to change and may have bugs, issues, and limitations. We're actively improving it based on your feedback.

</blockquote>

Editor React Component extensions let you build custom site widgets in React that fully integrate with the editor. You describe your component's customizable parts in a declarative manifest, and the editor builds matching [auto panels](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/panels/about-auto-panels.md) for Wix users.

This gives Wix users the same editing experience they get with built-in Wix elements, without you having to build or maintain your own settings panels like you would with a custom element. To see auto panels appear one by one as you add manifest properties, follow the [step-by-step tutorial](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/panels/tutorial-configure-auto-panels.md).

<blockquote class="caution">

**Editor Compatibility**

Editor React Component extensions are built for [Wix Harmony](https://dev.wix.com/docs/build-apps/get-started/overview/about-wix-harmony-and-apps.md), Wix's AI-powered editor. They're not supported on Wix Editor or Wix Studio sites, and there's no way to conditionally switch between extension types based on the editor.

</blockquote>

## How it works

Your extension has 2 main parts:

- **React component**: Your UI code that renders in the editor and on the live site.
- **Manifest**: A configuration object that declares what's customizable about your component, so the editor knows which [auto panels](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/panels/about-auto-panels.md) and controls to show to Wix users.

You build the React component first. The CLI then auto-generates the large part of the manifest for you. For more information, see [Auto-generated manifest](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/manifest-reference/about-the-manifest.md#auto-generated-manifest).

Your component code may also include additional assets like stylesheets, and you can provide separate bundles for the live site and the editor. For more details, see [`resources`](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/manifest-reference/root-properties/resources.md).

When a Wix user adds your component to their site:

1. The editor reads the manifest to understand what customizations are available.
2. The editor builds the matching auto panels and controls in the editor UI.
3. As the Wix user makes changes, the editor stores those values. It passes data changes to your component as [props](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/manifest-reference/runtime-props.md) and applies style changes as CSS directly to the DOM elements that match the selectors in the manifest. TypeScript types for all props are available from the [`@wix/editor-react-types`](https://www.npmjs.com/package/@wix/editor-react-types) package.

```mermaid
%%{
  init: {
    'theme': 'base',
    'themeVariables': {
      'primaryColor': '#ffffff',
      'primaryTextColor': '#162D3D',
      'primaryBorderColor': '#162D3D',
      'lineColor': '#0C6EFC',
      'secondaryColor': '#674FE6',
      'tertiaryColor': '#F4F4F4',
      'edgeLabelBackground': '#ffffff',
      'labelTextColor': '#162D3D'
    }
  }
}%%

graph TD
    subgraph Development ["Your code"]
        direction LR
        A1[React component] --- A2[Manifest]
    end

    Development --> B([Wix user installs your app])
    
    B --> WixEditor

    subgraph WixEditor ["Editor"]
        C[Editor reads manifest to build auto panels]-->
        D{User interaction}
        
        D -->|Data| E[Delivered as props]
        D -->|Style| F[Applied via CSS selectors]
        
        E --> G[Component rerenders]
        F --> G
    end

    %% Custom Wix-y Styling
    style Development fill:#F0EBFF,stroke:#674FE6,stroke-width:2px
    style WixEditor fill:#D5E6FF,stroke:#0C6EFC,stroke-width:2px
    style D fill:#FFF9E5,stroke:#FAAD4D
    style B fill:#E6F0FF,stroke:#0C6EFC
```

## Example

Here's a testimonial card built as an Editor React Component. The component code comes first, then the manifest that drives it.

**React component:**

```tsx
import type { Image } from '@wix/editor-react-types';
import './style.css';

interface TestimonialCardProps {
  className: string;
  quote?: string;
  authorName?: string;
  authorRole?: string;
  image?: Image;
}

export default function TestimonialCard({
  className, quote, authorName, authorRole, image
}: TestimonialCardProps) {
  return (
    <div className={`testimonial-card ${className}`}>
      <blockquote className="quote">{quote ?? '"This app transformed our workflow."'}</blockquote>
      <div className="author">
        {image?.url && <img className="avatar" src={image.url} alt={authorName ?? 'Author'} />}
        <div>
          <p className="author-name">{authorName ?? 'Jordan Lee'}</p>
          <p className="author-role">{authorRole ?? 'Operations Manager'}</p>
        </div>
      </div>
    </div>
  );
}
```

<details>
<summary>Sample stylesheet (style.css)</summary>

```css
.testimonial-card {
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: 28px;
  border-radius: 12px;
  font-family: sans-serif;
}

.quote {
  margin: 0;
  font-size: 16px;
  line-height: 1.6;
  font-style: italic;
}

.author { display: flex; align-items: center; gap: 12px; }
.avatar { width: 48px; height: 48px; border-radius: 50%; object-fit: cover; }
.author-name { margin: 0; font-weight: 600; }
.author-role { margin: 0; font-size: 13px; color: #6b7280; }
```

</details>

Notice how the component applies `className` to the root element and uses CSS classes like `.quote` and `.author-name` on inner elements. These patterns are part of the [component requirements](#component-requirements) that let the editor manage your component.

**Manifest:**

```json
{
  "type": "yourAppCodeIdentifier.testimonialCard",
  "description": "A customizable testimonial card",
  "resources": { ... },
  "editorElement": {
    "selector": ".testimonial-card",
    "displayName": "Testimonial Card",
    "data": {
      "quote": {
        "dataType": "text",
        "displayName": "Quote"
      },
      "authorName": {
        "dataType": "text",
        "displayName": "Author Name"
      },
      "authorRole": {
        "dataType": "text",
        "displayName": "Author Role"
      },
      "image": {
        "dataType": "image",
        "displayName": "Author Photo"
      }
    },
    "cssProperties": {
      "backgroundColor": { "defaultValue": "#ffffff" },
      "padding": { "defaultValue": "28px" },
      "borderRadius": { "defaultValue": "12px" },
      "boxShadow": { "defaultValue": "0 1px 3px rgba(0,0,0,0.08)" }
    }
  }
}
```

The `selector` (`.testimonial-card`) matches the CSS class on the component's root element. Everything else in the manifest drives an auto panel.

Each `data` property with `dataType: "text"` becomes an editable text field. When a Wix user clicks **Edit Text** on the component, the editor builds an Edit Text auto panel with inputs for every text property. The `displayName` value appears as the label for each input:

![The Edit Text panel, with annotations showing how each text data property in the manifest maps to a field in the panel](https://wixmp-833713b177cebf373f611808.wixmp.com/images/ff1a30b6a7d7af5981ff5006f6de9cf4.png)

Properties with `dataType: "image"` surface in the **Settings** auto panel, where Wix users can upload or choose images from the Wix Media Manager:

![The Settings panel, with annotations showing how the image data property in the manifest maps to the image upload control](https://wixmp-833713b177cebf373f611808.wixmp.com/images/0de9a85121d8df161fa570b4dbba7423.png)

The `cssProperties` configure a full **Design** auto panel with controls for fill colors, borders, corners, shadows, and spacing. The editor maps each CSS property to the appropriate design control:

![The Design panel, with annotations showing how cssProperties in the manifest map to the design controls](https://wixmp-833713b177cebf373f611808.wixmp.com/images/868c0d3de03e7b08fecb20755c9775b3.png)

> **Note:** These are a subset of the auto panels available. The full action bar is built from your manifest, and you never write panel UI code. For the full list, see [About Auto Panels](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/panels/about-auto-panels.md).

## Component requirements

For the editor to style, select, and configure your component, it needs to follow these conventions:

- Export a default function component.
- Accept a `className` prop and apply it to the root element. The editor uses this to manage styles and layout.
- Add selectors to elements you want the manifest to target. The manifest accepts any valid DOM selector. CSS classes are the recommended approach.
- Name your data props to match the keys in the manifest's `data` definition.

Some manifest features may require additional component-side setup, such as a wrapper element for presets and prop handling for interaction states. The [tutorial on configuring auto panels](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/panels/tutorial-configure-auto-panels.md) covers these as they come up.

## Runtime props

As Wix users edit your component, the editor passes updated values to it as React props. Data values like text and numbers arrive as top-level props, while style changes are applied directly to the DOM as inline CSS.

Some data types, like images and vector art, use complex object formats at runtime. The [`@wix/editor-react-types`](https://www.npmjs.com/package/@wix/editor-react-types) package provides TypeScript types for these values.

For the full breakdown of prop categories, see [Runtime Props](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/manifest-reference/runtime-props.md).

## What you can configure

The testimonial card example covers a simple case: editable text, an image, and some design properties. Most components go further. A slideshow has navigation arrows, a menu has items with hover states, a card grid needs layout controls. Through the manifest, you can also configure inner elements with their own auto panels, interaction states, layout and resize behavior, presets, animations, and richer data types.

For the full set of auto panels and the manifest properties that drive each one, see [About Auto Panels](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/panels/about-auto-panels.md). For the per-property manifest reference, see [About the Manifest](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/manifest-reference/about-the-manifest.md).

## Get started

You can [add an Editor React Component extension using the CLI](https://dev.wix.com/docs/build-apps/develop-your-app/frameworks/wix-cli/supported-extensions/site/editor-react-components/add-an-editor-react-component-extension-with-the-wix-cli.md). The CLI scaffolds your component files, auto-generates the `editorElement` portion of the manifest from your React code, handles bundling, and manages deployment.

From there, you can develop your component:

- **With an AI agent**: Use [Wix skills](https://dev.wix.com/docs/api-reference/articles/ai-tools/about-wix-skills.md) from a supported AI coding agent to build and update components. The skills regenerate the manifest as it works.
- **Manually**: Edit the component source directly. After manual changes, run [`wix generate manifest`](https://dev.wix.com/docs/wix-cli/command-reference/project-commands/app-only/generate-manifest.md) to update the auto-generated manifest.

<!-- TODO: Self hosting is an option too -->
<!-- TODO: Additional extension types, such as site plugins, are planned for the future. -->

## Limitations

The following limitations apply to Editor React Components. For manifest-specific rules and unsupported features, see [About the Manifest](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/manifest-reference/about-the-manifest.md).

- **Custom panels aren't supported.** Only [auto panels](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/panels/about-auto-panels.md) are available. You can't ship your own React UI for an editor panel, so anything Wix users can configure has to map to a manifest property.
- **Self-hosting**: Self-hosting for Editor React Component extensions isn't supported. Deploy components using the [CLI](https://dev.wix.com/docs/build-apps/develop-your-app/frameworks/wix-cli/supported-extensions/site/editor-react-components/add-an-editor-react-component-extension-with-the-wix-cli.md).

## See also

- [About Auto Panels](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/panels/about-auto-panels.md)
- [About the Manifest](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/manifest-reference/about-the-manifest.md)
- [Tutorial | Configure Auto Panels](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/panels/tutorial-configure-auto-panels.md)
<!-- - [About the Panel SDK](https://dev.wix.com/docs/build-apps/develop-your-app/extensions/site-extensions/editor-react-components/panel-sdk/about-panel-sdk.md) -->