26/10/21: Added safe your app idea and get a preview in the store
14/10/21: How we test your extension for the Shopware Store (DE): https://www.youtube.com/watch?v=gLb5CmOdi4g
08/06/21: SW6: Added URL and infos rearding our docker envirnoment we use for testing SW6 apps.
07/06/21: Template Tests: Now using Scheme.org Structured Data Testing Tool. instead of Google Structered Testing Tool.
07/06/21: Account app description: Subprocesseor and/or Further subprocessors informations maybe required four your app.
17/04/21: Restructure of the quality guidelines. No new content added.
12/05/20: Add app Checklist for your Quality assurance.
22/04/20: SW6: Menu entries in the main menu of the administration are not allowed anymore because of Look & Feel.
You already have an idea and don't want it to be snatched away? Then make sure you get it by creating a preview in your account. You can apply for this if you have maintained images, description and release month without uploading anything already.
Please note that this checklist may be edited at any time. Be sure you are using the most recent testing checklist from Shopware, and not from any other provider. We also ask that you pay attention to every single point in the Quality Guide for apps based on the extension system these will be reviewed by us in order to release your app.
It's always a good idea to review the process of how we conduct tests prior to submitting your app for review - this ensures the quickest way for your app to be published.
Start Testing: If successfull we test the app once again with the most current Shopware version. The Shopware installation is located in a subfolder and has a language subshop with a virtual URL as well as an independent subsshop with its own URL, which is also located in a subfolder. E.g. myshop.com/subfolder/backend oder myshop.com/pulic/admin.
The app must not produce any error messages - neither in the backend nor in the frontend.
SW6: The app is tested with the latest official Shopware 6 CE Version.
Our testing environment are built of following components: Nginx Webserver, PHP 7.4 as FPM, MariaDB latest, Shopware installed in Subfolder /shop/public, Default Shopware Language Netherland.
The environment is built using Docker and is published on Git Hub. You can use the following command to run it on your system:
docker run --rm -p 80:80 -e VIRTUAL_HOST=localhost ghcr.io/shopwarelabs/testenv:6.x.x
The shop will be accessible at http://localhost/shop/public
Admin-User and Admin-Password: demo
Note: We always test with the actual SW6 version. So set 6.4.3. in docker run --rm -p 80:80 -e VIRTUAL_HOST=localhost ghcr.io/shopwarelabs/testenv:6.4.3 always to the actual SW6 version. E.g. shopware/testenv:6.4.3.
When start testing we always test with the app`s highest supported shopware version.
How we test your extension for the Shopware Store (DE): https://www.youtube.com/watch?v=gLb5CmOdi4g
EN coming soon.
Progressive Web App: If your app is PWA compatible and you would like the PWA flag, please contact us at alliances@shopware.com.
SW5: The app is tested with PHP 7.2, Shopware 5.6.2 CE Version (including the activated and current versions of the Cookie Consent Tool for Shopware > 5.2.11), the Shopware security app and with the current Shopware version without the security app.
Note: iframes, external scripts or tracking pixels are not allowed in the source code of the descriptions, profiles, and instructions. Custom styles may not overwrite the original Shopware styles. External sources must be included via https.
Short description: Min. 150 - max. 185 characters.
Description: Min. 200 characters.
Inline styles will be stripped.The following HTML tags are allowed:
<a> <p> <br> <b> <strong> <i> <ul> <ol> <li> <h2> <h3> <h4> <h5>
In addition, you should include descriptive images that represent the app functionality. Show the app "in action" in both the frontend and backend. The content of the images must be in English.
Note: You are no longer able to advertise your Shopware certificates within the app description, in your app images, or in your manufacturer profile. The manufacturer/partner certificates are dynamically loaded at the end of each app description and published by us.
As an app is to be released in both stores (German and International), the content must be accurately translated 1:1 from/to German/English.
A complete manufacturer profile in German and English is mandatory. The English or German text must be translated 1:1. You can find the manufacturer profile in your account under Shopware Account > Extension Administration > Manufacturer profile.
Please enter the valid license you set in your shopware account. You have to identify this license in the composer.json as well.
Note: The choosen license can not be changed after adding your app to your account. If you want to change the licence afterwards, you have to add a new apps based on the extension system (with a new technical name) and upload the extension again with the new technical name.
If your app requires other apps to run properly, you have to check that these apps are installed. For example: If your app only works with an activated base app, you have to check the installation of the base app.
Info:Requiring apps
The installation is not always in English or German.So make sure that your app works in other languages as well.
An example: The customer has his installation in Spanish, your app is not yet available in this language.
So you should use the English translation as fallback. Our Test-Environment includes Netherland as Standard language.
If your app is available in more than one language (e.g. English and German), these can be defined using the option "Translations into the following languages are available" (located in the “Description & images” section of your Extension management). The translations / text snippets must be maintained in the json files.
You have to upload a valid favicon named plugin.png (png / 40 x 40 px) for the app. This favicon will make it easier to identify your app in the Extension Manager module in the backend. The favicon has to be stored under src/Resources/config/
Error/informational messages can only be recorded in the event-log of Shopware's log folder ( /var/log/ ). You have to develop you own logging-service / app-specific logger. Never write app exceptions into the Shopware-Default-log or outside the Shopware System-Log folder. This ensures that the log file can never be accessed via URL
Avoid 400/500 errors at any time, unless the 400 errors are related to an API call!
See Untrusted content should not be included in SonarQube Rules.
If it is possible for the customer to upload images, own media folders should be created or existing ones should be used.
When clicking on the "Install / Uninstall" option in the Extension Manager, the user must be presented with the options "completely delete" or "keep the app data, text snippets and table adjustments".
The Extension Manager must not be extended or overwritten.
The Debug Console controls the reinstallation, uninstallation, installation and deletion of the app. No 400 errors or exceptions are allowed to appear.
If the app requires special PHP options, these must be queried during installation. If the query is negative, a growl message must appear in the backend.
Apps may not load other files during and after the installation in the Extension Manager.
If the app creates its own pages that are set to "index,follow" and the URLs are accessible via the frontend, then these "app URLs" must also appear in the sitemap.xml. In addition, these pages must include their own "Meta description" and "Title tag", which can be entered individually via the backend or as a text snippet.
We expect that every cookie set from the store-URL is registered in our Cookie Consent Manager. We differentiate between "Technically required", "Comfort functions" and "Statistics & Tracking". All cookies have to appear in cookie configuration box in the frontend.
Info:Registering cookies in the Cookie Consent Manager for Shopware 6
Shopping Worlds elements must include an element icon. If the app is deleted, Shopping Worlds should continue to work flawlessly in the frontend.
We check if the "pluginlogger" service is used for the debug/error.log and that logs are written in the directory /var/log/. Log files must use this folder in every circumstance. Another solution is to store them into the database.
A test button for optional API access data must be available. If the API data is incorrect, an entry must appear in the event log file in the Shopware folder /var/log/ respectively in the database.
Apart from that, you can validate the required credentials while saving them in the app settings. In this case, a status message must be displayed in the backend and Shopware log.
Github:Example for implementing a API Test Button into the System Config form
Menu entries in the main menu of the administration are not allowed because of Look & Feel.
Our most current code review configurations that we use when uploading apps via the Shopware Acccount can be found on GitHub.
There are Cypress tests for 6 on GitHub. The project is driven by the Friends of Shopware group. You can contribute at any time:
Note: iframes, external scripts or tracking pixels are not allowed in the source code of the descriptions, profiles, and instructions. Custom styles may not overwrite the original Shopware styles. External sources must be included via https.
Short description: Min. 150 - max. 185 characters.
Description: Min. 200 characters.
Inline styles will be stripped.The following HTML tags are allowed:
<a> <p> <br> <b> <strong> <i> <ul> <ol> <li> <h2> <h3> <h4> <h5>
In addition, you should include descriptive images that represent the app functionality. Show the app "in action" in both the frontend and backend. The content of the images must be in English.
Note: You are no longer able to advertise your Shopware certificates within the app description, in your app images, or in your manufacturer profile. The manufacturer/partner certificates are dynamically loaded at the end of each app description and published by us.
An app is to be released in both stores (German and International), the content must be accurately translated 1:1 from/to German/English.
Please enter the valid license you set in your shopware account. You have to identify this license in the plugin.xml as well.
Note: The choosen license can not be changed after adding your app to your account. If you want to change the licence afterwards, you have to add a new app (with a new technical name) and upload the extion again with the new technical name.
All apps must contain the following metadata:
<? xml version="1.0" encoding="utf-8"?>
<plugin xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../engine/Shopware/Components/Plugin/schema/plugin.xsd">
<label>My app name</label>
<label lang="de">Name of the app (German translation)</label>
<version>1.0.0</version>
<copyright>app supplier</copyright>
<license>license set in the account. e.g. MIT, proprietary, etc.</license>
<link>optional</link>
<author>Author of the app</author>
<compatibility minVersion="5.2.0" />
<changelog version="1.0.0">
<changes>
<![CDATA[
First release Shopware Community Store
]]>
</changes>
<changes lang="de">
<![CDATA[
Erstveröffentlichung Shopware Community Store
]]>
</changes>
</changelog>
<description>
<![CDATA[
<b>My app</b>
<p>CSS,INLINE-Styles,BASE64-IMAGES OR SCRIPTS NOT ALLOWED! Describes app and contains a Link to manual/description in the community-store.</p>
]]>
</description>
<description lang="de">
<![CDATA[
<b>Meine Erweiterung</b>
<p>CSS,INLINE-Styles,BASE64-IMAGES NICHT ERLAUBT! Beschreibt Erweiterung und enthält einen Link zur Anleitung/Beschreibung im Community Store und Erweiterung Anleitung.</p>
]]>
</description>
</plugin>
Note: The changelog must contain a minimum of 20 characters. Please note that the minVersion must be the same version as you have stored for the app in your account.
Note: Pay attention to the fallback language. Use e.g. instead of
If your app requires other app to run properly, you have to check that these apps are installed. For example: If your app only works with an activated base app, you have to check the installation of the base app in the plugin.xml:
<requiredPlugin>
<requiredPlugin pluginName="BasePlugin" minVersion="1.0.0" />
</requiredPlugin>
The installation is not always in English or German.
So make sure that your app works in other languages as well.
An example: The customer has his installation in Spanish, your app is not yet available in this language.
So you should use the English translation as fallback.
If your app is available in more than one language (e.g. English and German), these can be defined using the option "Translations into the following languages are available" (located in the “Description & images” section of your Extension Management). The translations / text snippets must be maintained in the respective XML and TPL files.
You have to upload a valid favicon (16 x 16 px) for the app. This favicon will make it easier to identify your app in the Extension Manager module in the backend.
Error/informational messages can only be recorded in the app-log of Shopware's log folder ( /var/log/ ). The service "pluginlogger" from the DI container has to be used for this. As of Shopware 5.6, you can also create your own app-specific logger. Never write app exceptions into the Shopware core.log or outside the Shopware System-Log folder. This ensures that the log file can never be accessed via URL.
Avoid 500 errors at any time.
If a user clicks on "Reinstall", be sure that any stored data remains intact.
When clicking on the "Install / Uninstall" option in the Extension Manager, the user must be presented with the options "completely delete" or "keep the app data, text snippets and table adjustments".
The prefix for your unique database table is s_plugin_. If you use your own tables, the structure should be as follows: s_plugin_my_plugin_name
See Untrusted content should not be included in SonarQube Rules.
App email templates must be stored in the folder "User emails". All email templates must be deleted after the app is uninstalled.
Attributes created by the app may not be deleted via the free text administration in the backend.
The Extension Manager must not be extended or overwritten.
The Debug Console controls the reinstallation, uninstallation, installation and deletion of the app. No 400 errors or exceptions are allowed to appear.
If the app requires special PHP options, these must be queried during installation. If the query is negative, a growl message must appear in the backend.
Apps may not load other files during and after the installation in the Extension Manager.
If the app creates its own pages that are set to "index,follow" and the URLs are accessible via the frontend, then these "app URLs" must also appear in the sitemap.xml. In addition, these pages must include their own "Meta description" and "Title tag", which can be entered individually via the backend or as a text snippet.
Info:Extend the sitemap.xml with Shopware 5 apps.
We expect that every cookie set from the store-URL is registered in our Cookie Consent Manager. We differentiate between "Technically required", "Comfort functions" and "Statistics & Tracking". All cookies have to appear in cookie configuration box in the frontend.
Info:Registering cookies in the Cookie Consent Manager
Do not empty the template-/http-Cache or recompile the theme when installing the app. Also please consider which caches actually need to be cleared for your app to work, since regenerating caches may cause a high load on the server. Clear only the necessary caches when the activate-method is called.
Info:
Shopware App GuidelinesShopping Worlds elements must include an element icon. If the app is deleted, Shopping Worlds should continue to work flawlessly in the frontend.
We check if the "pluginlogger" service is used for the debug/error.log and that logs are written in the directory /var/log/. Log files must use this folder in every circumstance. Another solution is to store them into the database.
A test button for optional API access data must be available. If the API data is incorrect, an entry must appear in the app log file in the Shopware folder /var/log/ respectively in the database.
Apart from that, you can validate the required credentials while saving them in the app settings. In this case, a status message must be displayed in the backend and Shopware log.
Github: Example app for implementing a API Test Button into the System Config form
Our most current code review configurations that we use when uploading apps via the Shopware Acccount can be found on GitHub.
There are Cypress tests for Shopware 5 and 6 on GitHub. The project is driven by the Friends of Shopware group. You can contribute at any time:
The Shopware 5 backend is completely based on Ext JS framework by Sencha (www.sencha.com). If you are developing Shopware 5 apps which build upon or alter the Shopware/ExtJS layer and wish to offer them with a proprietary license (apps that are not licensed under the GNU Affero General Public License version 3 or a compatible license), you require a Shopware SDK license.
Thanks to an OEM agreement with Sencha, Shopware is able to offer this license on a per developer basis, allowing the license holder to make use of this framework for their own apps.
When do I need a SW5 SDK-License?
When do I NOT need a SW5 SDK-License?
If you need a license, please write an email to alliances@shopware.com.
Cause: Error in composer.json
One possible cause is that the technical app name from the Community Store or account does not match the technical name entered in composer.json or the app is incorrectly zipped.
The technical app name had to be stored in the last part of the composer.json: composore.json > extra > shopware-plugin-class. So take a look at the bootstrap class. Most of the error were caused by the wrong technical name. For example "Swag\\MyPlugin\\SwagMyPluginSW6" instead of "Swag\\MyPlugin\\SwagMyPlugin".
Here is an example of a valid composer.json.
See "Plugin-Base Class" for more information.
The bootstrap cannot be found. Either the folder structure in the ZIP file is incorrect or there is a typo/case sensitive error in the app source (e.g. in the technical name).
(SW5 related only)
The app manufacturer needs an SDK license for a commercial app which uses ExtJS. For more information, please write an email to alliances@shopware.com.
See Shopware 5 SDK License for more information.
Missing requirements in the composer.json (e.g. "require": {"shopware/frontend": "*"},)
See "Shopware App Development: App Meta Information - Explanation of the properties" for more information.
Be sure you set cookies as secure. Don`t forget to register your to Cookie to the Coookie Consent Manager.
Shopware always uses json_Encode exclusively - there is no other fallback.
The composer.lock in the app archive has to be deleted.
In the Shopware 6 Early Access version, the mentioned class did not exist, therefore, the code review failed.
The reason for the problem is the following specification in the composer.json:
"require": {
"shopware/core": "*",
"shopware/storefront": "*"
},
Composer resolves this to "Whatever is the latest from these repositories" and then installs the Early Access version instead of the current Release Candidate. This happens because an EA is not known by composer as a stability level (like stable or RC) and is therefore ultimately considered "stable".
The solution is to amend the requirement as follows:
"require": {
"shopware/core": "^6.1",
"shopware/storefront": "^6.1"
},
"minimum-stability": "RC"
This ensures that at least version Shopware 6.1 is installed, even if it is a Release Candidate. It will be preferred as soon as the final 6.1 is released.
Not allowed folders and files:
.gitignore,.DS_Store, Thumbs.db, .git, __MACOSX, .zip, .tar, .tar.gz, .phar
You have now read the complete list of requirements for developing and releasing apps based on our extension system in the Shopware Community Store.
If your app is a software app/interface with downstream costs, transaction fees, or service fees for the customer, we need to complete a technology partner agreement in order activate your apps.
If you have any questions regarding the technology partner agreement, please contact our sales team by writing an email to alliances@shopware.com or calling +44 (0) 203 095 2445 (UK) / 00 800 746 7626 0 (worldwide) / +49 (0) 25 55 / 928 85-0 (Germany).