v2.15.0

coaidev/coaiv2.15.0May 11, 2026by medusa-os-bot[bot]

AI Summary

A major release aligning Product and Variant attribute types to float, adding a new CLI command for Medusa Cloud, and introducing promotion context hooks.

Key Highlights

  • Breaking change aligning width/length/height/weight to float type
  • New `mcloud proxy` command for local development
  • New promotion context hooks for custom business logic
  • SKU search support in the admin API

Breaking Changes

  • Alignment of `width`, `length`, `height`, and `weight` properties to float type on Product and ProductVariant models

New Features

  • Medusa Cloud Proxy command
  • Promotion context hooks for passing additional data
  • SKU search support in admin API
  • Copy actions for translation editing in dashboard

Full Release Notes

## Highlights

### Missing PRs in published packages

Due to an issue during the release process, we identified several PRs listed in these release notes missing from the published packages. We recommend installing [2.15.1](https://github.com/medusajs/medusa/releases/tag/v2.15.1) instead.

### 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.

```bash
medusa mcloud proxy
```

[#15320](https://github.com/medusajs/medusa/pull/15320)

---

### 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:

```ts
// 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"
      });
    }
  }
);
```

[#15301](https://github.com/medusajs/medusa/pull/15301)

---

### 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.

[#13930](https://github.com/medusajs/medusa/pull/13930)

---

### 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.

[#14943](https://github.com/medusajs/medusa/pull/14943)

## Features

*   feat(core-flows): add setPromotionContext hook to pass additional context for promotion computation by [@NicolasGorga](https://github.com/NicolasGorga) in [#15301](https://github.com/medusajs/medusa/pull/15301)
*   feat: Add mcloud proxy command to medusa CLI by [@sradevski](https://github.com/sradevski) in [#15320](https://github.com/medusajs/medusa/pull/15320)
*   feat(product): add SKU search support to admin API by [@bqst](https://github.com/bqst) in [#13930](https://github.com/medusajs/medusa/pull/13930)
*   feat(dashboard): add copy action for Original translations on translations edit page by [@LukasKri](https://github.com/LukasKri) in [#14943](https://github.com/medusajs/medusa/pull/14943)
*   fix(core-flows, payment, types): expose `metadata` on refund creation through `refundPaymentsWorkflow` by [@Metbcy](https://github.com/Metbcy) in [#15273](https://github.com/medusajs/medusa/pull/15273)

## Bugs

*   fix(index): backfill missing inSchemaRef for existing parent entries by [@ranma-dev](https://github.com/ranma-dev) in [#15131](https://github.com/medusajs/medusa/pull/15131)
*   fix(workflows-sdk): flatten WorkflowData type to remove recursive expansion that caused TS excessive stack depth errors in large consumer codebases by [@NicolasGorga](https://github.com/NicolasGorga) in [#15174](https://github.com/medusajs/medusa/pull/15174)
*   fix(settings): mark Order computed status fields as non-filterable by [@aliaksei-loi](https://github.com/aliaksei-loi) in [#15262](https://github.com/medusajs/medusa/pull/15262)
*   fix(utils): preserve casing in toCamelCase for PascalCase identifiers with digits by [@Chicolll](https://github.com/Chicolll) in [#15293](https://github.com/medusajs/medusa/pull/15293)
*   fix(dashboard): auto-select currency row when its tax-inclusive toggle is enabled by [@Anexus5919](https://github.com/Anexus5919) in [#15164](https://github.com/medusajs/medusa/pull/15164)
*   fix(core-flows): populate delivery_address on return fulfillments by [@ShriyansSharma27](https://github.com/ShriyansSharma27) in [#15241](https://github.com/medusajs/medusa/pull/15241)
*   fix(core-flows): validate cart has items before completing by [@rnagulapalle](https://github.com/rnagulapalle) in [#15231](https://github.com/medusajs/medusa/pull/15231)
*   fix(utils): skip empty string translations when applying locale by [@asynchroza](https://github.com/asynchroza) in [#15013](https://github.com/medusajs/medusa/pull/15013)
*   fix(medusa): prevent plugin:db:generate crash when model files export by [@shubhamchoudhary-2003](https://github.com/shubhamchoudhary-2003) in [#14718](https://github.com/medusajs/medusa/pull/14718)
*   fix(order): fix regression on order.items.metadata showing null when line item metadata is set by [@NicolasGorga](https://github.com/NicolasGorga) in [#15329](https://github.com/medusajs/medusa/pull/15329)
*   fix(core-flows): apply currency-precision tolerance to refundPayments by [@hunnyboy1217](https://github.com/hunnyboy1217) in [#15316](https://github.com/medusajs/medusa/pull/15316)
*   Fixes #14793 -- paymentService_ was not getting updated with the data causing the issue by [@Ultron03](https://github.com/Ultron03) in [#15295](https://github.com/medusajs/medusa/pull/15295)
*   fix(index,modules-sdk,): introduce locking to avoid race conditions in distributed systems for migrations, links and index partition creation by [@NicolasGorga](https://github.com/NicolasGorga) in [#15176](https://github.com/medusajs/medusa/pull/15176)
*   fix(i18n): refresh Czech (cs) translations by [@dugynoo](https://github.com/dugynoo) in [#15286](https://github.com/medusajs/medusa/pull/15286)
*   fix(pricing): calculatePrices() with empty context selects prices from pricelists that explicitly have rules by [@ShriyansSharma27](https://github.com/ShriyansSharma27) in [#15277](https://github.com/medusajs/medusa/pull/15277)
*   fix(product, dashboard): align product and variant volumetric attributes data types by [@NicolasGorga](https://github.com/NicolasGorga) in [#14762](https://github.com/medusajs/medusa/pull/14762)
*   fix(core-flows,payment): Fix rounding issue on refund creation by [@NicolasGorga](https://github.com/NicolasGorga) in [#15303](https://github.com/medusajs/medusa/pull/15303)
*   fix(run-scripts): load WorkflowLoader during db:migrate so workflow hooks are registered by [@AKIB473](https://github.com/AKIB473) in [#15260](https://github.com/medusajs/medusa/pull/15260)
*   fix(admin): correct settings-related routes in global search results by [@biocodersin](https://github.com/biocodersin) in [#14853](https://github.com/medusajs/medusa/pull/14853)
*   fix(file-s3): encode URL path segments individually to preserve prefix slashes by [@aayushbaluni](https://github.com/aayushbaluni) in [#15109](https://github.com/medusajs/medusa/pull/15109)

## Documentation

*   docs: fix documentation issues from triage inbox by [@shahednasser](https://github.com/shahednasser) in [#15351](https://github.com/medusajs/medusa/pull/15351)
*   docs: fix documentation issues in triage inbox by [@shahednasser](https://github.com/shahednasser) in [#15318](https://github.com/medusajs/medusa/pull/15318)
*   docs: add TSDocs for "validate cart has items before completing (#15231)" by [@shahednasser](https://github.com/shahednasser) in [#15335](https://github.com/medusajs/medusa/pull/15335)
*   docs: add instructions for OpenCode mcp auth by [@shahednasser](https://github.com/shahednasser) in [#15333](https://github.com/medusajs/medusa/pull/15333)
*   docs: change mcp docs by [@shahednasser](https://github.com/shahednasser) in [#15323](https://github.com/medusajs/medusa/pull/15323)
*   docs: change start prompt by [@shahednasser](https://github.com/shahednasser) in [#15319](https://github.com/medusajs/medusa/pull/15319)
*   docs: add start page for ai agents by [@shahednasser](https://github.com/shahednasser) in [#15308](https://github.com/medusajs/medusa/pull/15308)
*   docs: cloud updates by [@shahednasser](https://github.com/shahednasser) in [#15234](https://github.com/medusajs/medusa/pull/15234)
*   docs: add TSDocs for "Fix rounding issue on refund creation (#15303)" by [@shahednasser](https://github.com/shahednasser) in [#15304](https://github.com/medusajs/medusa/pull/15304)
*   docs: add TSDocs for "add SKU search support to admin API (#13930)" by [@shahednasser](https://github.com/shahednasser) in [#15297](https://github.com/medusajs/medusa/pull/15297)
*   docs: generate OAS for 2.14.2 by [@shahednasser](https://github.com/shahednasser) in [#15296](https://github.com/medusajs/medusa/pull/15296)
*   docs: add TSDocs for "add metadata support for price lists (#15238)" by [@shahednasser](https://github.com/shahednasser) in [#15251](https://github.com/medusajs/medusa/pull/15251)

## Chores

*   chore(docs): cloud doc changes (automated) by [@shahednasser](https://github.com/shahednasser) in [#15358](https://github.com/medusajs/medusa/pull/15358)
*   chore(workflow-engine-redis): fix flaky tests by isolating job and queues between specs by [@NicolasGorga](https://github.com/NicolasGorga) in [#15334](https://github.com/medusajs/medusa/pull/15334)
*   chore: fix first issue label for Discord notification by [@NicolasGorga](https://github.com/NicolasGorga) in [#15328](https://github.com/medusajs/medusa/pull/15328)
*   chore: fix skill loading in dx job by [@shahednasser](https://github.com/shahednasser) in [#15313](https://github.com/medusajs/medusa/pull/15313)
*   chore: fix dx triage action by [@shahednasser](https://github.com/shahednasser) in [#15312](https://github.com/medusajs/medusa/pull/15312)
*   chore: add automated resolver for dx triage inbox by [@shahednasser](https://github.com/shahednasser) in [#15311](https://github.com/medusajs/medusa/pull/15311)
*   chore(docs): cloud doc changes (automated) by [@shahednasser](https://github.com/shahednasser) in [#15298](https://github.com/medusajs/medusa/pull/15298)
*   chore(docs): Generated + Updated UI Reference (automated) by [@app/github-actions](https://github.com/app/github-actions) in [#15255](https://github.com/medusajs/medusa/pull/15255)
*   chore(docs): Generated References (automated) by [@app/github-actions](https://github.com/app/github-actions) in [#15256](https://github.com/medusajs/medusa/pull/15256)
*   chore(docs): Generated DML JSON files (automated) by [@app/github-actions](https://github.com/app/github-actions) in [#15254](https://github.com/medusajs/medusa/pull/15254)
*   chore(docs): Update version in documentation (automated) by [@app/github-actions](https://github.com/app/github-actions) in [#15253](https://github.com/medusajs/medusa/pull/15253)
*   chore(docs): doc changes for next release (automated) by [@shahednasser](https://github.com/shahednasser) in [#15204](https://github.com/medusajs/medusa/pull/15204)
*   Chore: Release by [@app/github-actions](https://github.com/app/github-actions) in [#15287](https://github.com/medusajs/medusa/pull/15287)

## New Contributors

*   @ranma-dev made their first contribution in [#15131](https://github.com/medusajs/medusa/pull/15131)
*   @Anexus5919 made their first contribution in [#15164](https://github.com/medusajs/medusa/pull/15164)
*   @ShriyansSharma27 made their first contribution in [#15241](https://github.com/medusajs/medusa/pull/15241)
*   @asynchroza made their first contribution in [#15013](https://github.com/medusajs/medusa/pull/15013)
*   @LukasKri made their first contribution in [#14943](https://github.com/medusajs/medusa/pull/14943)
*   @shubhamchoudhary-2003 made their first contribution in [#14718](https://github.com/medusajs/medusa/pull/14718)
*   @hunnyboy1217 made their first contribution in [#15316](https://github.com/medusajs/medusa/pull/15316)
*   @Ultron03 made their first contribution in [#15295](https://github.com/medusajs/medusa/pull/15295)
*   @dugynoo made their first contribution in [#15286](https://github.com/medusajs/medusa/pull/15286)
*   @sradevski made their first contribution in [#15320](https://github.com/medusajs/medusa/pull/15320)
*   @AKIB473 made their first contribution in [#15260](https://github.com/medusajs/medusa/pull/15260)
*   @bqst made their first contribution in [#13930](https://github.com/medusajs/medusa/pull/13930)
*   @biocodersin made their first contribution in [#14853](https://github.com/medusajs/medusa/pull/14853)
*   @aayushbaluni made their first contribution in [#15109](https://github.com/medusajs/medusa/pull/15109)
*   @Metbcy made their first contribution in [#15273](https://github.com/medusajs/medusa/pull/15273)

**Full Changelog**: [v2.14.2...v2.15.0](https://github.com/medusajs/medusa/compare/v2.14.2...v2.15.0)