---
title: "What's new in the PIM for Shopware 6: changelog and updates"
description: "Everything new in the PIM for Shopware 6 up to version 1.12.78: marketplaces Amazon, eBay, OTTO, Kaufland, Zalando, Mirakl, Galaxus and CHECK24, variant order, highlight missing product data, dark mode and more."
url: https://pim-shopware.de/en/whats-new.html
language: en
---
# What's new in the PIM for Shopware 6
Changelog of the PIM plugin for Shopware 6.6 and 6.7: all new features and improvements, newest first. Current version: 1.12.78.

**New: Zalando, Mirakl (Conrad, MediaMarkt, Decathlon and more), Galaxus and CHECK24 1.12.78**
- Zalando: prices, stock and promotional prices via the zDirect API, orders in Shopware.
- Mirakl marketplaces: Conrad, MediaMarkt and Saturn, Decathlon, Douglas, Bauhaus, Hornbach, OBI, Fressnapf, Home24, Voelkner, Manor and more, one account per operator.
- Galaxus and CHECK24: product data, prices and stock as files, updated every 15 minutes.
- Amazon: create new products via product types, also in test mode. Logos of all marketplaces in the overview and order list.

**Marketplaces: returns, invoices, reports, messages and shipping labels 1.12.69**
- Returns with credit note and stock back, invoice upload to the order at the marketplace.
- Reports with revenue, fees, refunds, cost of goods and margin, plus payouts.
- Customer messages with AI reply suggestions, review requests after shipping.
- Shipping labels for DHL, GLS and DPD, Buy Shipping and FBA on Amazon, price rules with minimum margin and repricing.

**Marketplaces: categories by AI, scheduled discounts, several accounts 1.12.62**
- Categories and attributes for Amazon, eBay, OTTO and Kaufland mapped automatically by AI.
- Scheduled discounts per marketplace for presets, product groups, manufacturers and categories, visible and filterable in the product list.
- Several accounts and countries per marketplace, products per category, errors by email, permissions in the configuration matrix.

**New: Marketplaces add-on for Kaufland, eBay, OTTO and Amazon 1.12.55**
- Shopware marketplace integration in the PIM: list products on Kaufland, eBay, OTTO and Amazon, every marketplace its own add-on, free for 14 days.
- Selection via filter presets, dynamic product groups, manufacturers and categories, check for missing, invalid and duplicate EANs, also for inherited values.
- Own marketplace texts as a separate language, by AI from the PIM configuration or with a separate account.
- Price rules, safety stock and sync every 10 minutes. Overview as tiles, booked marketplaces first, log collapsible and clearable.

**Marketplace orders in the Shopware order list 1.12.40**
- Own sales channel and number range per marketplace by default, for example KL-10000.
- Marketplace filter at the top of the order list as a dropdown with the active marketplaces, orders with the marketplace logo.
- Shipping and cancellations are reported back to the marketplace.

**Test mode for marketplaces without a seller account 1.12.30**
- Simulate the marketplace: upload, sync, test order, shipping and cancellation notices run as if real, nothing is sent to the marketplace.
- Delete test data removes test orders and books the stock back.

**Smaller improvements up to 1.12.29 1.12.29**
- Dropdowns open upwards when there is not enough space below.
- Add-ons: cards of equal height, buttons aligned at the bottom.
- Display: no more light flash when switching from the list to the product.

**New: set the variant order and group order in Shopware per product 1.12.22**
- Order of variants: In the variant overview of a product you change the order of the variants with arrows. It is saved per product and used as the order of the options in the shop, the preselection keeps its position.
- Group order: The new"Group order" button next to"Main product as preselection" sets per product the order in which the property groups appear on the product page, for example colour first, then size. It appears for every product with at least two property groups.
- Live right away: After every change to the order, the group order or the preselection the shop cache for the product and all variants is cleared.

**New: highlight missing product data in Shopware 1.12.14**
- Highlight missing data in orange: New setting in the configuration matrix, Products and Variants tabs. Marks every field still missing for completeness on the master data page, in the variant window and in the variant table, including images, tier prices and cross-selling.
- Collapsed sections with missing fields are coloured directly. Only fields with a weighting in the completeness score count, values inherited by variants count as present.
- Highlight color of your choice, one consistent border for all marked fields, applies without reloading.

