Skip to content

Release notes Shopware 6.7.8.0

3.3.2026

Release notes Shopware 6.7.8.0

Abstract

Shopware 6.7.8.0 delivers technical improvements, deprecations, and stability fixes across the platform. It adds internal product streams, Elasticsearch indexing for relevant product custom fields, primary key validation in dal:validate, a new database table helper, migration generator adjustments, and CategoryIndexer optimizations. Several components and configuration options are deprecated in preparation for 6.8.0.0, including increment-based message queue statistics and unused reverse proxy settings. Administration updates include refactors and deprecations in product variants and listings, improved notification translations, and UI behavior adjustments. Storefront changes cover product detail improvements, configurable theme breakpoints, and better screenreader support for alerts. A critical fix addresses potential session deadlocks in file-based setups, alongside multiple bug fixes in core, admin, and storefront areas.

System requirements

  • tested on PHP 8.2, 8.4 and 8.5
  • tested on MySQL 8 and MariaDB 11

Improvements

Features

New internal comment for state machine state history entries

A new internal comment field was added to the state change modal which can be used to add additional information about a state change. The internal comment is only visible in the administration and not shown to customers. It can be found in the state machine state history modal (state change modal) on the detail page of an order.

Core

Indexing the product's custom fields

Custom fields used in product sorting and product streams, as well as those belonging to apps, are now included when indexing products with Elasticsearch.

Deprecation of increment-based message queue statistics

The increment-based message queue statistics system is deprecated and will be removed in v6.8.0.0.

What's changing:
  • The Administration notification center will no longer show indexing progress notifications (e.g., "X products will be indexed")
  • API endpoint GET /api/_info/queue.json is deprecated - use GET /api/_info/message-stats.json instead
Deprecated configuration options:
  • shopware.admin_worker.enable_queue_stats_worker
  • shopware.increment.message_queue
Deprecated code:
  • IncrementGatewayRegistry::MESSAGE_QUEUE_POOL constant
  • Increment-based handling in MessageQueueStatsSubscriber::onMessageHandled()
Why?

The increment-based statistics were often inaccurate due to hardcoded multipliers and missing decrements in edge cases. The replacement functionality was introduced in https://github.com/shopware/shopware/pull/8698

Immediate disable:

To disable the deprecated functionality before v6.8.0.0:

yaml
shopware:
    admin_worker:
        enable_queue_stats_worker: false

Internal product streams

A new boolean field internal has been added to product streams with a default value of false. This allows you to mark product streams as internal for system or plugin use, preventing them from appearing in merchant-facing selection lists throughout the Administration (e.g., in categories, cross-selling, CMS elements, or sales channels).

Use this feature when you need to create product streams programmatically that should not be modified or selected by shop administrators.

Database table helper class

A new helper class \Shopware\Core\Framework\Util\Database\TableHelper was introduced, which could be used to check the table for existence, columns, indexes, and foreign keys.

Deprecation of helper methods in \Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper

As a consequence of the introduction of the new table helper class, the following methods are deprecated and will be removed with the next major version:

  • \Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper::columnExists
  • \Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper::columnIsNullable
  • \Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper::tableExists

Migration generator improvements

The migration generator previously used a fixed format: fk.<table-name>.<column> for foreign key names. Doctrine does not support this format and creates broken migrations. Therefore, we changed to the format fk__<table-name>__<column> for foreign key names.

Also, the generator now sets CASCADE DELETE on foreign keys for the translation table references.

CategoryIndexer selective indexing optimization

The CategoryIndexer now skips tree/child-count updaters when parentId hasn't changed, and breadcrumb updater when name hasn't changed. All updaters still run for INSERT and DELETE operations.

Updated doctrine/dbal dependency

The doctrine/dbal dependency was updated to the new 4.4 minor version. They introduced many deprecations, especially in the SchemaManager tool, which also might affect you. Read more about it in their upgrade guide.

Primary key validation in dal:validate command

