Releases: saleor/saleor-dashboard
Release list
3.23.22
Patch Changes
-
#6800
ce151c1Thanks @mirekm! - Assign pickers no longer dead-end on an empty list. These dialogs hide rows you have already used up — products already assigned, warehouses already stocked, products with no price in the order's channel — but they did so only after fetching a page, so a page could be emptied entirely and the picker would claim nothing was left while thousands of items sat on later pages.Pickers now keep loading until they have rows to show. This covers collection products, voucher products/categories/collections, reference attribute values, product stock warehouses, and adding products to an order. Product pickers also gained Select all visible products.
-
#6792
c94a753Thanks @mirekm! - Homepage empty state softly promotes Saleor Pulse with a product preview video and install CTA. A dismissible bottom-left video announcement (ripple-backed) also introduces Pulse across the Dashboard. -
#6801
02abf9dThanks @mirekm! - Fixed a 1px gap where the save bar border did not line up with detail page sidebars (for example on channel settings). -
#6795
6e87979Thanks @mirekm! - Fixed the Dashboard becoming unresponsive after the browser tab was left inactive for a long time, for example after closing and reopening a laptop.Before: returning to a long-idle tab could fire a burst of duplicate session refresh requests, and installed apps could keep running with an expired token that was never renewed.
Now: the session is refreshed once for all pending requests, and app tokens are renewed based on when they actually expire, including an immediate catch-up when you return to the tab.
-
#6802
1a920f8Thanks @mirekm! - Detail page headers no longer show a generic back arrow. The leading control now uses the destination section icon (for example products, orders, or configuration) with a tooltip that names where it goes, such as "All products" or "All orders".Before: every detail view used the same left arrow with no label, so you had to guess where back would take you.
Now: the icon and tooltip reflect the actual parent list or hub, making cross-section navigation easier to scan.
Full Changelog: 3.23.21...3.23.22
3.23.21
Patch Changes
-
#6793
0d02fdbThanks @lkostrowski! - Fix entity ids being passed double-encoded to apps opened from the command palette (Cmd+K). Actions triggered from a detail page received ids such asUHJvZHVjdDo3Mw%3D%3Dinstead ofUHJvZHVjdDo3Mw==, so app queries failed withInvalid ID. Affected every entity context theSEARCH_ACTIONmount resolves (productId,orderId,customerId, …). -
#6755
3374776Thanks @lkostrowski! - Add aSEARCH_ACTIONextension mount that surfaces app actions in the global command palette (Cmd+K).Apps can register
SEARCH_ACTIONextensions to appear in the command bar withPOPUP,NEW_TAB, orAPP_PAGEtargets (WIDGETis not supported). Actions can be scoped to specific pages via the newoptions.viewsmanifest field (e.g.["PRODUCT_DETAILS", "ORDER_DETAILS"]); when omitted the action is available everywhere. When opened from an entity page, the current entity's context (e.g. product id, order id) is passed to the app just as it would be from that page's "more actions" menu. Actions are shown only when the current user holds the extension's required permissions. -
#6786
dd8da38Thanks @lkostrowski! - Configuration → Store settings now has an API access section with an Allow storefront traffic toggle, sitting between Customer accounts and Advanced.When the toggle is on (the default), anonymous clients and signed-in customers can call the GraphQL API directly. Turning it off restricts the API to apps and staff users — every other request is rejected with HTTP 401. Turning it off also shows what stops working: customer login and password reset, anonymous browsing and guest checkout, and schema introspection without app or staff credentials. Requires Saleor 3.23.
Full Changelog: 3.23.20...3.23.21
3.23.20
Patch Changes
-
#6763
c3c4202Thanks @mirekm! - Rich text quote blocks now render as a blockquote with a left border and muted caption, instead of two bordered form fields. -
#6782
f31967aThanks @mirekm! - Fixed a stray "0" showing under Order value when a gift card was attached to the order but no balance was used. -
#6778
afd4c35Thanks @wcislo-saleor! - Product media images no longer require a page refresh when the thumbnail is still being generated. Previously, when Saleor was not yet ready to serve an image, the dashboard showed a permanent "Image could not be loaded" fallback until the page was refreshed manually. Now the image is retried automatically with exponential backoff and appears as soon as it becomes available. -
#6780
2b8944dThanks @mirekm! - Homepage fullscreen widgets (e.g. Pulse) now render edge-to-edge under the tabs, without the previous content inset. -
#6690
5549155Thanks @jiuyige! - Fixed numeric attribute fields so values can be copied and pasted, making long numeric values such as EANs easier to enter without typing them manually. -
#6773
48c39daThanks @lkostrowski! - Fixed text-based app extension mounts in detail-page widget lists being aligned against the sidebar edge instead of matching the horizontal padding of widget cards. -
#6775
7c2cc86Thanks @mirekm! - Product edit save behavior is clearer and safer:- The save bar lists what will be saved (details, channels, variants). Partial failures show which steps applied, and a failed save keeps the draft for retry.
- Generated variants are staged until Save and appear in an editable draft grid (name, SKU, prices, stock).
- Retrying after a partial failure doesn't recreates variants the API already accepted.
- Tax class can be cleared to fall back to the product type default.
- Clearing rating or SEO title/description now persists correctly instead of silently keeping the old values.
Full Changelog: 3.23.19...3.23.20
3.23.19
Patch Changes
-
#6752
7ae356fThanks @EugenBodanov! - Add slug translation fields for products, categories, collections, and pages. -
#6667
8c919fbThanks @lkostrowski! - Widgets can now open a full-mode popup. A WIDGET extension can dispatch the newopenPopupApp Bridge action to open one of its app's POPUP extensions declared on the same page, passing an arbitrary JSON payload to it. This lets an app render a compact widget inline and let the user expand it into a larger popup view on demand. The popup always opens with a fresh access token and fills the full popup height. -
#6762
e49c816Thanks @mirekm! - Fixed product variant channel price being reset to 0 when availability was turned off and back on before saving. The original price is now kept when re-enabling availability in the same edit session. -
#6767
0bf4bebThanks @mirekm! - Reverted the client-side product media file size pre-check introduced in the media management improvements. Oversized images are no longer blocked in the browser before upload; Saleor Core enforces the configured size limit.
Full Changelog: 3.23.18...3.23.19
3.23.18
Patch Changes
-
#6753
c5e5f7cThanks @mirekm! - Improved product media and file attribute uploads:- Dropping or selecting images shows upload previews immediately, including on an empty gallery
- Multiple uploads report one summary notification instead of a toast per file
- Product media can be selected and deleted in bulk
- Reordering media is smoother, with clearer drag feedback; reordering is blocked while uploads are still in progress
- Invalid or oversized files are rejected before upload, with a clear warning
- File attributes (for example images on products and models) support drag and drop to upload or replace, and show a thumbnail when the file is an image
-
#6717
35580bfThanks @lkostrowski! - Gift cards can now be restricted to a specific customer, so that only that customer can redeem them.- When issuing a gift card, you can optionally pick a customer to restrict it to.
- On the gift card details page, the card information now shows the assigned customer, with actions to assign, change, or unassign them.
- The gift card list has a new "Assigned to" column.
- The gift card timeline now shows when a card is assigned to or unassigned from a customer (with the acting staff member or app), and displays the old and new balance for balance reset and balance adjustment events.
-
#6751
0176999Thanks @mirekm! - Fixed settings toggle rows so links in descriptions no longer flip the setting. Refunds & returns settings now warn before leaving with unsaved changes, and Orders & fulfillment opened from the orders list returns there on cancel/back. -
#6758
80a29afThanks @lkostrowski! - Fixed a 404 when opening the set/new password link (/new-password) while already signed in. Users authenticated via OIDC can now follow the link to set a password instead of hitting a "page not found" screen — the page is now reachable whether you're logged in or out. -
#6732
ed669ffThanks @lkostrowski! - Order details now surface price overrides for order lines. A "Price override reason" column is available in the products table (list and matrix views, toggleable via the column picker). Opening a line's price breakdown now also works for overridden lines — even when no discount applies — and marks the base-price row as "Overridden" with the recorded reason. Lines with a breakdown (discounted or overridden) show a subtle dot on the price so they're discoverable. -
#6751
0176999Thanks @mirekm! - Reorganized Configuration by merchant job (Store, Markets & channels, Products & catalog, Content, Shipping & delivery, Orders, Users & permissions). Store settings now use the shared Settings hub layout, with legacy webhook, stock, and address options under Advanced. -
#6751
0176999Thanks @mirekm! - Reorganized Configuration: Store replaces Miscellaneous/Site Settings, and Refunds & returns is reached from Orders & fulfillment instead of as a separate Configuration card. -
#6757
23994f7Thanks @xseignard! - On the order details page, fulfillment tracking numbers that are URLs are now clickable links that open in a new tab. Non-URL tracking numbers keep their plain-text display, and copying to clipboard still works in both cases. -
#6754
10ae2a8Thanks @mirekm! - Dashboard stays usable with large variant catalogs: product variants load in pages with search, sibling navigation and the translations context switcher paginate instead of fetching every variant, order “add product” and Assign Variant dialogs offer Load more with clear progress, and Product Doctor walks a slim variant catalog for availability checks.
Full Changelog: 3.23.17...3.23.18
3.23.17
Patch Changes
- #6743
89c5fa4Thanks @przlada! - Custom headers are now saved when creating a webhook. Previously they were only persisted when editing an existing webhook.
Full Changelog: 3.23.16...3.23.17
3.22.44
Patch Changes
- #6744
956f19fThanks @przlada! - Custom headers are now saved when creating a webhook. Previously they were only persisted when editing an existing webhook.
Full Changelog: 3.22.43...3.22.44
3.23.16
Patch Changes
- #6738
0c43a5aThanks @lkostrowski! - Added a "Store details" section at the top of the Site Settings page where you can edit your store's name and description. The store name was previously not editable from the dashboard, and the description had no dedicated field.
Full Changelog: 3.23.15...3.23.16
3.23.15
Patch Changes
-
#6714
15463b9Thanks @mirekm! - Attributes list for model and product classes can optionally be grouped by type, with tabs, bulk unassign from a single type, and filters that stay above the tab strip. Attribute detail pages show a compact Usage summary of which types include the attribute. -
#6709
761e4b9Thanks @mirekm! - - Create attributes directly on product and model type pages. Open the menu next to Assign attribute, choose Create attribute, and the new attribute is added to that type automatically — no need to leave the page or set up the link separately.- Standardized dialog layouts across the dashboard. Forms, pickers, and confirmations now share consistent headers, content spacing, scrolling, and action buttons — replacing one-off layouts that varied by section.
-
#6721
bde648bThanks @lkostrowski! - On the order details page, fulfillments with no lines no longer show an empty table with just column headers. The fulfillment card is now rendered without the empty product grid. -
#6731
a695985Thanks @mirekm! - Timeline now matches line matrix for day-to-day work: order-level refund callout, Fulfill and Return in the items section header, per-line row actions, and return/replace reasons on unfulfilled lines when present. Return and Fulfill on a timeline row apply only within that shipment's context — not on already returned, refunded, or replaced fulfillments.Reorganized the order details cog menu: extension actions and GraphiQL (with icons) first, Cancel order last as the destructive action. Return / Replace order is in the items section header only.
Draft orders: deleting a draft no longer shows Internal Server Error notification. The Select a channel confirm button in Create order shows a loading state while the draft is created.
-
#6726
fe2c0efThanks @mirekm! - Fixed order fulfillment crashing when fulfilling a single line from a multi-line order. The fulfill page now uses consistent quantity and warehouse controls, disables warehouse selection for zero-quantity lines, pre-selects a warehouse from stock when no allocation exists, and truncates long variant details with a tooltip. -
#6713
5acf47eThanks @mirekm! - Fixed product create and update requiring a second save after assigning a category when publishing to channels. Assigning a category and saving now succeeds on the first try. -
#6727
f2625e2Thanks @mirekm! - Align the add/edit reason modal with dashboard modal patterns: helper text in the header subtitle, inset body layout, and Back button for dismiss. -
#6733
b5e262eThanks @mirekm! - Added expandable rows to the Category list with lazy loading of subcategories and improved nested selection logic. -
#6705
8300fe8Thanks @mirekm! - Swatch variant attributes now appear in the product variants grid with color previews, so merchants can edit color-style variant values alongside other variant columns. -
#6725
c272fc4Thanks @mirekm! - Product type and model type detail pages now match the refreshed layout used elsewhere in the dashboard: metadata is edited from a header button, attributes sit in the main column, and type settings (name, shipping, taxes, etc.) move to the sidebar.
Full Changelog: 3.23.14...3.23.15
3.23.14
Patch Changes
-
#6703
f26158aThanks @mirekm! - Customer profiles now show channel-scoped order statistics: total orders, recent net sales, and average order value. Net sales use product revenue after discounts and exclude shipping and tax; hover the amount for shipping and refund details from the same orders. The recent orders table shows net and gross amounts per order, with a hint explaining how net relates to the overview figures. -
#6716
ce87ab7Thanks @lkostrowski! - Removed the "Used by" column from the gift cards list and the "Used by" field from the gift card details page. These relied on theGiftCard.usedBy/usedByEmailAPI fields, which have been deprecated and no longer behave as intended since Saleor 3.14 —usedBybecame mutable and points to the last usage rather than a reliable single user, so the displayed value was misleading. Filtering gift cards by the customer who used them is unaffected. -
#6700
260b3abThanks @lkostrowski! - Fixed a flash on the homepage where an empty "Welcome" screen briefly appeared before the app extension tabs and widgets loaded on every page refresh. The homepage now caches the last-known extensions locally and renders their tabs immediately on load while refreshing in the background. On the very first load (before anything is cached) the page stays blank until extensions resolve, instead of flashing the "Welcome" message. -
#6708
b216b81Thanks @mirekm! - Moved Model Types and Product Types to the bottom of their sidebar sections, separated by a dashed line from daily-use items. Both open the same settings views as Configuration, with a small settings icon and lighter label styling. -
#6704
4036943Thanks @mirekm! - Added a Net column to the orders list showing post-discount product value (excluding tax and shipping), placed before the existing Total column. The Net column is shown by default for new layouts and can be enabled from the column picker for customized views. -
#6712
5b4f22dThanks @mirekm! - Fixed saving a webhook from the create view incorrectly showing the "Leave without saving changes?" dialog instead of navigating to the new webhook.
Full Changelog: 3.23.13...3.23.14