**New: dark mode in the PIM for Shopware 6 (light, dark, automatic) 1.12.5**
- Switch in the header of every PIM page: light, dark or automatic (follows the system or the administration).
- Saved per user and shared with the Plugin Suite. Tables, notifications, windows, dropdowns and tooltips follow the chosen mode, regardless of the Shopware administration.

**Improvements and fixes up to 1.12.7 1.12.7**
- Price filter in the product list:"missing or 0.00" and"set" take variants into account with their effective price, own or inherited.
- Bulk editing: The chosen source (selection or preset filter) is highlighted more clearly.
- Category chips: Hovering shows the category path and the related shop.
- Tier prices for variants: Saving no longer fails with error 1062, prices no longer change SEO URLs. The catalogue PDF writes fonts and temporary files via the Symfony filesystem.

**New: Catalogues and data sheets add-on Add-on**
- PDF catalogues and price lists with cover, clickable table of contents, foreword and chapters from category, preset, dynamic product group, manufacturer, selection, content page or free text, style B2B or B2C.
- Design from the shop theme with colours, logo and font, chapter headers, header and backgrounds. AI designer for suggestions from a briefing, AI images via fal.ai or Higgsfield.
- In the shop: publishing via link, catalogue page with SEO texts, release for logged-in customers or customer groups, QR codes and campaign parameters, download count in the dashboard.
- Product data sheet as PDF on the product page. New Add-ons tab with status, price, trial and booking, free 7-day trial.

**Finer-grained permissions New**
- Activate and deactivate separated: the permission"Set active/inactive" is split into"Activate products" and"Deactivate products". Per permission you can name regular users, and for them the approval workflow is skipped for exactly this action.
- New permission"Create properties and options": if it is off, the inputs for new groups and options are missing in the product, the variant generator and bulk editing, and the CSV import does not create missing groups and options.
- Active switch handled the same everywhere: the switch in the master data and the two in the variant view now follow the same permissions as the list.
- Fixed:"Generate URL in custom field" no longer aborts with existing SEO URLs, and custom fields can be edited in other languages again under Shopware 6.7.

**Maintaining warranty data (GARAN label) New**
- Its own section in the master data: warranty period in months and the retailer confirmation. Both fields exist in Shopware from 6.7.14; in older installations the section is visible but locked and says so.
- Per variant as well: the warranty period is an inherited field, without an own value the main product setting applies. The variant view has its own warranty section that can be hidden through the field configuration.
- In bulk edit: the"warranty" action, set or remove the period and set, revoke or leave the confirmation unchanged. Under Shopware 6.7.14 the fields are hidden and are not written either.
- Notes in the section state the conditions under which Shopware outputs the label at all: more than 24 months, confirmed data, a maintained manufacturer including the manufacturer product number.

**Length targets and master prompt for the AI New**
- Length targets per field in words and characters: product name, SEO title, meta description and description. Defaults are 120 characters for the product name, 60 for the SEO title, 155 for the meta description and 250 words or 1500 characters for the description, the lengths search engines usually display in full. A value of 0 means no target.
- No more truncated JSON: the token budget used to be fixed at 2000 for the whole response, with many selected fields it could break off mid-JSON. It now follows the configured lengths.
- Master prompt: a central instruction passed to every AI request, in the detail view, in bulk edit and when copying from the default language, regardless of provider. Salutation, brand spelling, mandatory information or forbidden phrasings can be set once instead of on every run.
- Its own section under"Texts & translations", directly behind the master prompt, as a compact table instead of four full setting rows and with a short explanation per field.

**Properties, tier prices and duplicating New & Fixed**
- Action"properties to variants":"reset to inheritance" removes the variants' own properties so they show those of the master product again and follow it later on."Copy from master product" writes them as own values into every variant. Background: as soon as a variant has own rows, for example from an import, these replace the inherited ones completely, even when incomplete.
- The tier row from quantity 1 is created automatically. Shopware reads the tiers of a price rule as a complete price table; without the row from 1, a single tier was shown in the storefront as a normal unit price instead of a table. The row always carries the base price, and for variants without an own price that of the master product. The new bulk action"tier row from 1" repairs existing data.
- Duplicating now takes tier prices along: for the main product and for every variant. They exist in Shopware as separate records and were not covered by the field list the duplicate is built from, so they had to be recreated. Applies to both routes, detail view and product list.
- Missing texts, new option"own variant text only": variants count as hits when they have no text of their own, regardless of whether the master product has one. Without this option the inherited text counts as present, as before.