The dal:validate command now includes validation to detect mismatches between database PRIMARY KEY constraints and entity definition PrimaryKey flags. This validation prevents silent failures where queries return correct total counts but empty data arrays due to entity hydration failures caused by inconsistent primary key definitions. When a mismatch is detected, the command provides a clear error message indicating which fields differ between the database schema and the entity definition.

Deprecation of default value for serializer in #[Serialized] field attribute

When you use #[Serialized] field in your attribute entity you should always pass the serializer explicitly, as the default serializer does not work as expected. Additionally, the SerializerField will become internal in the next major release, as that field should be only used for attribute entities, but never directly in classic EntityDefinitions.

Administration

Product detail variants: configSettingGroups as computed and deprecations

In sw-product-detail-variants, the following changes were made:

  • configSettingGroups (now computed): Previously a data() property set by loadConfigSettingGroups(). It is now a computed property derived from productEntity.configuratorSettings and groups.
  • loadConfigSettingGroups() (deprecated): Marked as @deprecated tag:v6.8.0. It will be removed in 6.8.0 without replacement.

Deprecation of items prop in sw-entity-listing component

The items prop in the sw-entity-listing component has been deprecated and will be removed in v6.8.0. Please use the dataSource prop instead to align with the parent sw-data-grid component.

Before (deprecated):
html
<sw-entity-listing
    :items="entityList"
    :repository="entityRepository"
    :columns="columns"
/>
html
<sw-entity-listing
    :data-source="entityList"
    :repository="entityRepository"
    :columns="columns"
/>

The component will continue to work with the items prop for backward compatibility, but you will see a deprecation warning in the browser console.

Notification translations now update when language changes

Notifications now store translation keys directly in their title and message fields instead of translating them immediately. The template checks if the text is a translation key and translates it reactively, allowing notifications to update automatically when the user changes the interface language.

Help text support for color picker custom fields

The color picker type for custom fields now supports adding a help text. When creating or editing a custom field of type "Colorpicker" in Settings > Content > Custom fields, you can now specify a help text that will be displayed to users in the Administration.

sw-select-base clearable button default behavior changed

The showClearableButton prop in sw-select-base now defaults based on the required attribute:

  • When required is false or not set: clearable button is shown by default
  • When required is true: clearable button is hidden by default

Previously, the clearable button was always hidden by default (showClearableButton: false).

Migration:

If you relied on the previous behavior where the clearable button was hidden by default, explicitly set :show-clearable-button="false" on your select components.

Storefront

Selling and packaging information in the product detail page

  • Display the selling and packaging information with the product that has advanced pricing.
  • Deprecated block buy_widget_price_unit and it childrens in Resources/views/storefront/component/buy-widget/buy-widget-price.html.twig, will be moved into Resources/views/storefront/component/buy-widget/buy-widget.html.twig.

Default theme breakpoints now available in theme config

The default layout breakpoints in the Storefront were hard-coded before and couldn't easily be overriden. Now you will find new theme config fields in the default config, which serve as the default values. The fields are hidden in the visual configuration, so they serve as a feature for theme developers for now. You can override the following config fields in your custom theme.json file to change the default breakpoints. The fields are mapped to the existing hard-coded configuration. The configuration is only passed in Twig and JS currently and there is no direct usage in SCSS, as they represent the Bootstrap default breakpoints. If you want to make a full override, you can simply configure the Bootstrap breakpoints in your custom SCSS and use the theme config values for that.

  • sw-breakpoint-xs
  • sw-breakpoint-sm
  • sw-breakpoint-md
  • sw-breakpoint-lg
  • sw-breakpoint-xl
  • sw-breakpoint-xxl

Make static alerts announced in the screenreader

Static alert boxes that are rendered in the DOM on page load were previously not read out by screenreaders. The role="alert" did not have an effect. Only role="alerts" added to the DOM by JavaScript were read out.

