From 5c4d5ed3417935c7752e81313f346f01e39c74d0 Mon Sep 17 00:00:00 2001 From: LApple Date: Mon, 2 Mar 2026 16:05:17 +0100 Subject: [PATCH 01/50] chore: creates dev folder and moves pages --- .../accessibility/accessibility-checklist.md | 0 guides/development/accessibility/index.md | 23 + .../accessibility/storefront-accessibility.md | 0 .../general-concepts/generated-reference.md | 0 .../general-concepts/index.md | 0 .../general-concepts/partial-data-loading.md | 0 .../general-concepts/request-headers.md | 4 +- .../general-concepts/search-criteria.md | 0 guides/development/integrations-api/index.md | 79 +++ .../monetization}/in-app-purchases.md | 0 guides/development/monetization/index.md | 24 + .../monetization/quality-guidelines.md | 327 +++++++++++ .../monetization/store-review-errors.md | 167 ++++++ .../testing/e2e-playwright}/actor-pattern.md | 0 .../testing/e2e-playwright}/best-practices.md | 0 .../testing/e2e-playwright}/deployment.md | 0 .../testing/e2e-playwright}/fixtures.md | 0 .../testing/e2e-playwright}/index.md | 0 .../e2e-playwright}/install-configure.md | 0 .../language-agnostic-testing.md | 0 .../e2e-playwright}/local-development.md | 0 .../testing/e2e-playwright}/page-object.md | 0 .../e2e-playwright}/test-data-service.md | 0 .../e2e-playwright}/test-suite-types.md | 0 .../testing/e2e-playwright}/test.md | 0 guides/development/testing/index.md | 63 ++ .../legacy}/cypress/cypress-best-practises.md | 0 .../testing/legacy/cypress/index.md} | 4 +- guides/development/testing/legacy/index.md | 10 + .../development/testing/testing-guidelines.md | 0 guides/development/testing/unit/index.md | 18 + .../testing/unit}/jest-admin.md | 0 .../testing/unit}/jest-storefront.md | 0 .../testing/unit}/php-unit.md | 0 .../general-concepts/api-versioning.md | 90 --- guides/integrations-api/index.md | 26 - .../plugins/plugins/testing/cypress/index.md | 12 - guides/plugins/plugins/testing/index.md | 36 -- resources/guidelines/testing/index.md | 10 - .../store/quality-guidelines-apps/index.md | 470 --------------- .../store/quality-guidelines-plugins/index.md | 555 ------------------ 41 files changed, 716 insertions(+), 1202 deletions(-) rename {resources => guides/development}/accessibility/accessibility-checklist.md (100%) create mode 100644 guides/development/accessibility/index.md rename {resources => guides/development}/accessibility/storefront-accessibility.md (100%) rename guides/{ => development}/integrations-api/general-concepts/generated-reference.md (100%) rename guides/{ => development}/integrations-api/general-concepts/index.md (100%) rename guides/{ => development}/integrations-api/general-concepts/partial-data-loading.md (100%) rename guides/{ => development}/integrations-api/general-concepts/request-headers.md (99%) rename guides/{ => development}/integrations-api/general-concepts/search-criteria.md (100%) create mode 100644 guides/development/integrations-api/index.md rename guides/{plugins/apps => development/monetization}/in-app-purchases.md (100%) create mode 100644 guides/development/monetization/index.md create mode 100644 guides/development/monetization/quality-guidelines.md create mode 100644 guides/development/monetization/store-review-errors.md rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/actor-pattern.md (100%) rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/best-practices.md (100%) rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/deployment.md (100%) rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/fixtures.md (100%) rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/index.md (100%) rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/install-configure.md (100%) rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/language-agnostic-testing.md (100%) rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/local-development.md (100%) rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/page-object.md (100%) rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/test-data-service.md (100%) rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/test-suite-types.md (100%) rename guides/{plugins/plugins/testing/playwright => development/testing/e2e-playwright}/test.md (100%) create mode 100644 guides/development/testing/index.md rename guides/{plugins/plugins/testing => development/testing/legacy}/cypress/cypress-best-practises.md (100%) rename guides/{plugins/plugins/testing/cypress/cypress-end-to-end-testing.md => development/testing/legacy/cypress/index.md} (99%) create mode 100644 guides/development/testing/legacy/index.md rename resources/guidelines/testing/store/index.md => guides/development/testing/testing-guidelines.md (100%) create mode 100644 guides/development/testing/unit/index.md rename guides/{plugins/plugins/testing => development/testing/unit}/jest-admin.md (100%) rename guides/{plugins/plugins/testing => development/testing/unit}/jest-storefront.md (100%) rename guides/{plugins/plugins/testing => development/testing/unit}/php-unit.md (100%) delete mode 100644 guides/integrations-api/general-concepts/api-versioning.md delete mode 100644 guides/integrations-api/index.md delete mode 100644 guides/plugins/plugins/testing/cypress/index.md delete mode 100644 guides/plugins/plugins/testing/index.md delete mode 100644 resources/guidelines/testing/index.md delete mode 100644 resources/guidelines/testing/store/quality-guidelines-apps/index.md delete mode 100644 resources/guidelines/testing/store/quality-guidelines-plugins/index.md diff --git a/resources/accessibility/accessibility-checklist.md b/guides/development/accessibility/accessibility-checklist.md similarity index 100% rename from resources/accessibility/accessibility-checklist.md rename to guides/development/accessibility/accessibility-checklist.md diff --git a/guides/development/accessibility/index.md b/guides/development/accessibility/index.md new file mode 100644 index 0000000000..58c15e010f --- /dev/null +++ b/guides/development/accessibility/index.md @@ -0,0 +1,23 @@ +--- +nav: + title: Accessibility + position: 10 +--- + +# Accessibility + +Shopware is committed to creating inclusive and barrier-free shopping experiences. Accessibility affects both the core Storefront and all custom themes and extensions. Developers are responsible for ensuring that their implementations follow accessibility standards such as WCAG 2.1 AA. + +## In this section + +* +* + +## Why accessibility matters + +* Legal compliance (e.g., EU accessibility regulations) +* Better usability for all users +* Improved SEO and performance +* Future-proof storefront implementations + +Shopware continuously introduces accessibility improvements in new releases. Always test extensions with the `ACCESSIBILITY_TWEAKS` feature flag enabled to ensure compatibility. diff --git a/resources/accessibility/storefront-accessibility.md b/guides/development/accessibility/storefront-accessibility.md similarity index 100% rename from resources/accessibility/storefront-accessibility.md rename to guides/development/accessibility/storefront-accessibility.md diff --git a/guides/integrations-api/general-concepts/generated-reference.md b/guides/development/integrations-api/general-concepts/generated-reference.md similarity index 100% rename from guides/integrations-api/general-concepts/generated-reference.md rename to guides/development/integrations-api/general-concepts/generated-reference.md diff --git a/guides/integrations-api/general-concepts/index.md b/guides/development/integrations-api/general-concepts/index.md similarity index 100% rename from guides/integrations-api/general-concepts/index.md rename to guides/development/integrations-api/general-concepts/index.md diff --git a/guides/integrations-api/general-concepts/partial-data-loading.md b/guides/development/integrations-api/general-concepts/partial-data-loading.md similarity index 100% rename from guides/integrations-api/general-concepts/partial-data-loading.md rename to guides/development/integrations-api/general-concepts/partial-data-loading.md diff --git a/guides/integrations-api/general-concepts/request-headers.md b/guides/development/integrations-api/general-concepts/request-headers.md similarity index 99% rename from guides/integrations-api/general-concepts/request-headers.md rename to guides/development/integrations-api/general-concepts/request-headers.md index b570683895..520071f084 100644 --- a/guides/integrations-api/general-concepts/request-headers.md +++ b/guides/development/integrations-api/general-concepts/request-headers.md @@ -7,7 +7,9 @@ nav: # Request Headers -## sw-language-id +## Common headers + +### sw-language-id By default, the API delivers the entities via the system language. This can be changed by specifying a language id using the `sw-language-id` header. diff --git a/guides/integrations-api/general-concepts/search-criteria.md b/guides/development/integrations-api/general-concepts/search-criteria.md similarity index 100% rename from guides/integrations-api/general-concepts/search-criteria.md rename to guides/development/integrations-api/general-concepts/search-criteria.md diff --git a/guides/development/integrations-api/index.md b/guides/development/integrations-api/index.md new file mode 100644 index 0000000000..fe3a8ecf7a --- /dev/null +++ b/guides/development/integrations-api/index.md @@ -0,0 +1,79 @@ +--- +nav: + title: Working with APIs + position: 40 + +--- + +# Working with APIs + +Shopware provides two HTTP APIs: + +* [Admin API](https://shopware.stoplight.io/docs/admin-api/twpxvnspkg3yu-quick-start-guide) +* [Store API](https://shopware.stoplight.io/docs/store-api/38777d33d92dc-quick-start-guide). + +These APIs serve different purposes but share common principles and infrastructure. + +## Admin API + +Primarily for backend and administrative functions, the Admin API enables structured data exchanges, bulk operations, data synchronization, and import-export tasks. + +Use it when: + +* Managing entities (products, categories, orders) +* Running backend integrations +* Performing bulk operations +* Building admin-side applications + +Full endpoint documentation (local instance required): `/api/_info/stoplightio.html`. + +Search endpoints use: `POST /api/search/{entity}` + +## Store API + +This customer-facing API allows you to access and manipulate data related to products, customer interactions, shopping carts, and other aspects of Shopware that significantly impact the frontend user experience. It serves both anonymous and authenticated users. + +Use it when: + +* Interacting with products and listings +* Managing carts and checkout +* Building headless storefronts +* Serving anonymous or authenticated customers + +Full endpoint documentation (local instance required): `/store-api/_info/stoplightio.html` + +## Shared API mechanics + +Both APIs use the same foundational structures: + +* [Search Criteria](search-criteria): encapsulates the entire search definition in one generic object +* [Request Headers](request-headers): additional instructions +* [Partial Data Loading](partial-data-loading) + +These define how data is filtered, structured, and versioned. + +For architectural background, see the [API overview](apis). + +## Generated API reference + +### OpenAPI schema + +Shopware exposes OpenAPI schemas for both Admin API and Store API. These schemas are generated via PHP annotations using [swagger-php](https://github.com/zircote/swagger-php). If you build custom endpoints, you can leverage these annotations to generate standardized documentation for your custom endpoints. + +::: warning +Due to security restrictions, your **`APP_ENV`** environment variable must be set to **`dev`** to access the specifications described below. +::: + +To retrieve the raw schema definition directly, use the following endpoint: + +```text +/(api|store-api)/_info/openapi3.json +``` + +### Entity schema + +To access the schema definitions of all available entities instead of an endpoint reference, use one of the corresponding schema endpoints instead: + +```text +/(api|store-api)/_info/open-api-schema.json +``` diff --git a/guides/plugins/apps/in-app-purchases.md b/guides/development/monetization/in-app-purchases.md similarity index 100% rename from guides/plugins/apps/in-app-purchases.md rename to guides/development/monetization/in-app-purchases.md diff --git a/guides/development/monetization/index.md b/guides/development/monetization/index.md new file mode 100644 index 0000000000..85b3bb51d4 --- /dev/null +++ b/guides/development/monetization/index.md @@ -0,0 +1,24 @@ +--- +nav: + title: Monetization + position: 10 + +--- + +# Monetization + +Shopware provides multiple ways to monetize your extension in the Store. Choose the model that fits your business strategy and target audience. + +All monetized extensions must comply with our [quality guidelines](./quality-guidelines) and avoid [Common Store Review Errors](./store-review-errors). + +## Paid extensions + +Sell your extension with a one-time purchase or subscription model via the Shopware Store. Pricing and licensing are managed in your Shopware Account. + +## In-App Purchases (IAP) + +[In-App Purchases](./in-app-purchases) enable locking specific features behind additional purchases within the same extension. Available since Shopware 6.6.9.0. + +## Commission-based integrations (STP) + +If your extension integrates external services and generates revenue (e.g. transaction-based fees), a Shopware Technology Partner (STP) agreement may be required. See the [quality guidelines](./quality-guidelines) for details. diff --git a/guides/development/monetization/quality-guidelines.md b/guides/development/monetization/quality-guidelines.md new file mode 100644 index 0000000000..eb1d13db67 --- /dev/null +++ b/guides/development/monetization/quality-guidelines.md @@ -0,0 +1,327 @@ +--- +nav: + title: Quality Guidelines for Store Extensions + position: 20 + +--- + +# Quality Guidelines for Store Extensions + +These guidelines apply to all extensions distributed via the Shopware Store, including both plugins and apps. They define the quality, security, and compliance requirements for publication. + +## Scope and terminology + +* **Extension**: umbrella term for plugins and apps. +* **Plugin**: installed in the Shopware instance; PHP code, Composer. +* **App**: integrated via app system; no direct PHP execution in core. + +Unless stated otherwise, requirements apply to all extensions. + +## Review process + +All extensions are: + +1. Automatically [code-reviewed](https://github.com/shopwareLabs/store-plugin-codereview) (PHPStan, SonarQube), Due to our quality assurance, with special attention on impacts to the Administration and Storefront. +2. Manually reviewed for security, coding standards, user experience, and functionality. +3. Tested on the latest stable [Shopware 6](https://www.shopware.com/de/download/#shopware-6) CE version. + +Always test against the highest supported Shopware 6 version (e.g., `shopware/testenv:6.7.6`). + +For apps, we additionally test: + +* `config.xml` per sales channel +* Install / uninstall behavior +* Styling and viewport issues + +Before publishing an extension, review the full test process to ensure fast approval. + +::: info +[Test your app for the Shopware Store (DE):](https://www.youtube.com/watch?v=gLb5CmOdi4g); EN version is coming soon. +::: + +## Store listing requirements + +All extensions must: + +* Be available in English, with 1:1 translation between English and German. For the German store, German language is required. All extensions will be released in both the German and International stores. +* Use meaningful short and long descriptions. + * The short description (150–185 characters) teases your extension in an overview, along with "Customers also bought" and "Customers also viewed" recommendations. It is also published as a meta-description. + * Long descriptions (minimum 200 characters) must describe the extension's functionality in detail. +* Accurately and clearly describe the extension and its use cases. +* Avoid the words “plugin” and “shopware” in the display name. +* Avoid blank spaces as filler text. +* Include clear, complete setup and configuration instructions. +* Use clean HTML source code. Inline styles will be stripped. + +These tags are allowed: + +```markdown +