**One package for Shopware 6.6 and 6.7 New**
- One edition for both lines: the administration file is additionally placed under js/, from where Shopware 6.6 loads it; 6.7 still uses the Vite manifest. Separate packages per Shopware version are no longer needed.
- Import and export profiles are now failure-safe: if loading the saved profiles failed on opening, the list stayed empty, and saving a profile then made the server delete all the others. Every save and delete now reads the current state immediately beforehand, changes only that one profile and then writes. If reading fails, nothing is written.
- The limit of 20 profiles is gone: it silently dropped the oldest profile on saving. Deleting and rewriting run in one transaction, so the previous state survives an error.
- More robust on unusual installations: every plugin call uses the administration API base instead of a hard-coded path. If the shop runs in a subdirectory or behind a proxy, all functions previously stayed without data.

**Copy texts from the default language New**
- Bulk edit AI & texts: New function"Copy from default language". When a sales channel uses its own language, no own texts exist there at first, the storefront shows the inherited content, but without a starting text nothing can be edited or rewritten by AI. Name, description, meta title, meta description and keywords are copied; fields and target languages are freely selectable.
- Empty fields only, or overwrite deliberately: By default existing texts stay untouched; overwriting can be enabled optionally. Whether a target language already has its own texts is checked against the translation records, not against the inherited display values.
- Categories: The same bulk action exists in the category module, with its own dialog: it states the number, target language and fields up front, shows a progress bar while copying and refreshes the view afterwards.
- AI texts now also write the product name:"Product name" is available as an additional field, for ChatGPT as well as Claude. For safety it is not preselected, so existing names are not overwritten by accident; overly long names are truncated to 255 characters.

**Translations: filter, completeness and language inheritance Improved**
- Language inheritance is taken into account: If a text only exists on the parent language it still applies in the storefront. The"translation missing" filter and completeness now check the whole language chain instead of the language alone, filter and percentage match again.
- Completeness follows the sales channel: Translatable fields are calculated against the language of the selected channel instead of the system language. Without a channel selection the system language applies as before.
- Filter chip shows the language: Instead of just"translation missing" it now reads, for example,"Translation: name missing (Alpendampf DE)", making clear what the result refers to.
- Category completeness: For channel languages only own texts count, matching the editing form next to it. Previously inherited content was included and the value was too high.
- RRP filter:"RRP missing" and"RRP lower than gross" are now resolved server-side across the entire catalogue, so hit count, paging and result match.

**Product list with variants noticeably faster Improved**
- Only the fields actually needed: Displaying variants previously loaded complete product records, including every field the list does not show. Now only the displayed fields are loaded, along with preview image and variant options. Custom columns are still taken into account.
- Completeness comes from the server: The percentage used to be calculated per row in the administration, which required loading the description and meta texts of every variant. The server now supplies it, as it already calculates the same way for the completeness filter. The transferred data volume drops considerably.
- Load timings: After loading, the times per phase are available in the browser console under window.stawPimLastLoadTimings, purely diagnostic, with no effect on operation.

**Variant inheritance: completeness, status and duplicating New & Fixed**
- Completeness for variants: Variants showed values that were too low, even though name, description, price, cover image, manufacturer, categories and properties are inherited from the master product. If a variant has no own value, the master product value now counts, in the list as well as on the dashboard. Product number and stock stay variant-specific by design.
- Active status resolved correctly: Variants were consistently shown as inactive in the list although they were available in the storefront. An own value on the variant wins, otherwise the master product status applies.
- Duplicating with selectable inheritance: When duplicating a variant product, a dialog asks which fields the variants should inherit from the main product (images, name, price, weight, EAN). Inherited fields automatically pick up later changes. For simple products the dialog does not appear.
- Own URL for the duplicate: When duplicating, the new master product pointed at the original through its main variant, so its URL effectively resolved to the original. The main variant is now remapped to the new variant and the SEO URL is regenerated from the channel template.

