# medusa v2.19.0 — v2.19.0: Vite v7 Update, Inventory Export, Custom Fulfillment Addresses - Product: medusa (https://whatsnew.fyi/product/medusa) - Vendor: medusa - Date: 2026-08-13 - Version: v2.19.0 - Original notes: https://github.com/medusajs/medusa/releases/tag/v2.19.0 - Permalink: https://whatsnew.fyi/product/medusa/releases/v2.19.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **changed** — Update Medusa Admin dashboard to use Vite v7.3.6 and React Router v7.18.2 - **changed** — Require Node ^20.19.0, ^22.12.0, or greater LTS, dropping support for Node 20.0–20.18 and 22.0–22.11 - **changed** — Update supported browsers to Chrome >= 107, Edge >= 107, Firefox >= 104, Safari >= 16 - **removed** — Remove build.target: "modules" from Vite config in favor of Vite 7 default "baseline-widely-available" - **removed** — Remove splitVendorChunkPlugin from Vite config, use build.rollupOptions.output.manualChunks instead - **changed** — Change resolve.conditions in Vite config to replace default values instead of adding to them - **removed** — Remove Response.json() API, return or throw a Response object instead - **removed** — Remove defer() from React Router API, loaders now return plain objects with unresolved promises streamed automatically - **deprecated** — Deprecate UIMatch.data from React Router in favor of UIMatch.loaderData - **removed** — Remove sdk.admin.product.createOption, sdk.admin.product.updateOption, sdk.admin.product.retrieveOption, and sdk.admin.product.deleteOption methods from JS SDK - **changed** — Use sdk.admin.product.update instead to manage a product's options - **changed** — Include computed total fields when retrieving * fields of carts and orders through Query or API routes - **added** — Support specifying actual type of JSONB columns using type argument in .json() method for data models - **added** — Add inventory item export functionality from admin dashboard as CSV file - **added** — Support custom delivery address when creating a fulfillment independently of the order's shipping address - **added** — Allow passing arbitrary additional_data through to fulfillment providers during fulfillment creation - **added** — Add notification preferences for order edits to respect customer notification preferences - **added** — Implement generic OIDC authentication provider - **added** — Implement search module with DSL for search index ##### Highlights Medusa MCP users can update their project using the following prompt: ```bash Update my Medusa project to v2.19.0 ``` ###### Update Vite and React Router to v7 🚧 Breaking change This release updates the Medusa Admin dashboard to use Vite v7.3.6 and React Router v7.18.2. This is a breaking change and requires you to make the following changes: 1. Update your `vite` direct dependency to `v7.3.6` 2. Update your `react-router-dom` and `react-router` direct dependencies to v7.18.2 3. Use Node ^20.19.0, ^22.12.0, or greater LTS. Node 20.0–20.18 and 22.0–22.11 are no longer supported. Due to this update, there are the following breaking changes related to Vite and React Router that may impact you if you use these features: - Supported browsers are now changed to Chrome >= 107, Edge >= 107, Firefox >= 104, Safari >= 16 (previously 87 / 88 / 78 / 14) - The Vite config allowed in `medusa-config.ts`'s `admin.vite` configuration now supports Vite 7 config, which makes the following changes: - `build.target: "modules"` is removed. the Vite 7 default is "baseline-widely-available". - `splitVendorChunkPlugin` is removed. Use `build.rollupOptions.output.manualChunks` instead - `resolve.conditions` is changed from adding your values to the default, to replacing them. - `Response.json()` is removed due to the supported browser change. Return or throw a `Response` instead. For example, `new Response(JSON.stringify(body), { status, headers: { "Content-Type": "application/json; charset=utf-8" } })`. - `defer()` is removed from the React Router API. Loaders return a plain object now; unresolved promises are streamed automatically, so `` keeps working unchanged. - `UIMatch.data` from React Router is deprecated in favour of `UIMatch.loaderData`, which holds the same value, and `UIMatch.data` is now typed as possibly undefined. This includes the `props.data` form used by detail-route breadcrumb components, which becomes `props.loaderData`. --- ###### JS SDK Admin Product Option Methods Removed 🚧 Breaking change The following methods have been removed from the JS SDK as they targeted endpoints that no longer exist: - `sdk.admin.product.createOption` - `sdk.admin.product.updateOption` - `sdk.admin.product.retrieveOption` - `sdk.admin.product.deleteOption` To manage a product's options, use `sdk.admin.product.update` instead. --- ###### Changed Default Behavior for Totals Fetching in Carts and Orders Previously, when retrieving `*` fields of carts and orders through Query or API routes, that didn't include `totals`. You had to request those specifically. Retrieving all fields with `*` now includes the computed total fields. So, for better performance, make sure to request only the fields you actually need for carts and orders rather than using `*`. --- ###### Support JSONB Types in `.json` DML Properties Previously, a property in a data model typed with `.json` had the TypeScript type of an object, even though the property stores any JSON-serializable value in a `jsonb` column. You can now specify the actual type of the column in a type argument of the `json` method. This only affects the generated type of the property. For example: ```ts import { model } from "@medusajs/framework/utils" const Brand = model.define("brand", { id: model.id().primaryKey(), name: model.text(), warnings: model.json<{ code: string; message: string }[]>(), }) ``` --- ###### Inventory Item Export Inventory items can now be exported from the admin dashboard as a CSV file. The export workf _[Truncated at 4000 characters — full notes: https://github.com/medusajs/medusa/releases/tag/v2.19.0]_