This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+2 more
ReleasePort's take
Moderate signalIn v2.15.0 the Product and ProductVariant attributes width, length, height, and weight have been changed from text/number to float type.
Why it matters: Update any schema migrations or data‑validation logic that assumes these fields are stored as strings or integers before upgrading; failure may cause casting errors in existing records.
Summary
AI summaryProduct and ProductVariant attributes width, length, height, and weight now use type float instead of text/number.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | Medium |
Product and variant width/length/height/weight properties aligned to float type Product and variant width/length/height/weight properties aligned to float type Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Promotion computation supports custom context hooks for external data Promotion computation supports custom context hooks for external data Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Admin API supports searching products by stock keeping unit identifier Admin API supports searching products by stock keeping unit identifier Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Medusa CLI includes mcloud proxy command for cloud deployment development Medusa CLI includes mcloud proxy command for cloud deployment development Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Refund creation workflow exposes metadata field for customization Refund creation workflow exposes metadata field for customization Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Admin dashboard translation page includes copy action for translations Admin dashboard translation page includes copy action for translations Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Refund payments applies currency precision tolerance for accuracy Refund payments applies currency precision tolerance for accuracy Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
WorkflowData type flattened to prevent TypeScript stack depth errors WorkflowData type flattened to prevent TypeScript stack depth errors Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Cart completion validates presence of items before proceeding Cart completion validates presence of items before proceeding Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Return fulfillments populate delivery address field correctly Return fulfillments populate delivery address field correctly Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Admin global search returns correct settings-related routes Admin global search returns correct settings-related routes Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Index backfills missing inSchemaRef for parent entries Index backfills missing inSchemaRef for parent entries Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Pricing calculation selects prices from price lists with explicit rules when context is empty Pricing calculation selects prices from price lists with explicit rules when context is empty Source: granite4.1:30b@2026-05-24-audit Confidence: high |
— |
| Bugfix | Medium |
Refund creation rounding issue resolved for financial precision Refund creation rounding issue resolved for financial precision Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Order items metadata returns correct value instead of null Order items metadata returns correct value instead of null Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Price calculation filters prices by pricelist rules with empty context Price calculation filters prices by pricelist rules with empty context Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Database generation prevents crash when model files export Database generation prevents crash when model files export Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
S3 file encoding preserves URL prefix slashes correctly S3 file encoding preserves URL prefix slashes correctly Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Database migration loads workflow loader for hook registration Database migration loads workflow loader for hook registration Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Distributed system locking prevents race conditions in migrations and index creation Distributed system locking prevents race conditions in migrations and index creation Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Payment service updates correctly with payment data Payment service updates correctly with payment data Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Dashboard auto-selects currency row when tax toggle enabled Dashboard auto-selects currency row when tax toggle enabled Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Order computed status fields marked as non-filterable Order computed status fields marked as non-filterable Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Translation utility skips empty strings when applying locale Translation utility skips empty strings when applying locale Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Utility preserves casing in toCamelCase for PascalCase identifiers Utility preserves casing in toCamelCase for PascalCase identifiers Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Database migration loads `WorkflowLoader` to register workflow hooks during `db:migrate` Database migration loads `WorkflowLoader` to register workflow hooks during `db:migrate` Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Bugfix | Low |
S3 file utility encodes URL path segments individually, preserving leading slashes S3 file utility encodes URL path segments individually, preserving leading slashes Source: granite4.1:30b@2026-05-24-audit Confidence: high |
— |
Full changelog
Highlights
Aligned Product and Variant Attribute Types
🚧 Breaking change
This version aligns the width, length, height, and weight properties on the Product and ProductVariant data models to be of type float. In previous versions, their type was text on the Product data model, and number on the ProductVariant data model.
This change only affects customizations that relied on the previous text type for these attributes, which are now expected to be float values.
Medusa Cloud Proxy Command
The Medusa CLI now includes a mcloud proxy command for working with Medusa Cloud deployments, streamlining local development workflows against cloud environments.
medusa mcloud proxy
Promotion Context Hooks
The promotion computation system now supports custom context hooks, allowing developers to pass additional context data when calculating promotions. This enables more sophisticated promotion rules based on external data sources or custom business logic.
Example:
// in src/workflows/hooks/promotion.ts
import { StepResponse } from "@medusajs/framework/workflows-sdk";
import { updateCartPromotionsWorkflow } from "@medusajs/medusa/core-flows";
updateCartPromotionsWorkflow.hooks.setPromotionContext(
({ cart }, { container }) => {
if (cart.items.length >= 2) {
return new StepResponse({
company_id: "company_123"
});
}
}
);
Product SKU Search Support
The admin API now supports searching products by SKU, making it easier to find and manage products through their stock keeping unit identifiers.
Translation Copy Actions
The admin dashboard translation edit page now includes copy actions for original translations, improving the translation workflow by allowing translators to quickly copy base text.
Features
- feat(core-flows): add setPromotionContext hook to pass additional context for promotion computation by @NicolasGorga in #15301
- feat: Add mcloud proxy command to medusa CLI by @sradevski in #15320
- feat(product): add SKU search support to admin API by @bqst in #13930
- feat(dashboard): add copy action for Original translations on translations edit page by @LukasKri in #14943
- fix(core-flows, payment, types): expose
metadataon refund creation throughrefundPaymentsWorkflowby @Metbcy in #15273
Bugs
- fix(index): backfill missing inSchemaRef for existing parent entries by @ranma-dev in #15131
- fix(workflows-sdk): flatten WorkflowData type to remove recursive expansion that caused TS excessive stack depth errors in large consumer codebases by @NicolasGorga in #15174
- fix(settings): mark Order computed status fields as non-filterable by @aliaksei-loi in #15262
- fix(utils): preserve casing in toCamelCase for PascalCase identifiers with digits by @Chicolll in #15293
- fix(dashboard): auto-select currency row when its tax-inclusive toggle is enabled by @Anexus5919 in #15164
- fix(core-flows): populate delivery_address on return fulfillments by @ShriyansSharma27 in #15241
- fix(core-flows): validate cart has items before completing by @rnagulapalle in #15231
- fix(utils): skip empty string translations when applying locale by @asynchroza in #15013
- fix(medusa): prevent plugin:db:generate crash when model files export by @shubhamchoudhary-2003 in #14718
- fix(order): fix regression on order.items.metadata showing null when line item metadata is set by @NicolasGorga in #15329
- fix(core-flows): apply currency-precision tolerance to refundPayments by @hunnyboy1217 in #15316
- Fixes #14793 -- paymentService_ was not getting updated with the data causing the issue by @Ultron03 in #15295
- fix(index,modules-sdk,): introduce locking to avoid race conditions in distributed systems for migrations, links and index partition creation by @NicolasGorga in #15176
- fix(i18n): refresh Czech (cs) translations by @dugynoo in #15286
- fix(pricing): calculatePrices() with empty context selects prices from pricelists that explicitly have rules by @ShriyansSharma27 in #15277
- fix(product, dashboard): align product and variant volumetric attributes data types by @NicolasGorga in #14762
- fix(core-flows,payment): Fix rounding issue on refund creation by @NicolasGorga in #15303
- fix(run-scripts): load WorkflowLoader during db:migrate so workflow hooks are registered by @AKIB473 in #15260
- fix(admin): correct settings-related routes in global search results by @biocodersin in #14853
- fix(file-s3): encode URL path segments individually to preserve prefix slashes by @aayushbaluni in #15109
Documentation
- docs: fix documentation issues from triage inbox by @shahednasser in #15351
- docs: fix documentation issues in triage inbox by @shahednasser in #15318
- docs: add TSDocs for "validate cart has items before completing (#15231)" by @shahednasser in #15335
- docs: add instructions for OpenCode mcp auth by @shahednasser in #15333
- docs: change mcp docs by @shahednasser in #15323
- docs: change start prompt by @shahednasser in #15319
- docs: add start page for ai agents by @shahednasser in #15308
- docs: cloud updates by @shahednasser in #15234
- docs: add TSDocs for "Fix rounding issue on refund creation (#15303)" by @shahednasser in #15304
- docs: add TSDocs for "add SKU search support to admin API (#13930)" by @shahednasser in #15297
- docs: generate OAS for 2.14.2 by @shahednasser in #15296
- docs: add TSDocs for "add metadata support for price lists (#15238)" by @shahednasser in #15251
Chores
- chore(docs): cloud doc changes (automated) by @shahednasser in #15358
- chore(workflow-engine-redis): fix flaky tests by isolating job and queues between specs by @NicolasGorga in #15334
- chore: fix first issue label for Discord notification by @NicolasGorga in #15328
- chore: fix skill loading in dx job by @shahednasser in #15313
- chore: fix dx triage action by @shahednasser in #15312
- chore: add automated resolver for dx triage inbox by @shahednasser in #15311
- chore(docs): cloud doc changes (automated) by @shahednasser in #15298
- chore(docs): Generated + Updated UI Reference (automated) by @app/github-actions in #15255
- chore(docs): Generated References (automated) by @app/github-actions in #15256
- chore(docs): Generated DML JSON files (automated) by @app/github-actions in #15254
- chore(docs): Update version in documentation (automated) by @app/github-actions in #15253
- chore(docs): doc changes for next release (automated) by @shahednasser in #15204
- Chore: Release by @app/github-actions in #15287
New Contributors
- @ranma-dev made their first contribution in #15131
- @Anexus5919 made their first contribution in #15164
- @ShriyansSharma27 made their first contribution in #15241
- @asynchroza made their first contribution in #15013
- @LukasKri made their first contribution in #14943
- @shubhamchoudhary-2003 made their first contribution in #14718
- @hunnyboy1217 made their first contribution in #15316
- @Ultron03 made their first contribution in #15295
- @dugynoo made their first contribution in #15286
- @sradevski made their first contribution in #15320
- @AKIB473 made their first contribution in #15260
- @bqst made their first contribution in #13930
- @biocodersin made their first contribution in #14853
- @aayushbaluni made their first contribution in #15109
- @Metbcy made their first contribution in #15273
Full Changelog: v2.14.2...v2.15.0
Breaking Changes
- Changed `width`, `length`, `height`, and `weight` properties on `Product` from type text to float; changed same properties on `ProductVariant` from number to float.
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
Related context
Beta — feedback welcome: [email protected]