**Master data: tags, search keywords and description Fixed**
- Additional search keywords: Keywords were not saved, or were lost when reopening. The area is now its own field: type a keyword, confirm with Enter, existing ones appear as removable chips. A keyword not yet confirmed is included automatically when saving.
- Tags: Tags stored on the product were not displayed. They are now loaded directly from the tag directory and shown as chips; new ones can be added via search. For variants, tags inherited from the master product are shown as well.
- Description: Longer texts were cut off at the bottom and could not be scrolled, the field now has a maximum height with a working scrollbar. The"text colour" button was removed: colours set in the text write fixed values into the HTML that get in the way when switching themes or in dark display.

**Property translations straight from bulk edit New**
- Translation dialog per option: Every property option in the assignment tab has a pencil icon for entering the translated name directly, without leaving the Shopware property catalogue. Several languages can be maintained at once, each with its own text field and the associated sales channels for orientation.
- Missing translations are marked: Options without a translation are highlighted and labelled"no translation", with a summary and count at the top. Background: in that case Shopware shows the name from another language through the fallback chain.
- Checked against sales channels: What counts are the languages of the channels the affected products are actually assigned to, no longer the admin language, and not all channels of the shop. A sales channel filter still takes precedence.
- Can be switched off: The option"Show missing translations in bulk edit" sits in the configuration under the Bulk edit tab, section"Assignment / Properties". Enabled by default, and can be turned off for shops without translation work.

**Transfer properties and images to variants New**
- "Also assign to the master product": New checkbox in the assignment tab. When active, the selected options are additionally written to the parent product of the affected variants, keeping master product and variants in sync. A configuration option can preset it permanently.
- "Transfer properties to variants": Adds the missing properties of the parent product to variants that have their own properties. Background: inheritance works all-or-nothing per field, a single own property switches it off completely, so fewer properties appear in the storefront than are maintained.
- "Transfer images to variants": Creates own image assignments to the same media files for every variant without own images, including order, and sets the cover image. Display in the list then no longer depends on whether inheritance reaches the storefront. Variants with own images stay untouched.
- Deviations made visible: Properties that only sit on variants are highlighted in orange, affected groups get an orange dot and the counter bar states the number. Groups with"display on product detail page" switched off are marked"not in storefront".

**Clearing custom fields, CSV export filters and permissions New & Fixed**
- Clear fields custom fields: Product custom fields can now be selected and cleared just like master data, SEO and link fields. As custom fields are translatable, the existing language selection applies here too; the values are included in the snapshot before clearing. Deliberately without a select-all switch, so that dozens of fields are not cleared by accident.
- CSV export with"active filter": A whole block of list filters was silently discarded on export, so all products ended up in the file despite a filter being set. Affected were, among others, cover, manufacturer, category and property status, main category, delivery time, price and translation status. Filters that cannot technically be transferred are now named explicitly in the dialog instead of being ignored silently.
- Feature switch"transfer to variants": New switch in the config matrix (tab PIM super admin). It controls the three buttons for transferring images and properties to the variants. Enabled by default; when switched off only super admins see these buttons.

**Compact variant view, DATANORM 5.0 & further improvements New**
- Compact variant view (config matrix General Product list): variants displayed space-saving without large indentation, without preview image and with noticeably flatter rows, name and options preserved. Long variant names no longer overlap.
- DATANORM import expanded: support for DATANORM 5.0 (own field layout for name, price, EAN), any volume extension (.001 -.999) and additional record types (long text, prices/DATPREIS).
- Bulk edit: the"restock time (days)" field can now be set and cleared via bulk edit, incl. undo/snapshot.
- Category management: the language selector now follows the languages assigned to the active sales channel; additional"active only" filter.
- AI providers more robust: OpenAI proxy fixed for newer models (gpt-5 / o-series) (max_completion_tokens, retry without temperature), Mistral defensively safeguarded.

**Category management expanded, SEO URLs, images, import/export, product assignment, completeness score New**
- SEO URL per category (slug per channel & language): old URL stays as 301, new becomes canonical and survives reindex; empty field resets to Shopware automatic.
- Category image (cover) from media library or upload with preview, plus language-dependent alt text for accessibility/SEO.
- Import/export: entire tree as multilingual CSV (one column per language for each field, field.locale; custom fields as cf. columns) or as JSON backup. Import resolves parents via parentPath, with preview, validation and backup.
- Product assignment: dynamic product group (stream) or StawPim preset filter with live hit count; on save the products are firmly assigned.
- Completeness score per category (description, meta, image) in the tree and live in the detail, plus a completeness filter.
- Bulk actions in the tree (active/inactive, show/hide in nav) with named snapshots,"history" and audit log; default sorting per category; duplicate incl. subtree.
- Translate separately next to"AI texts" (DeepL or AI provider), also as bulk across all selected categories.

