This release bundles ~20 fixes and small improvements from an extensive customer-feedback round.
The focus is on variant inheritance behaviour, the property pickers, and the inline editing
experience.
## Variant Health column
- Variants no longer show a misleading 100% when the parent has missing translations. The Health
badge on a variant now reflects gaps it inherits from its parent. The tooltip marks those entries
with "inherited from parent (also missing)" so you know where to fix it.
- The Manufacturer column on variants now shows the value inherited from the parent (with the
inheritance link icon), instead of an em-dash, both before and after a hard reload.
- The Properties column on variants now falls back to the parent's properties whenever the variant
has none of its own — no more empty cells while the storefront still displays them.
- The Canonical URL check now considers the parent's setting too, so variants stop reporting a
false-positive "Canonical URL missing".
- After saving a canonical URL from the Manage Variants modal, the Health badge updates
immediately. No more pressing F5.
## Add single variant
- The new variant now reliably inherits the common default properties on every add — not just the
first one per modal session.
- The newest variant in a group now keeps the inheritance link icon consistently, matching its
siblings.
- A new option created inline (via the "NEW" button) on a variant is now also added to the
parent's configurator pool on save, so it survives the round-trip and the next picker open.
## Property and configurator option pickers
- Creating a new property option for a variant that inherits from its parent now applies on the
first try — no more "create, click Apply, doesn't take, search for it again".
- Creating a new option in the Configurator options picker now immediately shows the option in the
list and lets you tick it. Previously the new entry was hidden by the parent-pool filter.
- An option created in the Properties picker is now visible in the Configurator options picker
without a full reload.
- The picker footer was redesigned: the "Apply to variants" toggle and its explanation sit in a
clear info-blue panel at the top, with "Clear all" now in the action row below where it belongs.
Icon sizes inside the note are larger and easier to read.
## Save Changes modal
- The list of pending changes now shows clear language-tagged labels like *Meta title (German)*
and *Product name (English)*, instead of the raw internal keys that used to leak in for translated
fields.
## Stacked translation rows (per-language inline edits)
- Typing into a stacked translation field (name, meta title, meta description, custom-field
translations) now saves on every keystroke. The previous behaviour required Enter — clicking
elsewhere lost the value. Applies uniformly to every stacked translatable field.
- Pending changes on stacked translation rows now show the same "old → new" visual treatment that
the Product name column has had: the previous value is struck through and the new one is
highlighted in green, so unsaved edits are obvious at a glance.
## Image gallery modal
- Newly uploaded images can now be dragged into any position before saving — including above
existing tiles. Previously, drag-reorder of a new tile only stuck after a save + reopen cycle.
- A pure drag-reorder (without adding or removing tiles) now enables the Save button.
## Grid and general improvements
- The Configurator options column on parents with very large pools (hundreds of values) no longer
creates over-tall rows. Visible chips are capped at 8 with a "+N more" badge; the full list stays
available on hover.
- Pagination now scrolls back to the top of the list when you change page.
- TAB now advances cleanly to the next editable cell in the visible column order, instead of
jumping back to the start of the row.
- The Description preview tooltip now shows readable text rather than raw HTML markup.
- The Health-tooltip hover bridge keeps the tooltip open while you move the cursor into it.
- Inactive products keep their amber row tint visible across the full row, including the Active
toggle column, even after horizontal scrolling.
- The Save-changes confirmation modal's field list resolves every editable field type — text,
number, boolean, date, custom field, and their per-language variants — to a human-readable label.
Added
- Duplicate Product: clone an entire product (translations, media, properties, categories, tags, variants, prices) from the row context menu. The copy starts as inactive and named " (copy)".
- Copy Variant: clone any saved variant inside Manage Variants with one click. SKU is auto-suggested as "-copy" and unique-ified on collision.
- Inactive product visual cue: products with active = false now show an amber row background, an orange left border on the pinned column, a strikethrough name, and a small "Inactive" pill.
- Variant image modal now lists images inherited from the parent. One click promotes any inherited image as the variant cover.
- Bulk-edit for the Configurator options column: same diff-mode picker as Properties bulk-edit.
- Sort and filter by Delivery time, plus a dashboard widget that surfaces products without a delivery time set.
- Edit options on pending (not-yet-saved) variants — same pencil button that saved variants have.
- Repair variant translations: a one-click backfill in Manage Variants that copies the parent's translation rows into variants that have none. Variants with their own translations are never overwritten.
- New Product Health setting: "Audit each variant's own translations" (default off). When off, variants count translatable fields as filled whenever the storefront would show a value (inherited from the parent counts as filled). Stops the parent-100%/variant-45% noise on inheritance-heavy catalogs.
Improved
- Property picker now loads every option across every group instead of capping at the first 500. Catalogs with > 500 property options no longer have later groups silently truncated.
- Bulk-edit Properties now supports REMOVE, not just ADD. The picker opens with the union of selected rows' current properties pre-checked; unchecking removes that property from every selected row while keeping the rest intact.
- Inline-create of a property option detects numeric duplicates: typing "13 000" or "13,000" now matches an existing "13000" instead of creating a duplicate.
- Pending variants are now materialized as editable rows the moment the configurator pool grows, so you can review and edit each combination before save.
- Hover any product name to see the full text in a native browser tooltip (including stacked-translation values per language).
- The Health tooltip is now hoverable: moving the cursor into it (e.g. to scroll a long missing-list) keeps it open. Closes on a short delay after leaving both the badge and the panel.
- Friendly label "Has no variants" instead of the raw key in the Health missing-list.
- Property and option pickers gained a clear (×) button inside the search field that wipes the term and re-focuses the input.
- Sub-action buttons inside Manage Variants ("Add single variant", "Generate N missing combinations", "Restore inheritance for all variants", "Repair variant translations") now render as proper buttons instead of text links.
Fixed
- Variant Health now inherits Categories, Tags, and Sales channels from the parent — matches what the storefront renders for inheriting variants. Parents and variants with the same data now show the same score.
- Variant Health score uses the same denominator as the parent product, so when the missing checks are identical the scores match (previously the variant could read a couple of percentage points lower than the parent on identical data).
- Variants created by the plugin now ship with their own translation rows cloned from the parent — matches what Shopware's native variant generator does. Health audit and translation surfaces now treat plugin-created variants identically to native ones.
- Pending variants now consistently inherit the parent's full property set. Previously only the first explicitly-picked variant carried the parent's set.
- Inherited-translation indicator on the Product Name column now lights up correctly for variants whose auto-created own row carries the parent's value.
- Inline-created property options now actually persist on Apply. Previously the tick appeared in the picker but the option silently dropped on save.
- Per-variant property writes are reliable on freshly-created variants (no more silent no-ops on the first save).
- Duplicate Product no longer throws an "access" error on Shopware 6.7.
- Editing a SKU / EAN / MPN / weight together with per-variant properties in the same save no longer crashes with a binding error.
- The per-variant property picker now pre-checks the parent's inherited set even when the parent was loaded without its properties.
- Inline edits commit on blur (clicking outside the cell). Previously a fast type-then-click-outside sequence could discard the change unless you pressed Enter.
- Missing icons on the Copy Variant and Duplicate Product menu items are restored.
- The Configurator-options cell now shows only the options actually used by variants instead of the full pool, even before you expand the parent row.
## New
- **Sort by Product Health** — the Health column header is now sortable, and the *Sort BY*
dropdown gains two new presets (*Health — best first* / *Health — worst first*). Page-local sort;
pair with the *Below health threshold* filter to focus on weak products.
- **Edit options on a saved variant** — every variant row in *Manage Variants* now has a pencil
button next to its options chips. Click it to switch the variant to a different option combination
— even to a brand new colour that isn't in the pool yet — without deleting and recreating the
variant.
- **Sub-header dropdowns auto-close on mouse-leave** — the *Sort*, *View*, and *Translations*
panels close automatically after a short grace period when you move the cursor away. No more
clicking the trigger a second time to dismiss.
## Improved
- **Much more visible "inherited translation" indicator.** Values that the storefront would fall
back to from the default language now render with a warning amber tint, an orange left border, and
a larger chain icon. Hover the icon for an explicit tooltip. Hard to mistake an inherited
fallback for a real translation now.
- **Clearer Product Health tooltip.** When a per-language check counts as missing because the
product has no own translation row for that language, the entry now reads "… — no own translation"
and a one-line footnote explains the inheritance toggle. Clears up the "I see the chip on the row
but the popup says missing" confusion.
- **Property picker microcopy** — when editing properties on a parent that has variants, an info
note next to *Also apply to all variants* reminds you that variants which inherit from the parent
will show the new property automatically — no extra action needed.
## Fixed
- **Save crash when editing per-variant properties** ("Cannot read properties of undefined") when
an inline field change (SKU / EAN / MPN / weight) was combined with a per-variant property
override in the same save.
- **The per-variant property picker now pre-checks the inherited parent set** for variants that
don't have their own properties yet, even when the parent product wasn't loaded with its
properties association. *Restore from parent* visibly does its job.
- **Per-variant property writes now persist reliably** on freshly created variants.
- **Product Health configuration no longer loses the *Count inherited as filled* or *Per-language*
toggles** when you change column visibility. Settings configured in the dashboard's Health modal
stay configured.
- **Editing a variant's options no longer creates spurious additional variants.** When you switch
one variant to an option that wasn't in the pool yet, the pool is extended silently for that one
variant — the bulk "fill missing combinations" behaviour stays off unless you grew the pool
explicitly via the pool picker.
New
- Product Health — define what "healthy" means for your catalog. Pick the fields you care about
(name, description, images, manufacturer, EAN, SEO, canonical URL, layout — 14 fields out of the box,
optionally counted per language) and every product row in the editor shows a colored completeness
badge. Hover for the exact list of missing fields. Per-user configuration via user_config.
- Sync parent properties to all variants — when editing properties on a parent that has variants, a
new "Also apply to all variants" option adds the property to every variant as a union with its
existing properties. Variant-specific properties stay intact. Inheriting variants are skipped (they
pick up the new parent property automatically).
- Layout column — a new optional column for the CMS layout assignment (cms_page_id). Opens a modal
with preview, change, edit-in-CMS-designer (in a new tab), and remove actions. Mirrors Shopware's
native product layout assignment.
- Cross-selling column — a new optional column with a full CRUD modal. Add, rename, remove
cross-sells; pick products (for product-list type) or a product stream; toggle active; reorder. Save
persists through the standard sync API.
- Missing translations widget — a per-language tile on the dashboard showing how many parent products
are missing translations for the selected fields. Each row has a one-click "View & Fix" that jumps
the editor to those products with the relevant columns auto-revealed.
- Missing canonical URL widget — surfaces variant parents that don't have a canonical product set,
alongside the other product-health tiles.
Improved
- Bulk save error reporting — failed saves now show the exact field, row, and language that was
rejected, parsed from the JSON:API error pointer.
- Bulk-edit Properties picker — bulk editing now opens the standard property picker instead of a
plain text input. Property colors are preserved in bulk-edit mode.
- Bulk-edit selection focus — pre-selecting rows via the row checkboxes before entering bulk-edit now
filters the grid to those rows.
- Property picker natural sort — search results now order numerically (9 000 before 12 000; red 2
before red 10), and respect the property group's manual position when set.
- Variant rows natural sort — variants now sort by their option label using natural numeric
comparison, so 9 000 lands before 12 000.
- Parent options column shows only used options — when variants are loaded, the parent row's column
displays the union of options actually used by the variants instead of the full configurator pool.
- Per-chip tooltips — hovering any property or option chip now shows the full Group: Value text in a
native tooltip, on top of the existing cell hover popover.
- Modal titles include product name + SKU — every per-product modal (media, custom fields, layout,
cross-selling, picker, etc.) now reads Title — Product Name (SKU).
- Inheritance handling for the new columns — Layout supports variant inheritance with the standard
chain icon + restore button.
- Column chooser — Layout, Cross-selling, and Health are toggleable from the column chooser under
"Other".
Fixed
- Bulk save no longer fails with "Invalid payload. Should contain a list of associative arrays" on
Shopware 6.7. Translation payloads are now sent in the required list form.
- Clicking between words in an inline-editable name or description cell no longer jumps the cursor to
the end of the text or wipes typed content.
- Stacked translation rows no longer transfer values between languages on accidental drag — drag is
now blocked on the inline inputs.
- The save confirmation modal now shows real field labels instead of raw snippet keys.
- Newly-created properties (via the picker's "+ New" button) now persist correctly on save — the
missing productVersionId on the junction write that caused silent drops has been added.
- Property changes applied to all variants from the parent picker now actually save: variants are
- fetched on demand if not yet expanded, and inheriting variants are correctly skipped.
Variant management
- Inline-edit a saved variant's SKU directly in the Manage Variants modal — no more
delete-and-recreate to fix a typo.
- Manage Variants modal no longer offers to silently auto-generate the cartesian gap (e.g. "Save &
generate 114 variants") when you open a product with a stale pool. Cartesian fill now only triggers
when you've explicitly added options in the current session.
- Removing options from the configurator pool now also deletes the variants that referenced those
options — the storefront no longer shows strikethrough phantom options after a prune.
- Variant rows in the grid show a tinted blue background across every cell (was visible only as a
thin left rail before).
- Variant creation inside a new-product draft is blocked — matches Shopware's own behaviour; save the
parent first, then add variants.
SEO & canonical URLs
- "Use one canonical URL for all variants" toggle now persists correctly. The plugin writes both
`product.canonicalProductId` (FK the SEO indexer reads) and `variantListingConfig.mainVariantId` (FK
the product listing reads). The toggle stays enabled in Shopware's SEO tab and the storefront's
`` points to the chosen variant.
Editor UX
- Every editing modal title now shows the product name and product number (e.g. "Edit description —
vvv 1 (SW10002)") so you can tell which product you're modifying.
- Configurator-options and Properties cells now show a floating tooltip on hover that lists every
option (with color swatches) — no more "+29" without a way to see the rest. Sorting respects the
property group's custom sort order (e.g. numerical sizes).
- First data column pins to the left edge while scrolling horizontally so you never lose your row
anchor.
- Sort selection ("Z → A", custom presets, column-header clicks) is persisted per user — surviving
navigation away and back.
- Smart-filter "View & Fix" views are session-only; clicking a widget no longer overwrites your saved
column-visibility preferences.
New-product creation
- Sticky defaults: tax, manufacturer, delivery time, active, stock, gross/net price, min/max
purchase, purchase steps, and ALL custom-field values carry over from the previously created product.
- Numeric fields (min purchase, max purchase, purchase steps, purchase unit, reference unit, unit ID)
and custom-field values are now persisted on save — previously dropped silently with Shopware
falling back to defaults (e.g. min purchase set to 10 saved as 1).
- The column-chooser selection during creation is remembered for the next creation.
Custom widget builder
- New "Duplicate SEO URL" field (operators: is duplicated / is not duplicated) so customer-defined
widgets can target products with shared canonical URLs.
Fixes
- Typing in a cell, then clicking "Save All" without pressing Enter no longer drops the typed value
(inline-cell blur commits the change synchronously).
- Edits to existing products (properties, tags, custom fields, etc.) were silently rejected when the
product had a name only in another language or a zero gross price (B2B / net-only). Validation now
only checks fields the user is actually changing.
- Unchecking a property in the picker now consistently registers as a change (was: second uncheck of
the same option produced no diff because the picker and the change-detector read from different
sources).
- Saved-product manufacturer / delivery-time cell shows the chosen value immediately after selection
(was empty until you clicked the field again).
- Notification toasts no longer render empty placeholders for product name / SKU / count.
- 500 error opening the SEO URLs modal for parent products with variants — `Criteria.addFields()` was
passed an array; fixed.
Variant management
- Clearer error messages when saving variants — duplicate product numbers and conflicting
configurator options now show the exact reason instead of a generic 400/500.
- Pre-flight SKU collision check before posting new variants — conflicts caught before any data
leaves the browser.
- Inline editing of pending variants in the manage modal (SKU, MPN, weight, EAN) — no
delete-and-recreate.
- Single-variant creator now includes manufacturer number, weight, and EAN.
- Variants display in creation order by default; default page size raised to 50.
- "Restore inheritance for all variants" button in one click.
- "Canonical variant" picker collapses all variant URLs onto one canonical variant.
Grid & editor
- First data column pins to the left edge while scrolling horizontally.
- Tab navigation follows the live column order, including after drag-reorder.
- Cell-click no longer selects the whole text — caret lands at the end for word-level editing.
- Visible quick-delete pill on every row.
- Drag-and-drop reorder of product images in the gallery modal.
- New "SEO URLs" column opens a modal listing every canonical SEO URL across sales channels and
languages (variants included), with inline editing, duplicate badges, and per-channel reasons for
missing URLs.
- "View & Fix" smart-filter views are now session-only — they no longer overwrite your saved
column-visibility preferences.
Sales channels & SEO
- New product creation now assigns only active storefront channels (skips headless / proxy /
comparison) to avoid duplicate canonical URLs.
- Removing a sales channel and saving now actually deletes it (was silently rolled back before).
- New "No sales channel" sidebar filter.
- New "Duplicate SEO URLs" dashboard widget — flags products whose canonical URL path is shared with
another canonical row. "View & Fix" opens the editor pre-filtered with the SEO URLs column shown.
Custom widget builder
- New "Duplicate SEO URL" condition (is duplicated / is not duplicated) so customer-defined widgets
can target products with shared canonical URLs.
Properties & tags
- Enlarged property picker; selected options bubble to the top of each group.
- Property search ignores whitespace ("2000" matches "2 000").
- Add a new property option directly from the picker.
- Add a brand-new tag directly from inside the tags modal.
New-product creation
- Property, category, and tag selections are now persisted with the new product.
- User's custom column layout is restored after a creation.
Fixes
- Notification toasts no longer render empty placeholders for product name / SKU / count ("Product ''
deleted successfully" → now "Product 'X' deleted successfully").
New
- Inline product creation directly in the editor grid, with required fields clearly highlighted.
- Editor toolbar with quick access to bulk editing, column settings, sorting and view options.
- One-click sorting presets for the product list.
- View options: adjustable grid font size and a full-screen mode.
- Edit a product's sales-channel visibility directly in the grid.
- Variant management in one place: review existing variants, add single variants and maintain the
variant option pool.
Improvements
- Adding a single variant now offers every option of the relevant property group, not only the one
selected.
- Variant search now also finds options that are not yet in the variant pool.
- Columns can be reordered from the column settings dialog.
- Expanded variant rows are easier to spot in the grid.
- Required fields are more clearly marked when creating a product.
Bug fixes
- Restoring price inheritance on a variant now works — the variant follows its parent product's price
again.
- Saving images and saving all changes no longer collapse expanded variants; open rows stay open.
- Removing an option from the variant pool no longer clears it from the variant currently being
edited.
- Fixed an error that could appear when editing a product right after creating it.
- Fixed product creation occasionally failing because of a duplicate product number.
- Fixed a newly created product showing the wrong language's value after saving a translation.
- Category and sales-channel dialogs now keep changes made before they are reopened.
- Cancelling product creation no longer empties the grid.
- The media dialog now shows the product's existing images.
- Fixed switching languages having no effect in the stacked translation view.
- Fixed various minor display and icon issues in the editor.
Initial release of Admin Power Tools – Products providing an Excel-like bulk product editor and product health dashboard for managing and improving product data quality in Shopware 6 Administration.