MFA UI, email verification, bugfixes, doc migration, chores
Release history
medusa releases
The world's most flexible commerce platform.
All releases
17 shown
MFA, promo code visibility, React v18, inventory, locale, filter, backorder
- Changed `width`, `length`, `height`, and `weight` properties on `Product` from type text to float; changed same properties on `ProductVariant` from number to float.
- Medusa CLI adds `mcloud proxy` command for local development against Medusa Cloud deployments.
- Promotion computation system now supports custom context hooks via `setPromotionContext`.
- Admin API gains SKU search support for product retrieval.
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
- Price list metadata fields to store custom business attributes
- Native resolution of `price_list_id` filters via index engine for faster product listings
Full changelog
Highlights
Price List Metadata Support
Price lists now support custom metadata fields, enabling you to store additional business context and custom attributes alongside your pricing configurations. This adds flexibility for commerce applications that need to track extra information like campaign names, seasonal markers, or custom business logic flags.
Native Price List Filtering Performance
The products listing API now resolves price_list_id filters directly through the index engine rather than post-processing results. This significantly improves query performance when filtering products by price lists, especially for large product catalogs.
Features
- feat(pricing,medusa,dashboard,types): add metadata support for price lists by @NicolasGorga in #15238
- feat(index, medusa): resolve price_list_id natively via index engine by @srindom in #15249
- feat(medusa,js-sdk,types): add POST /admin/payment-collections/:id/payment-sessions by @GBreg19 in #15169
Bugs
- fix(medusa): speed up products list with
price_list_idfilter by @srindom in #15247 - fix(dashboard): allow clearing optional collection, type, and country fields by @bqst in #14012
- fix(medusa): API workflow subscription by @v0eak in #15134
- fix: replace dead via.placeholder URL by @kiluazen in #15170
- fix(framework): preserve rawBody for text and urlencoded body parsers by @rnagulapalle in #15202
- fix(auth): preserve app_metadata and user_metadata across token refresh by @saheersk in #15137
- fix(dashboard,region): fix currency code unset when updating region by @shahednasser in #15228
- fix(dashboard): fix type import targeting framework instead of types by @NicolasGorga in #15232
- fix: pass container to MedusaAppLoader in runMigrationScripts to resolve AwilixResolutionError by @AKIB473 in #15103
- fix(dashboard): pick existing rules field in PricingDetailsSchema (closes #15207) by @mvanhorn in #15208
- fix(dashboard): compute selected value for eq operator in promo rule value form by @NicolasGorga in #15201
- fix(core-flows): cancel-order credit line ignores pre-existing refunds by @langovoi in #15153
- fix(medusa,types,loyalty-plugin): remove unused parameter + export step by @shahednasser in #15189
Documentation
- docs: fix typo in tutorial summary by @houdayec in #15243
- docs: add TSDocs for a0e57e419cd3e597526460fdbfed7e3e4842aa9b by @shahednasser in #15244
- docs: add TSDocs for 243e88510cd7bb4187169ee383519a9be7594854 by @shahednasser in #15242
- docs: use cookies on server and client by @shahednasser in #15245
- docs: add TSDocs for aa407641ce6ddcd2e27352315b0f7b911a2c0acf by @shahednasser in #15236
- docs: changes to intro pages by @shahednasser in #15235
- docs: add TSDocs for a9617312ef55be2be8ac5823cc990dd5d6e72c4c by @shahednasser in #15230
- docs: fix admin.path reserved paths typedoc and add standalone build guidance by @ashif323 in #15193
- docs: change announcement indicator to green by @shahednasser in #15225
Chores
- chore: change changeset to patch by @shahednasser in #15250
- chore: wire up release pipeline with draft release notes by @shahednasser in #15246
- chore(dashboard): fix type and lint errors (16/16) by @shahednasser in #15224
- chore(dashboard): fix type and lint errors (15/n) by @shahednasser in #15223
- chore(dashboard): fix type and lint errors (9/n) by @shahednasser in #15217
- chore(dashboard): fix type and lint errors (12/n) by @shahednasser in #15220
- chore(dashboard): fix type and lint errors (8/n) by @shahednasser in #15216
- chore(dashboard): fix type and lint errors (14/n) by @shahednasser in #15222
- chore(dashboard): fix type and lint errors (13/n) by @shahednasser in #15221
- chore(dashboard): fix type and lint errors (11/n) by @shahednasser in #15219
- chore(dashboard): fix type and lint errors (10/n) by @shahednasser in #15218
- chore(dashboard): fix type and lint errors (6/n) by @shahednasser in #15214
- chore(dashboard): fix type and lint errors (7/n) by @shahednasser in #15215
- chore(dashboard): fix type and lint errors (4/n) by @shahednasser in #15212
- chore(dashboard): fix type and lint errors (5/n) by @shahednasser in #15213
- chore(dashboard): fix type and lint errors (3/n) by @shahednasser in #15211
- chore(dashboard): fix type and lint errors (2/n) by @shahednasser in #15210
- chore(dashboard): fix type and lint errors (1/n) by @shahednasser in #15209
- chore(docs): Generated + Updated UI Reference (automated) by @github-actions in #15198
- chore(docs): Update version in documentation (automated) by @github-actions in #15197
New Contributors
- @houdayec made their first contribution in #15243
- @kiluazen made their first contribution in #15170
- @rnagulapalle made their first contribution in #15202
- @saheersk made their first contribution in #15137
- @AKIB473 made their first contribution in #15103
- @mvanhorn made their first contribution in #15208
- @langovoi made their first contribution in #15153
- @ashif323 made their first contribution in #15193
Full Changelog: v2.14.1...v2.14.2
Fixed currency and translation form validation after Zod v4 upgrade.
Full changelog
Highlights
Fix currency and translation management regression in admin dashboard
A regression in the admin dashboard that affected currency code and translation management has been fixed. This issue was caused by incorrect usage of Zod's z.record function after the upgrade to Zod v4, which broke form validation for currencies and translations.
Features
- feat(create-medusa-app,medusa): ask to install claude code plugin by @shahednasser in #15182
Bugs
- fix(dashboard): use two-arg z.record for Zod v4 in currencies and translations forms by @ornakash in #15194
Documentation
- docs: generate OAS for 2.14.0 by @shahednasser in #15188
Chores
- chore(docs): Generated References (automated) by @app/github-actions in #15187
- chore(docs): Generated + Updated UI Reference (automated) by @app/github-actions in #15186
- chore(docs): Generated DML JSON files (automated) by @app/github-actions in #15185
- chore(docs): Update version in documentation (automated) by @app/github-actions in #15184
- chore(docs): doc changes for next release (automated) by @shahednasser in #15048
- Chore: Release by @app/github-actions in #15046
Full Changelog: v2.14.0...v2.14.1
- Zod upgraded from v3 to v4 with breaking schema changes
- Icons package now requires React v19
- New projects use monorepo structure; medusa-starter-default deprecated
- Loyalty plugin open sourced
Full changelog
Highlights
This release open sources the Loyalty plugin and includes breaking changes related to Zod, account creation, and more. Please read carefully before updating.
Zod Updated to v4
🚧 Breaking change
Medusa has been upgraded its Zod dependency from v3 to v4. This includes updates to all internal validation schemas and type definitions. For most users, this upgrade is seamless, but if you're using custom validation schemas or directly interacting with Zod types in your project, you may need to:
- Explicitly install Zod v4.2.0 if you have Zod installed in your backend.
- Update your Zod usage based on their migration guide. We've also drafted the following prompt that you can use with agents like Claude Code to migrate your Zod usage:
I've updated my project to v2.14.0 of Medusa, which upgrades Zod to v4. This is a breaking change. Migrate all Zod v3 usage in my project to Zod v4.
Do NOT modify anything inside node_modules or the Medusa packages themselves — only migrate my custom code (e.g. custom API routes, modules, workflows, plugins, validators, admin customizations).
## Breaking changes to fix
### Error customization
- Replace `invalid_type_error` and `required_error` options with the unified `error` param
- BEFORE: z.string({ invalid_type_error: "Not a string", required_error: "Required" })
- AFTER: z.string({ error: (issue) => issue.input === undefined ? "Required" : "Not a string" })
- Rename `errorMap` option to `error` wherever used
### ZodError
- Replace `.format()` and `.flatten()` calls with `z.treeifyError(err)`
- Remove `.formErrors` usage (identical to deprecated `.flatten()`)
- Replace `.addIssue()` / `.addIssues()` calls with direct pushes to `err.issues`
### z.string() format validators
- Replace `z.string().email()` with `z.email()` (top-level)
- Replace `z.string().url()` with `z.url()` (top-level)
- Replace `z.string().uuid()` with `z.uuid()` — note: now RFC 9562 strict; use `z.guid()` if lenient matching is needed
- Replace `z.string().ip()` with `z.ipv4()` or `z.ipv6()` depending on intent
- Replace `z.string().cidr()` with `z.cidrv4()` or `z.cidrv6()` depending on intent
- Replace `z.string().emoji()` with `z.emoji()` (top-level)
- Replace `z.string().base64url()` — note it no longer accepts padding
### z.number()
- Remove any inputs passing Infinity or -Infinity — they are now rejected
- Review `.safe()` usage — it now behaves like `.int()` and rejects floats
### z.object()
- Replace `.strict()` with `z.strictObject({ ... })`
- Replace `.passthrough()` with `z.looseObject({ ... })`
- Replace `.strip()` — it's now the default; just remove it
- Remove `.nonstrict()` — deleted entirely
- Remove `.deepPartial()` — deleted; implement manually if needed
- Replace `.merge(other)` with `.extend(other.shape)` or spreading shapes
### z.nativeEnum()
- Replace `z.nativeEnum(MyEnum)` with `z.enum(MyEnum)` — `z.enum()` now handles
native TypeScript enums directly
### z.array()
- Review `.nonempty()` usage — it now returns `string[]` (not a tuple), so type
inference changes if you relied on the first-element guarantee
### z.record()
- Replace single-argument `z.record(valueSchema)` with `z.record(z.string(), valueSchema)`
### .refine()
- Remove type predicate functions from `.refine()` — they no longer narrow types
- Remove any use of `ctx.path` inside refine callbacks — unavailable in v4
- Remove function as second argument to `.refine()` for custom error messages;
use the `error` option in the options object instead:
- BEFORE: schema.refine(fn, (val) => ({ message: `${val} is invalid` }))
- AFTER: schema.refine(fn, { error: (issue) => `${issue.input} is invalid` })
### Removed APIs
- Remove `z.ostring()`, `z.onumber()`, `z.oboolean()` — use `z.string().optional()` etc.
- Remove `z.literal()` with symbol values
- Remove `.create()` static factory calls — use the `z.*()` functions directly
- Remove `z.promise()` wrappers — await the value before parsing instead
### Internal / advanced usage
- Replace `._def` access with `._zod.def` if you introspect Zod schema internals
- Replace `ZodEffects` type references with the appropriate new types
## Instructions
1. Search the entire project (excluding node_modules) for Zod imports and usage.
2. For each file, apply the relevant fixes above.
3. After migrating, build the Medusa project (`medusa build`) which will run TypeScript type checking to catch any remaining type errors introduced by the generics restructure (ZodType now uses only Output and Input generics instead of three).
4. Run any existing tests to verify runtime behavior is unchanged.
5. Summarize what was changed per file.
React v19 Support in Icons Package
🚧 Breaking change
The Medusa Icons package has been upgraded to support React v19. If you've installed the icons package directly and haven't upgraded to React v19 yet, you may need to update your React version or pin to an earlier version of the icons package. Otherwise, no action is needed.
Monorepo Project Structure for New Applications
🚧 Breaking change
The create-medusa-app command and medusa new CLI now create projects using a monorepo structure based on the dtc-starter template. This provides better separation of concerns between the backend and storefront applications, and allows you to deploy your project to Medusa Cloud seamlessly.
yarn dlx create-medusa-app@latest my-medusa-store
# Creates a monorepo with separate backend and storefront packages
With this change, the medusa-starter-default and the Next.js Starter Storefront repositories are now deprecated in favor of the unified monorepo approach.
HTTP Types Consistent with Zod Schemas
🚧 Breaking change
We've updated our HTTP types exported from @medusajs/framework/types to match exactly the Zod schemas used to validate API routes in the Medusa core. This change doesn't impact most users, and it doesn't impact the API routes interfaces. However, if you've explicitly used or relied any of the following types, make sure to apply the required changes.
Renamed types
InventoryLevelrenamed toAdminInventoryLevel.AdminPricePreferenceParamsrenamed toAdminGetPricePreferenceParams.
Properties made required
AdminCreatePricePreference.attributeand.value: changed from optionalstring?to requiredstring.AdminCreateProductVariantInventoryKit.required_quantity: changed from optional to required.
Properties removed
AdminProductCategoryListParams.name: removed from the filter type.BaseClaimListParams.q: search query field removed (also affectsAdminClaimListParams).StoreCustomerAddressFilters.companyand.province: removed from store-facing address filters.
Properties with changed types
AdminCreateProductVariantPrice.rules: changed from{ region_id: string } | nulltoRecord<string, string>—nullis no longer a valid value.AdminUpdateProductVariant.prices: changed fromAdminCreateProductVariantPrice[]toAdminUpdateProductVariantPrice[].AdminInventoryItemsParams.location_levels: changed fromRecord<"location_id", string | string[]>to{ location_id?: string | string[] }.metadatainAdminCreateCollection,AdminUpdateCollection,AdminCreateOrderFulfillment,AdminCreateOrderShipment,AdminCreateProductCategory,AdminUpdateProductCategory: changed fromRecord<string, any>toRecord<string, unknown> | null.AdminCreateFulfillmentItem.line_item_idand.inventory_item_id: changed fromstring | undefinedtostring | null.- Address string fields in
StoreAddAddress,OrderAddress,AdminFulfillmentDeliveryAddress,BaseCreateCustomerAddress, andBaseUpdateCustomerAddress(first_name,last_name,phone,company,address_1,address_2,city,country_code,province,postal_code,address_name): changed fromstring | undefinedtostring | null.
Open Source Loyalty Plugin
The Loyalty Plugin that was previously only available to Medusa Cloud users is now open sourced. It provides features related to gift cards and account credits. You can also build on top of it features like loyalty points, referrals, and more.
To use the Loyalty Plugin, you must install it manually. Run the following command to install it:
yarn add @medusajs/loyalty-plugin # replace with your package manager
Then, add it to your list of plugins in medusa-config.ts:
// medusa-config.ts
import { loadEnv, defineConfig } from '@medusajs/framework/utils'
loadEnv(process.env.NODE_ENV || 'development', process.cwd())
module.exports = defineConfig({
// ...
plugins: [
{
resolve: "@medusajs/loyalty-plugin",
options: { },
}
],
})
Finally, run migrations to create the necessary tables:
npx medusa db:migrate
Enhanced JavaScript SDK with ESM Support
The Medusa JavaScript SDK now includes explicit .js extensions for all relative imports, ensuring full ESM compliance and better compatibility with modern bundlers and Node.js environments.
Repository-wide Currency Code Normalization
Currency codes are now consistently normalized across all modules and APIs throughout Medusa. This ensures consistent handling of currency formatting, validation, and storage across cart, order, payment, pricing, and other commerce modules.
Features
- feat(core-flows,medusa,types): add no_notification to markOrderFulfillmentAsDeliveredWorkflow by @NicolasGorga in #15106
- feat: add support for custom arguments in Twilio Sendgrid email notifications by @420coupe in #14879
- feat(medusa-oas-cli, oas-github-ci): support versioning for outputted oas by @shahednasser in #15123
- feat(dashboard,types): add metadata form to Stock Location by @NicolasGorga in #15025
- feat(core-flows,order,medusa,types): Version shipping method adjustments & implement missing creation flow for versioned adjustments by @NicolasGorga in #14482
- feat(core-flows,order,medusa,types): allow to update the original order.email on order customer transfer requests by @NicolasGorga in #14234
- feat(settings): view configuration enhancement by @adrien2p in #14650
- feat(product,medusa,types): add external id to product tags, collections and types by @asgerjensen in #14855
- feat(admin): add British English for European-style date/time formatting by @mlindholm in #14902
- feat(admin): add Croatian translation by @luxapan in #14919
- feat(order): prevent canceling completed orders by @yangbobo2021 in #14874
- feat(product-category): add external_id to product-category by @asgerjensen in #14799
- feat(core-flows,order,medusa,types): update item metadata on item_update change action by @NicolasGorga in #14570
- feat: Implement event loop instrumentation by @sradevski in #14956
Bugs
- fix(order): remove fields causing excessive stack depth by @shahednasser in #15172
- fix(medusa): optimize currency code normalization migration by @shahednasser in #15165
- fix(loyalty-plugin): migrate to Zod v4 by @shahednasser in #15156
- fix(loyalty-plugin): remove delete gift cards action + cleanup by @shahednasser in #15150
- fix(loyalty-plugin): show gift card products section + error message for expiration date by @shahednasser in #15145
- fix(payment): fix currency code unset when updating payment collection by @shahednasser in #15144
- fix: migrate return reasons list to new DataTable component by @TheSeydiCharyyev in #14916
- fix(medusa): conditionally updated index_data for currency code normalization by @NicolasGorga in #15114
- fix(framework): fix plugin build not outputting server assets by @shahednasser in #15110
- fix(core-flows): consider price and metadata for multiple items linked to a single variant when resolving line action by @NicolasGorga in #14834
- fix: update link for Upgrade Guides in medusa/medusa README.md by @parion in #15038
- fix(dashboard): fix shadowed variable in variant media filters by @ashif323 in #15064
- fix(caching-redis): avoid KEYS scans during tag clears by @flatplanetpl in #14869
- fix(core-flows,types): Fix product export breaking when
sales_channel_idfilter is passed by @NicolasGorga in #14450 - fix:#14410: (medusa,utils): add delay between module migrations to prevent timestamp collision by @bhagwatiprasad in #14436
- fix(admin): handle null sales channel references in product list and detail views by @Vitalini in #15009
- fix(promotion): handle fixed discount type in buy-get promotions by @pitzegluck in #14939
- fix(core-flows): force cart refresh on updatePromotionsWorkflow when refreshing items by @NicolasGorga in #14569
- fix(core-flows): ensure full pricing context when adding items to draft order by @NicolasGorga in #14941
Documentation
- docs: fix section label in monitoring by @shahednasser in #15168
- docs: added agent feedback instructions by @shahednasser in #15167
- docs: capture correct URL for agent visits by @shahednasser in #15160
- docs: fix announcements retrieved from cloud by @shahednasser in #15126
- docs: document ip addresses + subdomains in cloud by @shahednasser in #15102
- docs: added documentation for command palette by @shahednasser in #15066
- docs: update React to 19.2.5 by @shahednasser in #15052
- docs: fix content negotiation not resolving markdown by @shahednasser in #15058
- docs: add bloom emails by @shahednasser in #14895
- docs-util: maintain support for Zod v3 and v4 by @shahednasser in #15138
- docs-utils: make docs generator compatible with Zod v4 by @shahednasser in #15104
- docs-utils: support loyalty plugin in generated references by @shahednasser in #15149
- docs(ui): fix content menu position by @mabouguerra in #15026
Chores
- chore: fix action to draft release by @shahednasser in #15180
- chore: add action to draft releases by @shahednasser in #15179
- chore(docs): cloud doc changes (automated) by @shahednasser in #15173
- chore: add to skill triager and PR reviewer instructions for by-design implementations by @shahednasser in #15158
- chore: change stale bot threshold + automation skill fixes by @shahednasser in #15157
- chore(js-sdk): add methods to manage promotion codes by @asgerjensen in #14850
- chore(loyalty): add tsdocs to services + add index.ts model export by @shahednasser in #15154
- chore: add tsdocs to loyalty plugin workflows and types by @shahednasser in #15147
- chore: trigger PR reviewer when draft PR is ready by @NicolasGorga in #15130
- chore: add linked PR awareness to issue triager by @NicolasGorga in #15121
- chore: fixes to PR reviewer and issue triager by @shahednasser in #15112
- chore: added action to push issue updates to discord by @shahednasser in #15111
- chore: enable issue triager by @shahednasser in #15107
- chore: fix PR reviewer not working on PRs when cursor comments by @shahednasser in #15105
- chore: fix changeset patch by @shahednasser in #15101
- chore: fix http types not matching validators by @shahednasser in #15017
- chore: add pr diff tool for pr reviewer by @shahednasser in #15100
- chore: fix PR reviewer not running automatically by @shahednasser in #15094
- chore: improve PR reviewer by @shahednasser in #15092
- chore(icons): upgrade React to v19 by @NicolasGorga in #14791
- chore(): upgrade zod to latest by @adrien2p in #14309
- chore(docs): cloud doc changes (automated) by @shahednasser in #15076
- chore: add writing tutorials skill by @shahednasser in #15078
- chore: improve guidelines for PR reviewer by @shahednasser in #15073
- chore(api,types): allow filtering on variant sku/barcode/ean/upc on both /store and /admin apis by @asgerjensen in #14826
- chore(medusa,core-flows): include variant images in product export by @NicolasGorga in #14886
- chore(docs): cloud doc changes (automated) by @shahednasser in #15036
- chore: fixes to doc skills and pipelines by @shahednasser in #15067
- chore(cart,order,product,inventory,fulfillment,stock-location,workflow-engine-redis,workflow-engine-inmemory): add missing fields for types auto-generation by @NicolasGorga in #14801
- chore: add pagination to PR review triager by @shahednasser in #15041
- chore: improvement to PR review skill by @shahednasser in #15040
- chore: add issue triager + PR reviewer by @shahednasser in #15001
- chore: allow triggering PR reviewer automatically by @shahednasser in #15055
Other Changes
- Complete Turkish (tr) translations by @onwp in #14991
- Revert "feat: Implement event loop instrumentation (#14956)" by @shahednasser in #15079
- chore(docs): document monitoring in Cloud by @shahednasser in #15113
New Contributors
- @onwp made their first contribution in #14991
- @TheSeydiCharyyev made their first contribution in #14916
- @420coupe made their first contribution in #14879
- @mlindholm made their first contribution in #14902
- @luxapan made their first contribution in #14919
- @flatplanetpl made their first contribution in #14869
- @yangbobo2021 made their first contribution in #14874
- @parion made their first contribution in #15038
- @ashif323 made their first contribution in #15064
- @pevey made their first contribution in #15037
- @bhagwatiprasad made their first contribution in #14436
- @sradevski made their first contribution in #14956
- @Vitalini made their first contribution in #15009
- @pitzegluck made their first contribution in #14939
- @mabouguerra made their first contribution in #15026
Full Changelog: v2.13.6...v2.14.0
- MikroORM v6.6.12 security vulnerability fix
- HTTP types generator for Zod schemas
- Workflow execution filtering
- Order timeline UI enhancements
- Translatable return and refund reasons
- Development mode error details
- Promotions carry over on claims
Fixes critical regression where req.queryConfig included undefined entity, breaking route queries. Also resolves inventory deletion exceptions.
- Introduces regression in queryConfig containing undefined entity
- Configurable max file upload size
- Order filtering by total amount
- All plugin settings routes display
Fixes regression in order listing where required OrderItem fields were dropped during relation mapping, causing order total calculations to fail in paginated queries.
- Zod imports must change from 'import { z } from "zod"' to 'import { z } from "@medusajs/framework/zod"'
- Remove 'entities' option from translation module options in medusa-config.ts
- Translation settings management UI in admin dashboard
- .translatable() modifier for Data Model API
- Priority-based event processing system
- Role-based access control module
- Lightweight bootstrap mode for type generation
- Modules options autocomplete in config
- Support for custom module translations with entity configuration
- New translatable core data models (Shipping Option, Region, Customer Group)
- Automatic type generation during build