Add a dashboard menu plugin extension to your new Wix CLI project as part of migrating an app from the legacy Wix CLI.
| Legacy path | New path |
|---|---|
src/dashboard/menu-plugins/<name>/plugin.json | src/extensions/dashboard/menu-plugins/<name>/<name>.extension.ts |
Note: <name> is your extension's folder name in the legacy project. The new folder and files use the same name.
Dashboard menu plugins are configuration-only. There is no component file.
In the new project:
Create the folder src/extensions/dashboard/menu-plugins/<name>/.
Inside the folder, create <name>.extension.ts.
Add the code for the action variant your legacy plugin.json uses, and set each field to the value the table below specifies:
| Field | Source in legacy project | What to specify |
|---|---|---|
id | id in plugin.json | Copy source as is |
title | title in plugin.json | Copy source as is |
extends | extends in plugin.json, the ID of the slot the plugin plugs into | Copy source as is |
iconKey | iconKey in plugin.json | Copy source as is, or '' if the legacy config doesn't set it |
action | action in plugin.json | Copy source as is, keeping the same variant |
Add the following field if it applies, inside the same object:
| Field | Source in legacy project | What to specify | Condition |
|---|---|---|---|
subtitle | subtitle in plugin.json | Copy source as is | Only if your legacy plugin.json sets it |
Important:
navigateToPage accepts only pageId, and the new openModal accepts only componentId. A legacy navigateToPage.relativeUrl or openModal.componentParams value has no equivalent field in the new structure, so you can't carry it over.id must match the value from the legacy plugin.json. Otherwise, the new entry is treated as a separate extension instead of a continuation of the legacy one.In the new project, in src/extensions.ts:
Import the extension:
Add a .use() call for it to the app() chain, on its own line:
Return to Install the extension's dependencies in the main migration guide.
Last updated: 10 November 2026