Saleor 3.12.0stable Released Mar 03, 2023
โš ๏ธ Breaking Change Impact Score: 7/10

Saleor 3.12.0 โ€” Release Notes & Engineering Impact

Source available โ€” automated, not human-reviewed

Component: saleor ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.

Analysis updated: 2026-11-02.

Breaking-change evidence from the source

  • Breaking changes - Change the discount rounding mode - #12041 by @IKarbowiak
Read the original context โ†—
Source flags breaking changes โ€” review applicability
๐Ÿ“„ .MD
โšก Executive Summary (TL;DR)

Saleor 3.12.0. Source highlight: Welcome to the 3.12 release of Saleor!

Who Does This Impact? (Role-Based Analysis)

๐Ÿ’ป Software Engineers & Devs

Check the source notes against the package and APIs you use before upgrading.

๐Ÿ“Š Product & Engineering Leads

Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.

โš™๏ธ DevOps & Security

Verify the target version, runtime requirements and rollback procedure in the official documentation.

โš ๏ธ Breaking Changes & Deprecations (1)

  • Breaking changes - Change the discount rounding mode - #12041 by @IKarbowiak

โœจ New Features & Capabilities (6)

  • Add support for AVIF images, added `AVIF` and `ORIGINAL` to `ThumbnailFormatEnum` - #11998
  • Add support for bulk saving all attributes types in `BulkAttributeValueInput` - #12095
  • Add the possibility to remove `stocks` and `channel listings` in `ProductVariantBulkUpdate` mutation.
  • Add meta fields to `ProductMedia` model - #11894
  • Introduce custom headers for webhook requests - #11978
  • Add new asynchronous events related to media - #11918

โšก Performance & Enhancements (2)

  • Improve GraphQL playground by storing headers in the local storage - #12176
  • Enhance webhook's subscription query validation. Apply the validation and event inheritance to manifest validation - #11797

๐Ÿ”ง Bug Fixes & Patches (3)

  • Fix saving `metadata` in `ProductVariantBulkCreate` and `ProductVariantBulkupdate` mutations - #12097
  • Fixes for GraphiQL playground - #12192
  • Fix GraphQL playground when the `operationName` is set across different tabs - #11936
๐Ÿ“„ View Raw Release Notes (Original Developer Log)
Welcome to the 3.12 release of Saleor! ### Breaking changes - Change the discount rounding mode - #12041 by @IKarbowiak - Change the rounding mode from `ROUND_DOWN` to `ROUND_HALF_UP` - it affects the discount amount and total price of future checkouts and orders with a percentage discount applied. The discount amount might be 0.01 greater, and the total price might be 0.01 lower. E.g. if you had an order for $13 and applied a 12.5% discount, you would get $11.38 with a $1.62 discount, but now it will be calculated as $11.37 with $1.63 discount. - Include specific products voucher in checkout discount - #12191 by @IKarbowiak - Make the `specific product` and `apply once per order` voucher discounts visible on the `Checkout.discount` field. Previously, the discount amount for these vouchers was shown as 0. - `stocks` and `channelListings` inputs for preview `ProductVariantBulkUpdate` mutation have been changed. Both inputs have been extended with: - `create` input - list of items that should be created - `update` input - list of items that should be updated - `remove` input - list of objects ID's that should be removed If your platform relies on this preview feature, make sure you update your mutations stocks and channel listings inputs from: ``` { "stocks/channelListings": [ { ... } ] } ``` to: ``` { "stocks/channelListings": { "create": [ { ... } ] } } ``` - Media and image fields now default to returning 4K thumbnails instead of original uploads - #11996 by @patrys ### GraphQL API - Add support for AVIF images, added `AVIF` and `ORIGINAL` to `ThumbnailFormatEnum` - #11998 by @patrys - Add support for bulk saving all attributes types in `BulkAttributeValueInput` - #12095 by @SzymJ - Add the possibility to remove `stocks` and `channel listings` in `ProductVariantBulkUpdate` mutation. - Move `orderSettings` query to `Channel` type - #11417 by @kadewu: - Mutation `Channel.channelCreate` and `Channel.channelUpdate` have new `orderSettings` input. - Deprecate `Shop.orderSettings` query. Use `Channel.orderSettings` query instead. - Deprecate `Shop.orderSettingsUpdate` mutation. Use `Channel.channelUpdate` instead. - Add meta fields to `ProductMedia` model - #11894 by @zedzior - Make `oldPassword` argument on `passwordChange` mutation optional; support accounts without usable passwords - @11999 by @rafalp - Introduce custom headers for webhook requests - #11978 by @zedzior - Fix saving `metadata` in `ProductVariantBulkCreate` and `ProductVariantBulkupdate` mutations - #12097 by @SzymJ - Improve GraphQL playground by storing headers in the local storage - #12176 by @zaiste - Fixes for GraphiQL playground - #12192 by @zaiste ### Other changes - Enhance webhook's subscription query validation. Apply the validation and event inheritance to manifest validation - #11797 by @zedzior - Fix GraphQL playground when the `operationName` is set across different tabs - #11936 by @zaiste - Add new asynchronous events related to media - #11918 by @zedzior - `PRODUCT_MEDIA CREATED` - `PRODUCT_MEDIA_UPDATED` - `PRODUCT_MEDIA_DELETED` - `THUMBNAIL_CREATED` - CORS is now handled in the ASGI layer - #11415 by @patrys - Added native support for gzip compression - #11833 by @patrys - Set flat rates as the default tax calculation strategy - #12069 by @maarcingebala - Enables flat rates for channels in which no tax calculation method was set. - Users created by the OIDC plugin now have unusable password set instead of empty string - #12103 by @rafalp