This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+8 more
Affected surfaces
Summary
AI summaryAdd provider‑dispatched login, newsletter subscription endpoints, and type‑safe custom field handling.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Add provider-dispatched login to client.auth.login(). Add provider-dispatched login to client.auth.login(). Source: llm_adapter@2026-06-11 Confidence: high |
— |
| Feature | Medium |
Add newsletter subscription endpoints: create() and verify(). Add newsletter subscription endpoints: create() and verify(). Source: llm_adapter@2026-06-11 Confidence: high |
— |
| Feature | Medium |
Preserve newsletter consent across customer registration. Preserve newsletter consent across customer registration. Source: llm_adapter@2026-06-11 Confidence: high |
— |
| Feature | Low |
Expose `Product.meta_title` in Store API. Expose `Product.meta_title` in Store API. Source: llm_adapter@2026-06-11 Confidence: high |
— |
| Feature | Low |
Expose `Product.option_values` in Store API. Expose `Product.option_values` in Store API. Source: llm_adapter@2026-06-11 Confidence: high |
— |
| Feature | Low |
Add sales‑channel selection via X-Spree-Channel header and SDK methods. Add sales‑channel selection via X-Spree-Channel header and SDK methods. Source: llm_adapter@2026-06-11 Confidence: high |
— |
| Feature | Low |
Sync Zod schemas with TypeScript for Customer and PaymentMethod. Sync Zod schemas with TypeScript for Customer and PaymentMethod. Source: llm_adapter@2026-06-11 Confidence: low |
— |
| Feature | Low |
Sync Zod schemas with TypeScript: add `full_name` to `CustomerSchema` and `source_required` to `PaymentMethodSchema`. Sync Zod schemas with TypeScript: add `full_name` to `CustomerSchema` and `source_required` to `PaymentMethodSchema`. Source: granite4.1:30b@2026-06-11-audit Confidence: low |
— |
| Deprecation | Low |
Expose `field_type` on CustomField as a string‑literal union; deprecate legacy `type`. Expose `field_type` on CustomField as a string‑literal union; deprecate legacy `type`. Source: llm_adapter@2026-06-11 Confidence: high |
— |
Full changelog
What's Changed
-
Add provider-dispatched login.
client.auth.login()now accepts third-party identity-provider payloads (e.g.{ provider: 'auth0', token: '<jwt>' }) in addition to the existing{ email, password }shape —LoginCredentialsis now a discriminated union ofEmailPasswordLogin | ProviderLogin, both newly exported. Pairs with the server-side strategy registry atSpree.store_authentication_strategies. Existing email/password calls are unchanged. -
Add
client.newsletterSubscribers.create()andclient.newsletterSubscribers.verify()for the new Store API newsletter subscription endpoints.Lets headless storefronts subscribe guests to the newsletter before account creation and confirm the double opt-in via the verification token from the confirmation email. Pass
redirect_urloncreate()and the storefront receives anewsletter_subscriber.subscription_requestedwebhook with the token + validated redirect URL so it can send the confirmation email itself — same pattern ascustomer.password_reset_requested. When called with a JWT and the customer's own email, the subscription is auto-verified.Consent is now preserved across registration: when
client.customers.create()is called with an email that already has a newsletter subscription on the current store, that subscriber is linked to the new user. If the subscription was verified,accepts_email_marketingis set totrueon the returned customer even when the registration body sentfalse— so guests who opted in before signing up don't lose their consent. -
Custom field
field_typetoken.CustomFieldnow exposesfield_typeas a string-literal union ('short_text' | 'long_text' | 'rich_text' | 'number' | 'boolean' | 'json' | (string & {})) — abstract token instead of the Ruby STI class name. Aligns with how Shopify, Saleor, Vendure, and commercetools expose typed custom fields.- The legacy
typefield (e.g.'Spree::Metafields::ShortText') is unchanged and still emitted alongside the newfield_typefor back-compat. The TypeScript type is annotated with@deprecatedso editors surface the migration tip on hover; eslint withno-deprecatedwill flag references. Storefronts should switch tofield_type;typewill be removed in a future minor.
-
Sync Zod schemas with TypeScript types for
CustomerandPaymentMethod.CustomerSchemanow includesfull_name: string(already present in theCustomertype since the Admin Customers API landed; the runtime schema was stale).PaymentMethodSchemanow includessource_required: boolean(already present in thePaymentMethodtype).
No source-API change — this only affects callers using
CustomerSchema/PaymentMethodSchemafor runtime validation (e.g.,CustomerSchema.parse(response)). Validation no longer rejects these fields and parsed values are correctly typed. -
Expose
Product.meta_titlein the Store API.meta_titleis a storefront SEO field (used in<title>tags) — previously it was only on the Admin product serializer. Now serialized on the StoreProducttype asmeta_title: string | nullso storefronts can render it without a second admin call. -
Expose
Product.option_valuesin the Store API.The
Producttype now includes an optionaloption_values: Array<OptionValue>field, listing the option values that are actually in use across the product's variants. This lets storefronts render option pickers (size, color, etc.) without iterating over every variant to collect them. -
Add sales-channel selection to the Store SDK via the
X-Spree-Channelheader.createClient({ channel: 'pos' })— set a client-level defaultclient.setChannel('wholesale')— sticky setter, mirrorssetLocale/setCurrency/setCountryawait client.products.list({}, { channel: 'pos' })— per-request override
The value can be either a channel
code(e.g.online,pos,wholesale) or the prefixed ID (ch_…);codeis preferred. Backend resolution stays atSpree::Api::V3::ChannelResolution: a matching header picks the channel for the request, otherwise the store's default channel applies.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Spree Commerce
Spree is a complete, modular & API-driven open source e-commerce solution for Ruby on Rails.
Related context
Related tools
Beta — feedback welcome: [email protected]