To solve the screenreader issue with static alerts, we introduced a new parameter announceOnLoad. When announceOnLoad is set to true, the alert box content will be announced in the screenreader right after the page is loaded. The alert box will apply an additional JavaScript plugin that attempts to trigger the screenreader. This is done by changing the DOM within the aria-live region after a short delay, which tells the screenreader to read it.

{% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
    type: "primary",
    content: "An important message on initial page load",
    announceOnLoad: true
    ariaLive: 'assertive' {# Define the priority of the alert #}
} %}

App System

Fixed custom headers for app flow action webhooks in async mode

Custom headers defined in app flow action configurations are now correctly sent when webhooks are processed asynchronously via message queue (when admin_worker is disabled). Previously, these headers were only sent when admin_worker was enabled (synchronous processing).

Hosting & Configuration

Deprecated HTTP cache reverse proxy configuration

The following HTTP cache reverse proxy configuration options have been doing nothing since 6.7.0.0 and are therefore now deprecated. They will be removed in version 6.8.0.0:

  • shopware.http_cache.reverse_proxy.use_varnish_xkey
  • shopware.http_cache.reverse_proxy.ban_method
  • shopware.http_cache.reverse_proxy.ban_headers
  • shopware.http_cache.reverse_proxy.purge_all
    • shopware.http_cache.reverse_proxy.purge_all.ban_method
    • shopware.http_cache.reverse_proxy.purge_all.ban_headers
    • shopware.http_cache.reverse_proxy.purge_all.urls

If you are currently using any of these options, you can safely remove them from your configuration.

Configurable Elasticsearch shard and replica counts

The number_of_shards and number_of_replicas settings for Elasticsearch indices are now configurable via environment variables instead of being hardcoded.

For the Storefront/Store API Elasticsearch:

  • SHOPWARE_ES_NUMBER_OF_SHARDS (default: empty, meaning Elasticsearch default)
  • SHOPWARE_ES_NUMBER_OF_REPLICAS (default: empty, meaning Elasticsearch default)

For the Admin Elasticsearch:

  • SHOPWARE_ADMIN_ES_NUMBER_OF_SHARDS (default: 3, will also be empty with next major)
  • SHOPWARE_ADMIN_ES_NUMBER_OF_REPLICAS (default: 3, will also be empty with next major)

Critical Fixes

Session deadlock fix for file-based sessions

A new configuration option shopware.cache.disable_stampede_protection has been added to prevent deadlocks when using file-based sessions with Symfony's cache stampede protection.

Problem:

A deadlock (ABBA pattern) can occur when:

  • Process 1: Acquires Session File Lock → Needs Cache → Tries to acquire Cache Lock
  • Process 2: Acquires Cache Lock (stampede protection) → Needs Session → Tries to acquire Session File Lock
Solution:

Set shopware.cache.disable_stampede_protection: true in your configuration to disable file-based cache locking when file-based sessions are in use.

yaml
shopware:
    cache:
        disable_stampede_protection: true
Note:

This is an opt-in fix for environments where Redis is not available. Using Redis for both sessions and cache is the recommended solution. Disabling stampede protection may increase database load under high concurrency when cache entries expire.

Fixed bugs

  • #14524 fix: display selling and packaging information in product detail page
  • #14528 fix: release date input is vertically misaligned on Admin product detail page
  • #14548 fix: Google reCAPTCHA input visibility and error handling
  • #14536 fix: partial entity loading with nested association
  • #14607 fix(storefront-js): JS errors in CmsGdprVideoElement

See all fixed bugs in this release: https://github.com/shopware/shopware/milestone/28?closed=1

Credits

Thanks to all diligent friends for helping us make Shopware better and better with each pull request!

See all contributors on this page: https://github.com/shopware/shopware/releases/tag/v6.7.8.0#Contributors

More resources

Get in touch

Discuss about decisions, bugs you might stumble upon, etc in our community discord. See you there 😉

Was this page helpful?
UnsatisfiedSatisfied
Be the first to vote!
0.0 / 5  (0 votes)