**SEO URL, Shopware standard mode as alternative New**
- New config option"Shopware standard SEO URL" (separately for product detail, variant modal and Quickview). When active, the field shows the native Shopware SEO URL and hides the StawPim canonical field; the main category stays visible.
- Directly editable standard SEO URL field in master data, variant modal and Quickview, loads the existing URL (even without channel binding) and writes via PATCH to seo_url, no duplicates. Backwards-compatible: existing pattern shops stay unchanged.
- Duplicating: the duplicate's SEO URL (incl. variants) is automatically regenerated from the channel template, no more accidental redirect to the original.
- Release date moved after"Availability" in the config matrix.

**Category management, tree per sales channel, AI texts, WYSIWYG, drag & drop New**
- Dedicated modal: a"Categories" button (left of the Feed Generator) opens full category management, no switching to the Shopware standard needed. The tree is built per sales channel from the navigation root, with the entry category at the top, loaded directly via the category repository.
- Full feature set: create, rename, activate/deactivate, delete (confirmation in a PIM-CI dialog), fields per language (name, description, SEO), set parent category and type, assign layout (CMS experience) incl."Create new experience", external link for link categories,"Show in main navigation" toggle, custom fields, plus moving via drag & drop.
- Description as WYSIWYG editor (sw-text-editor) with visible HTML formatting, stable across category, product master data, variant detail and translations when switching entity/language.
- AI texts for categories: generate description, meta title, meta description and keywords across all four providers, with tone selection, a free"Additional instructions to the AI" field, an"Include subcategories" toggle (entire subtree) and"Overwrite existing texts".
- Dedicated"Manage categories" feature switch. Master-data-style channel bar with icons, detail sections collapsed on opening.

**AI text generation, four providers, current models New**
- Mistral AI and Google Gemini as additional providers alongside OpenAI and Anthropic, each with its own config section (enable, API key, model, connection test, default tone). When several are active, the provider can be chosen per generation; the product detail generator (incl. variants) and category management use all four.
- Updated model lists for all four providers.

