From shopware-migration
Use when migrating Shopware plugins from 6.6 to 6.7, upgrading admin components from sw-* to mt-* (Meteor), migrating from Webpack to Vite, converting Vuex to Pinia, adopting Vue 3 Composition API, or updating PHP code with constructor property promotion. Trigger on "6.6 to 6.7", "6.7 migration", "migrate plugin", "upgrade shopware", "meteor components", "sw- to mt-", "mt-button", "mt-text-field", "mt-select", "mt-banner", "mt-card", "mt-tabs", "webpack to vite", "vuex to pinia".
How this skill is triggered — by the user, by Claude, or both
Slash command
/shopware-migration:shopware-6.7-migrationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill guides the migration of Shopware 6 plugins from version 6.6 to 6.7. It covers breaking changes in the **administration** (Meteor components, Vite, Pinia) and **PHP backend** (constructor promotion, coding standards).
components/mt-avatar.mdcomponents/mt-badge.mdcomponents/mt-banner.mdcomponents/mt-button.mdcomponents/mt-card.mdcomponents/mt-chart.mdcomponents/mt-checkbox.mdcomponents/mt-color-badge.mdcomponents/mt-colorpicker.mdcomponents/mt-context-button.mdcomponents/mt-context-menu-divider.mdcomponents/mt-context-menu-item.mdcomponents/mt-data-table-badge-renderer.mdcomponents/mt-data-table-number-renderer.mdcomponents/mt-data-table-price-renderer.mdcomponents/mt-data-table-text-renderer.mdcomponents/mt-data-table.mdcomponents/mt-datepicker.mdcomponents/mt-email-field.mdcomponents/mt-empty-state.mdThis skill guides the migration of Shopware 6 plugins from version 6.6 to 6.7. It covers breaking changes in the administration (Meteor components, Vite, Pinia) and PHP backend (constructor promotion, coding standards).
sw-* components with mt-* Meteor equivalentssrc/Resources/app/administration/build/webpack.config.js (and the build/ directory if it becomes empty)src/Resources/app/administration/src/init/svg-icons.init.js (and the init/ directory if it becomes empty)src/Resources/app/administration/src/app/assets/icons/svg/ff-icon.svgsrc/Resources/app/administration/src/app/assets/icons/icons.jssrc/Resources/app/administration/src/app/assets/ if empty (including subdirectories that contain only empty directories)admin-extension-sdk → meteor-admin-sdk)Shopware.State → Shopware.Store)composer.json conflict to "shopware/core": "<6.7 || >=6.8"composer.json "version": bump major by 1, reset minor and patch to 0 (e.g. 1.3.2 → 2.0.0)require-dev packages to latest stable versionsshopware-plugins templates)@method, blank line, @class, @package)| Task | Reference | Example Template |
|---|---|---|
| sw-* → mt-* component mapping (all 25 components) | references/component-mapping.md | — |
| Full page/modal/list migration examples | references/component-examples.md | examples/detail-page-after.html.twig, examples/modal-after.html.twig |
| Webpack → Vite build migration | references/build-system-migration.md | examples/vite.config.js |
| Admin SDK package rename | references/build-system-migration.md | — |
| Vuex → Pinia state management | references/state-management-migration.md | examples/pinia-store.js |
| Constructor property promotion | references/php-migration.md | examples/constructor-promotion.php |
| Domain exception factory pattern | references/php-migration.md | examples/domain-exception.php |
| PHP Enums for constants | references/php-migration.md | — |
| Coding style rules | references/php-migration.md | shopware-plugins/examples/coding-style.md |
| composer.json version constraints | — | examples/composer-67.json |
| Composer packages audit & plugin file structure | references/composer-packages-audit.md | shopware-plugins/examples/composer.json |
references/*.md file for the full guideexamples/* templates as starting points where availableshopware-plugins/examples/coding-style.md for all PHP conventionsShopware provides an automated ESLint-based codemod for admin component migration:
composer run admin:code-mods -- --plugin-name=YourPluginName --shopware-version=6.7 --fix
Options: --shopware-root=PATH, --src=PATH, --ignore-git. Always review output — the codemod adds // TODO comments for items requiring manual migration (especially sw-data-grid → mt-data-table).
All sw-* wrappers are deprecated (removal in v6.8.0). The universal migration pattern:
| Pattern | Old (sw-*) | New (mt-*) |
|---|---|---|
| Value binding | :value="x" + @input="fn" | v-model="x" |
| Button danger | variant="danger" | variant="critical" |
| Button ghost | variant="ghost" | variant="secondary" :ghost="true" |
| Alert variants | error / warning / success | critical / attention / positive |
| Icon sizing | :small / :large | size="16px" / size="32px" |
| Modal sizing | variant="large" | width="l" |
| Popover | sw-popover | mt-floating-ui |
| Button router-link | :router-link="{ name: 'x' }" | @click="$router.push({ name: 'x' })" — kein <router-link> Wrapper |
| Password toggle | :passwordToggleAble | :toggable |
| Alert icon | :showIcon="false" | :hideIcon="true" |
| Tabs | Child <sw-tabs-item> components | :items array prop |
sw-page / sw-card-view | — | Kein Ersatz — bleiben sw-*, kein mt-page vorhanden |
sw-skeleton / sw-skeleton-bar | — | Kein Ersatz — mt-skeleton existiert nicht, nicht verwenden |
Full mapping with prop/event/slot tables for all 25 components: references/component-mapping.md
Detailed migration guide with real before/after examples for 19 deprecated wrapper components: references/component-migration-guide.md
| Change | Old | New |
|---|---|---|
| Build tool | Webpack 5 | Vite 6 |
| State management | Vuex 4 (Shopware.State) | Pinia 2.3 (Shopware.Store) |
| Mutations | Shopware.State.commit('module/mutation', val) | store.property = val (direct) |
| Admin SDK | @shopware-ag/admin-extension-sdk | @shopware-ag/meteor-admin-sdk@^6.4.0 |
| Component lib | — | @shopware-ag/meteor-component-library@^4.24.0 |
| Vue | 2.7 / 3 compat | 3.5 |
| Module import | require() / require.context() | import() / import.meta.glob() |
| Change | Old | New |
|---|---|---|
| Constructor | Property + assignment | private readonly promoted parameters |
| Empty body | { } on new line | {} on closing paren line |
| Exceptions | throw new \RuntimeException(...) | throw MyPluginException::specificError(...) |
| Constants | class Status { const X = 'x'; } | enum Status: string { case X = 'x'; } |
When migrating a plugin:
references/composer-packages-audit.md to verify require-dev packages and required plugin root files. Use shopware-plugins skill templates for missing files.composer install inside the plugin via DDEV:
ddev exec bash -c "cd shopware/custom/static-plugins/{PluginName} && composer install"
# Dry-run (review changes)
ddev exec bash -c "cd shopware/custom/static-plugins/{PluginName} && composer run rector"
# Apply
ddev exec bash -c "cd shopware/custom/static-plugins/{PluginName} && vendor/bin/rector process --clear-cache"
composer run admin:code-mods -- --plugin-name=YourPlugin --shopware-version=6.7 --fixreferences/component-mapping.mdreferences/build-system-migration.md. Delete these obsolete files and clean up empty directories afterward:
src/Resources/app/administration/build/webpack.config.js → remove build/ if emptysrc/Resources/app/administration/src/init/svg-icons.init.js → remove init/ if emptysrc/Resources/app/administration/src/app/assets/icons/svg/ff-icon.svgsrc/Resources/app/administration/src/app/assets/icons/icons.jssrc/Resources/app/administration/src/app/assets/ if it contains only empty directoriesreferences/state-management-migration.mdreferences/php-migration.mdexamples/composer-67.json# Preferred (if shopware-cli available)
ddev exec shopware-cli project storefront-build --only-extensions {PluginName}
# Fallback
ddev exec bash -c "cd shopware && bin/build-storefront.sh"
# Preferred (if shopware-cli available)
ddev exec shopware-cli project admin-build --only-extensions {PluginName}
# Fallback
ddev exec bash -c "cd shopware && bin/build-administration.sh"
When you need up-to-date information from the Shopware developer docs, use the Algolia search API:
Step 1 — Search: POST to the Algolia endpoint, replacing "query" value with your search term:
curl -s -X POST \
"https://j1y01x9hgm-dsn.algolia.net/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20JavaScript%20(5.19.0)%3B%20Lite%20(5.19.0)%3B%20Browser%3B%20docsearch%20(3.9.0)%3B%20docsearch-react%20(3.9.0)%3B%20docsearch.js%20(3.9.0)&x-algolia-api-key=711e1cadf66a3957aaf183a58aad12a7&x-algolia-application-id=J1Y01X9HGM" \
-H "Content-Type: application/json" \
-d '{
"requests": [{
"query": "YOUR_SEARCH_TERM",
"indexName": "beta-developer-shopware",
"attributesToRetrieve": ["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],
"attributesToSnippet": ["hierarchy.lvl1:10","hierarchy.lvl2:10","hierarchy.lvl3:10","hierarchy.lvl4:10","hierarchy.lvl5:10","hierarchy.lvl6:10","content:10"],
"snippetEllipsisText": "…",
"highlightPreTag": "<mark>",
"highlightPostTag": "</mark>",
"hitsPerPage": 30,
"clickAnalytics": false,
"filters": "version:main",
"length": 30,
"offset": 0
}]
}'
Step 2 — Parse results: The response contains results[0].hits[] sorted by relevance (best match first). Each hit has a url field pointing to the documentation page.
Step 3 — Fetch the page: Use WebFetch on the url from the top hit(s) to retrieve the full documentation content.
shopware-plugins skillshopware-plugins/examples/ — use this skill to create any missing root filesshopware-plugins skill (section "Resolving require-dev Package Versions")shopware-plugins/examples/coding-style.mdshopware-plugins/adr/2022-02-24-domain-exceptions.mdshopware-plugins/adr/2022-01-20-feature-flags-for-major-versions.mdshopware-plugins/adr/2022-06-27-providing-the-admin-extension-sdk.mdcomposer.json "version": Majorversion um 1 erhöhen, Minor und Patch auf 0 setzen (z.B. 1.3.2 → 2.0.0).sw-data-grid → mt-data-table always requires manual migration.mt-skeleton does not exist — never use it; there is no Meteor replacement for sw-skeleton/sw-skeleton-bar.mt-text-editor requires feature flag METEOR_TEXT_EDITOR.shopware-plugins/examples/coding-style.md.Shopware.Store.register() (not defineStore() directly) for Pinia stores.@method first, then blank line, then @class and @package last.ShopwareSetList::SHOPWARE_6_7_0 and ShopwareSetList::SHOPWARE_6_8_0 sets only.parent() with no additions, orphaned service definitions in services.xml.shopware-cli if available, otherwise fall back to bin/build-storefront.sh / bin/build-administration.sh.npx claudepluginhub zone1987/claude-a-dev-team --plugin shopware-migrationCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.