**Properties, permissions & duplicating New & Fixed**
- Properties to variants: properties assigned to a product with variants are now written to all variants so they appear in the storefront (in Shopware a variant only inherits while it has no property rows of its own). The assign dialog robustly pre-selects existing properties on reopening, so repeated add/remove works.
- New feature toggles:"Duplicate products" (separate from"Create products") and"Generate variants (bulk edit)" can be shown/hidden for normal users; plus the"Manage categories" switch.
- Duplicating: variants of a duplicated product are created inactive (instead of keeping the original's active status).
- Firefox fix: variant group/option chips now also appear in Firefox in the product list; on search/filter the option chips load correctly.

**Availability, tier prices & detail editing Fixed**
- Availability: the"Clearance" and"Free shipping" switches now use the Stone & Water PIM toggle (indigo CI) and are cleanly centred to the height of the adjacent input fields, on the detail page and in the variant detail modal.
- Tier prices: the % sign in the savings column now sits correctly inside the input field.
- Texts: 39 confirmation/notice dialogs with missing spaces fixed (DE + EN).

**SEO URL system with two generators, custom field as bridge, Shopware-native indexing New**
- Step 1,"Generate URL in custom field" (token field): a token pattern (e.g. {mainCategoryPath}/{name}) is resolved variant- and language-accurately and written to the per-shop custom field staw_pim_canonical_<shop>. Available as bulk run (channel/language selection in the modal) and via per-product"Generate from pattern" button in master data and variants.
- Step 2,"Generate SEO URLs" (Twig database): a Twig pattern reads the custom fields (e.g. a migrated field with fallback to the canonical field) and is set as Shopware's native SEO URL template per sales channel, reindexing runs through Shopware's own SeoUrlGenerator. URLs then come directly from the custom field and survive every reindex.
- Migrated URLs are preserved: products with an existing URL (e.g. from a previous system in a custom field) keep it; new products use the field filled by step 1. Changed paths remain as 301 redirects.
- Targeted generation: writes only for the selected sales channels + languages, channels grouped by shop with language accordions,"select/deselect all" per group, nothing preselected. Per channel: badges with product count (only products actually visible in the channel) and"missing URL" counter.
- Dry-run and preview per channel/language before writing. Dry-run result cards colour-coded: new = green, change = blue, skipped = grey, warning = amber, error = red. The preview picks products visible in the channel whose pattern resolves, up to three real examples.
- Reset option:"Remove all product URLs (reset)" deletes all SEO URLs of the selected channels/languages (incl. Shopware's global detail URLs) and rebuilds fresh from the pattern. The other options visibly switch to OFF.
- Unique variant URLs: {options}, {properties} and {tags} deliver language-translated values, a pattern like {mainCategoryPath}/{name}-{options} produces a unique URL per variant and language. Variants resolve their per-channel canonical field incl. inheritance from the parent.
- Correct language fallback: chain requested language parent language system; empty/inherited translations are skipped, no accidental default language in foreign-language URLs.
- Pattern editor: textarea with auto-height (entire Twig expression visible), pencil icon, variable chips (token chips for step 1, official Shopware SEO Twig variables for step 2), live Twig syntax check (save blocked on error) and a warning when tokens and Twig are mixed. Per-sales-channel patterns for both generators.
- Robust conflict handling: paths already taken elsewhere (e.g. a category with the same slug) are cleanly skipped and reported as"path already taken" instead of aborting with a duplicate-key error. Conflicts shown with product numbers instead of IDs. The same URL in different shops is not a conflict (unique per shop + language).
- Fast even for large catalogues: channel counting via set-based aggregate queries, product lists via index-friendly UNIONs instead of OR self-joins, SEO dialogs open without delay, generation progresses normally even with tens of thousands of products. Polished progress bar with percentage.
- Safety net: if the canonical field yields an empty result, the SEO URL falls back to the product name instead of producing an empty path.

**Performance, bulk edits, CSV import and approvals many times faster New**
- Async queue indexing: bulk-edit product writes now default to Shopware's queue indexing instead of synchronous in-request indexing, and the write batch size was raised from 10 to 25, large bulk runs complete several times faster. Configurable (queue / disable / sync).
- CSV import without full reindex: after an import, only the imported products are reindexed asynchronously, the previous full-catalogue reindex is gone.
- Batched requests: audit-log writes are saved as a batch every 600 ms (instead of one request per product); bulk approvals use a batch endpoint (one request per 200 products); bulk translations and approval/audit writes run as INSERT … ON DUPLICATE KEY UPDATE, halves the SQL statements.
- Batched variant deletion: one IN delete instead of one statement per variant, with per-ID error feedback and automatic single-delete fallback.
- Snapshots once per session: bulk-edit snapshots and undo data (potentially several MB) are no longer loaded on every list start.
- Stale-response guard: rapid filter/page changes in the product list can no longer overwrite newer results with older ones.
- Bulk edit (fix): parent products that match the active filter now receive the change as well.

**Image upload via drag & drop in master data and variants New**
- Drop zone in the images section: drop files or click to open the file dialog, uploads go to the Shopware media library (product folder) and are immediately assigned to the product, with progress display.
- First image automatically becomes the cover if none is set yet.
- Variant logic: an uploaded image becomes the variant's own image (overrides the inherited one). Removing it restores inheritance from the main product.

**Approval workflow, new status"In progress" New**
- Editors can set the"In progress" status themselves on a product to signal it's currently being worked on. Approve/reject/submit remain available in parallel.
- Reflected everywhere: status badge + button in the detail view, filter and status indicator (indigo) in the product list, and the approval statistics in the settings.

**Product overview & usability, price sorting, all manufacturers, category chips, toolbar New**
- Sortable price column: clicking the header sorts ASC/DESC, server-side via the price accessor.
- All manufacturers in the filter: the manufacturer filter now loads all manufacturers paginated instead of capping at 500, the list no longer breaks off alphabetically, free-text search finds late names too.
- Category chips: assigned categories are listed as removable chips below the tree (small × to remove), instantly visible what's selected.
- Action buttons in their own row: Feed Generator, CSV import/export and create product now always sit in their own row above the search, the search field keeps its full width on all viewports.
- Tab bar: on narrow windows, a thin horizontal scrollbar appears when tabs overflow, every tab stays reachable.
- Article number column uses the same font size as the product name. The SEO/canonical URL field is always shown in master data.

**SEO URL slug handling, umlauts, slashes, dots and Shopware's escaper Fixed**
- Umlauts and special characters in static pattern text (e.g. a literal"für/" in the pattern) are now converted correctly (ae/oe/ue/ss) when writing to the custom field, previously literal text passed through raw and later broke SEO URL generation.
- Slashes and dots are preserved in token values (category names with"/", article numbers with"."), only true special characters like"&" or spaces are converted to the separator. Preview and server generation behave identically.
- Twig |raw auto-injected: Shopware's SEO Twig environment slugifies every printed value, stored slashes turned back into"-" during generation. Bare Twig outputs of path fields now automatically get |raw in all generation paths; the variable chips insert fields with |raw directly.
- Deterministic category path: without a set main category, the fallback now prefers the deepest assigned category (longest path) instead of an arbitrary one; with an empty category.path column (indexer backlog), the ancestor chain is reconstructed via parent_id.
- No more silent UUID custom fields: if the channel list wasn't loaded yet during generation, the field name silently fell back to a channel-ID suffix and created new fields, the admin now uses a second name source, skips channels without a resolvable name with a clear message, and the server rejects ID-fallback keys.
- Migrated field strictly checked in the current language (without Shopware's translation inheritance), values from another language no longer win. Multi-line patterns no longer pass line breaks through the template wrapper (|trim).

**Feed Generator, reachable in maintenance mode, domain-independent API route New**
- Feeds stay reachable in maintenance mode: the storefront feed route sets allow_maintenance, plus an early kernel subscriber answers feed requests before Shopware's storefront machinery kicks in (session start, maintenance resolver). Google Merchant / ERP keep running during deployments.
- New domain-independent fallback route /api/staw-pim/export/<token>.csv (no login) for environments where the storefront URL redirects (language-path domains, redirects). The alternative URL is shown in the feed settings.

**Localisation, diagnostics & cleanup New**
- ~55 hard-coded German strings (SEO generator UI, modals, notifications, toasts) converted to snippets, the interface is fully available in German and English.
- Configuration cleaned up: two dead settings removed; the AI"default tone" setting is now actually applied (was previously ignored).
- Support diagnostics: session error log (last 50 entries), previously silent error paths now log failures so problems can be diagnosed via the browser console even without server log access.
- Internal test suite: lightweight test runner (no PHPUnit) checks SEO fallback logic, snippet consistency between de-DE and en-GB and version consistency on every release.
- Stability: dead routes/methods removed, missing translations added, store compatibility (static code analysis) fixed.

**Feed Generator, streaming performance for large catalogues New**
- DBAL streaming in 2,000-batches: Feed generation doesn't load product data all at once into memory, it iterates through batches and emits row by row. Even catalogues with tens of thousands of products run through without memory issues.
- Keyset pagination instead of LIMIT/OFFSET: The batches use seek pagination on the product number (indexed column). Unlike LIMIT … OFFSET, this doesn't slow down as you page deeper, output time stays linear with the number of products, whether at position 100 or 50,000.
- gzip compression over HTTP: If the requesting client sends Accept-Encoding: gzip (all modern ERP/crawler/browser clients do), the response is compressed server-side. Feed CSVs typically compress by 80-90 %: significantly shorter transfer time, less bandwidth.
- File mode for very large catalogues: Per feed you can choose the"File" mode. A scheduled task pre-generates the file (every 15 min, as staw-pim-direct-feeds/feed_<token>.csv in Shopware's private file system), and the controller serves the ready file, no regeneration on every request. Ideal for ERPs that poll several times per hour.
- Memory limit safety: The feed endpoint defensively sets the PHP memory limit to 1 GB (@ini_set), even very wide column selections with dozens of custom fields generate cleanly.

**Feed Generator, list, filter templates, renaming, multiple feeds per profile New**
- List as an accordion: Each feed as a compact row with name, status pill ("feed active" /"no feed"), feed URL preview, filter template chip and product count chip. Clicking the row reliably opens and closes the editor (chevron on the right rotates).
- Built-in templates and custom profiles: Selector"Create feed from template / profile" at the top of the Feeds tab. Built-in templates (master data, prices & stock, SEO, images, variants, full export) automatically create an export profile with the matching field selection, activate the feed and generate a token. Your own profiles can be activated directly as a feed.
- Filter templates instead of simple checkboxes: In the feed editor you pick a saved filter template. All criteria that can be mapped server-side are applied, so the feed filters like the product overview. Only approval status and"RRP invalid" cannot be mapped, the editor shows which criteria take effect.
- Live product count: Each feed row shows a chip with the number of included products, determined live from the catalogue. Direct orientation on how large each feed is.
- Renaming and deleting: Name field in the editor (name must be unique). Trash icon per row with confirmation. The active profile and product count chip move along automatically.
- Multiple feeds per profile: Feeds are decoupled from the source profile, you can create any number of feeds for the same profile (e.g. a"Master data" profile as basis for multiple filter templates).
- Backend server-side filtering: The FeedExportService applies manufacturer, category and stock range directly in the CSV/XML (incl. variant inheritance to the main article).
- Automatic migration: Existing feeds from the old model are automatically migrated on first load, tokens and URLs remain valid.

**SEO URL pattern per sales channel New**
- Custom pattern per shop: New option in the config matrix under SEO URL. When enabled searchable shop dropdown, per sales channel a different URL pattern can be defined. Shops without their own pattern continue to use the default pattern (visible as placeholder).
- Variable chips context-aware: Clicking a variable inserts it into the currently focused pattern field, whether default or shop-specific. The live preview shows the pattern of the selected shop.
- Generator now processes variants too: Previously only master articles got an SEO URL written. Now variants too, inherited fields (name, manufacturer, categories, main category incl. sales-channel-specific) are resolved from the parent product. Variant-specific values like {options} stay the variant's own.
- SEO URL accordions collapsed by default: consistent with the other tabs.

**Language dropdown in bulk-edit New**
- Language selection for translatable fields: Meta title, meta description and SEO URL (SEO tab), custom fields and packaging unit (shipping tab) now get a language dropdown, as soon as a value is entered.
- Multi-language writing: The value is set in the default language AND additionally written into every selected language, e.g. packaging unit set in German and English simultaneously.
- Deliberately without language selection: Product unit / unit of measure (it's only a reference to a unit) and all language-independent fields (price, stock, EAN, weight, manufacturer, status, dimensions).

**Gross and net prices separated New**
- Purchase price gross + net in bulk-edit as two separate actions, the other value is automatically calculated via the product's tax class
- CSV import/export: separate columns purchasePrice_gross and purchasePrice_net with alias detection for German and English spellings (ek_brutto, einkaufspreis_netto, cost_gross/net etc.), existing single-column imports remain backwards-compatible
- Config matrix: all four price types (sales price, purchase price, list price/RRP, lowest 30-day price) can be shown/hidden independently for gross and net, both for master articles and variants

**Bulk-edit, complete filter display Improved**
- All preset filters visible: manufacturer, categories, tags, properties, stock, price, weight, date ranges, visibility, tax class, delivery time, dynamic product groups and more are displayed as chips before each bulk-edit
- Readable resolution of IDs: with-variants and sales channel filters now show clear names instead of UUIDs
- Clear separation: product count + active filters as a coherent info block,"No filters active" remains red as an intentional warning

**Quickview modal overhauled New**
- Modal header: variant name in front (large, dark), SKU behind it (small, grey), same as the master variant view
- Uniform input fields: label on top, input below (42 px height), consistent with the rest of the plugin
- Expand all / collapse all button in the modal header, same as in the master data detail view

**Quickview & inline edit Established**
- Quickview modal: All key master data, prices, stock and SEO directly from the listing
- Inline edit: Stock, price, EAN, manufacturer number and weight directly in the table row
- Feedback: After saving, a message confirms success or names the error with its cause

**Variant generator Extended**
- Variant matrix: Price, stock or active status of all variants in one table
- Unified search: One search filters properties and options simultaneously
- Pattern accordions: SKU and name as separate accordions with clickable variable chips

**Config matrix & UX New**
- Adjustable section order for product detail and variant modal
- Default tax rate automatically preselected for new products
- Validation modal with scroll-to-section for required-field errors
- Data inheritance parent variants as dedicated bulk action

**AI Extended**
- Claude (Anthropic) as second AI provider: own section in the config matrix, usable in parallel with ChatGPT
- Provider switch in the generator modal when ChatGPT AND Claude are active
- AI in bulk-edit with concurrency control against rate limits
Step-by-step instructions for every feature are in the manual for the PIM for Shopware. You get the plugin in the Shopware Store.
