v2.11.2
medusajs/medusav2.11.2Oct 31, 2025by olivermrbl
AI Summary
Introduces images on product variants and a new API for managing the Medusa Index engine to improve cross-module filtering and performance.
Key Highlights
- Scoped images on product variants
- New Index management API for sync and details
- Performance improvements to the Pricing Module
New Features
- Scoped variant images
- Index management HTTP/module API
- Medusa payments provider
- Faster price updates
Full Release Notes
<!--

# v2.11.2: Product variant images and Index management API
This release introduces images on product variants and a new API to manage Medusa Index.
CMS_BREAK -->
## Highlights
### Product variant images
This release introduces images on product variants. It is now possible to assign images to individual product variants, enabling fully scoped variant-specific photos. In addition to this, a variant can have a thumbnail among its associated images.
The behavior of images is as follows:
- Images are added to products
- Variant images are chosen among the product images
- Upon retrieving variants, the variant images will contain:
- Product images that are not associated with any variants
- Images that are associated with the variant
For example, let's imagine you have three product images:
1. White t-shirt
2. Black t-shirt
3. T-shirt on a model
You want to share the third image across variants, and have the white image on the white variants and black image on the black variants. To achieve this, you associate the white t-shirt image with the white variants, and the black t-shirt image with the black variants. The third image should have no associated variants.
This in turn would result in the following response on variants:
```json
{
"id": "prod_1234",
"variants": [
{
"id": "var_1234",
"title": "White t-shirt"
"images": [
{ "id": "img_1234", "url": "http://images.com/white-t-shirt.png" },
{ "id": "img_1234", "url": "http://images.com/t-shirt-on-model.png" }
]
},
{
"id": "var_4321",
"title": "Black t-shirt"
"images": [
{ "id": "img_1234", "url": "http://images.com/black-t-shirt.png" },
{ "id": "img_1234", "url": "http://images.com/t-shirt-on-model.png" }
]
},
]
}
```
**Managing variant images**
Two endpoints have been added:
- `POST /admin/products/:id/variants/:variant_id/images/batch` — Batch manage image associations for a specific variant.
- `POST /admin/products/:id/images/:image_id/variants/batch` — Batch manage variant associations for a specific image.
**Admin UI**
You can manage product variant images from the product page in the admin dashboard. There are two ways to manage these.
From the root-level product page, you can associate a single image with many variants:
<img width="2908" height="1476" alt="CleanShot 2025-10-30 at 10 16 25@2x" src="https://github.com/user-attachments/assets/9b557f68-8356-43f2-b662-d564ffce1f11" />
From the variant-specific page, you can associate many images with a single variant:
<img width="2918" height="1480" alt="CleanShot 2025-10-30 at 10 17 32@2x" src="https://github.com/user-attachments/assets/fd8a407c-1745-4fa3-8b50-5461803569ad" />
**Data model changes**
The following are changes to the data models in the Product Module required to enable this feature:
- ProductVariant now includes a many-to-many relationship with ProductImage.
- A new ProductVariantProductImage pivot entity manages these associations.
Therefore, please make sure to run migrations after upgrading to the new version:
```bash
npx medusa db:migrate
```
### Index management API
This release adds a new API for managing the index, enabling you to trigger synchronization and retrieve detailed information about the last sync. The update improves visibility and control over the indexing process.
**API**
- `GET /admin/index/details` — Retrieve index metadata, including entity type, status, last synced key, and last update timestamp.
- `POST /admin/index/sync` — Trigger synchronization from last synced data
- Supports optional options:
- `{ strategy: "full" }` — Perform a full sync
- `{ strategy: "reset" }` — Truncate tables and perform a fresh sync.
### Faster price updates
This release brings performance improvements to the Pricing Module, significantly speeding up price list and price set updates. The changes focus on optimizing database queries, reducing redundant computations, and streamlining price normalization and upsert operations.
## Features
* feat(core-flows,product,types): scoped variant images by @fPolic in https://github.com/medusajs/medusa/pull/13623
* feat(medusa,types): product variant store endpoints by @fPolic in https://github.com/medusajs/medusa/pull/13730
* feat(product): build variant images when retrieving product by @fPolic in https://github.com/medusajs/medusa/pull/13731
* feat(index): Add http/module api to interact with the index engine by @adrien2p in https://github.com/medusajs/medusa/pull/13869
* feat: Implement medusa payments provider by @sradevski in https://github.com/medusajs/medusa/pull/13772
* feat(dashboard): variant images list thumbnail + refactor form state management by @fPolic in https://github.com/medusajs/medusa/pull/13905
## Bugs
* use truncate in db teardown by @peterlgh7 in https://github.com/medusajs/medusa/pull/13875
* fix(dashboard): preserve old image ids when deleting a product image by @fPolic in https://github.com/medusajs/medusa/pull/13881
* fix(pricing): price list prices perf issues by @adrien2p in https://github.com/medusajs/medusa/pull/13899
* chore(): Generate migrations with correct mikro orm import path by @adrien2p in https://github.com/medusajs/medusa/pull/13893
* fix: allow controlling hmr bind host by @srindom in https://github.com/medusajs/medusa/pull/13692
* fix(utils): db migration big number default value by @carlos-r-l-rodrigues in https://github.com/medusajs/medusa/pull/13913
* chore(): Throw on migration up/down fail by @adrien2p in https://github.com/medusajs/medusa/pull/13911
## Documentation
* docs: fix spelling and grammar by @MBLVD in https://github.com/medusajs/medusa/pull/13862
* docs: documented admin translations by @shahednasser in https://github.com/medusajs/medusa/pull/13864
* docs: fix runtime error occuring with code tabs by @shahednasser in https://github.com/medusajs/medusa/pull/13873
* Add PG_CONNECTION to Medusa Container docs by @NicolasGorga in https://github.com/medusajs/medusa/pull/13871
* docs: fix mikro-orm imports from framework by @shahednasser in https://github.com/medusajs/medusa/pull/13885
* docs: category images guide by @shahednasser in https://github.com/medusajs/medusa/pull/13755
* docs: fix category images guide by @shahednasser in https://github.com/medusajs/medusa/pull/13908
* docs: serve markdown to AI agents by @shahednasser in https://github.com/medusajs/medusa/pull/13915
* docs: updated user stories in /learn by @cboeddek in https://github.com/medusajs/medusa/pull/13866
## Chores
* chore(docs): Update version in documentation (automated) by @github-actions[bot] in https://github.com/medusajs/medusa/pull/13854
* chore(docs): Generated DML JSON files (automated) by @github-actions[bot] in https://github.com/medusajs/medusa/pull/13855
* chore(docs): Updated UI Reference (automated) by @github-actions[bot] in https://github.com/medusajs/medusa/pull/13856
* chore(docs): Generated References (automated) by @github-actions[bot] in https://github.com/medusajs/medusa/pull/13857
* chore: fixes to http and request types for products by @shahednasser in https://github.com/medusajs/medusa/pull/13833
* chore: fixes to HTTP and request types for API Keys by @shahednasser in https://github.com/medusajs/medusa/pull/13819
* chore: fixes to HTTP and request types for promotions by @shahednasser in https://github.com/medusajs/medusa/pull/13820
* chore: fixes to HTTP and request types for carts by @shahednasser in https://github.com/medusajs/medusa/pull/13821
* chore: fixes to http and request types for orders (2) by @shahednasser in https://github.com/medusajs/medusa/pull/13823
* chore: fixes to http and request types for orders (3) by @shahednasser in https://github.com/medusajs/medusa/pull/13824
* chore: fixes to http and request types for customers by @shahednasser in https://github.com/medusajs/medusa/pull/13825
* chore: fixes to http and request types for fulfillment by @shahednasser in https://github.com/medusajs/medusa/pull/13826
* chore: fixes to http and request types for inventory by @shahednasser in https://github.com/medusajs/medusa/pull/13827
* chore: fixes to http and request types for users by @shahednasser in https://github.com/medusajs/medusa/pull/13828
* chore: fixes to http and request types for payments by @shahednasser in https://github.com/medusajs/medusa/pull/13830
* chore: fixes to http and request types for payment and regions by @shahednasser in https://github.com/medusajs/medusa/pull/13831
* chore: fixes to http and request types for sales channes, taxes, and store by @shahednasser in https://github.com/medusajs/medusa/pull/13832
* chore: fixes to http and request types for orders (1) by @shahednasser in https://github.com/medusajs/medusa/pull/13822
* chore: Inject sandbox handle in cloud config by @olivermrbl in https://github.com/medusajs/medusa/pull/13879
* chore(types,notification): Make template nullable on emails by @olivermrbl in https://github.com/medusajs/medusa/pull/13889
## Other Changes
* add Medusa Cloud Email provider by @peterlgh7 in https://github.com/medusajs/medusa/pull/13781
* feat(dashboard): add input field for tracking_url and label_url in shipment form by @kevinresol in https://github.com/medusajs/medusa/pull/13787
* fix(dashboard): Resolve issue with product attributes input by @siddarthan007 in https://github.com/medusajs/medusa/pull/13863
* fix(dashboard): tax region override too large payload by @NicolasGorga in https://github.com/medusajs/medusa/pull/13860
* fix(admin): fix admin promotion list sort by @bqst in https://github.com/medusajs/medusa/pull/13872
* feat(admin): change admin order list default sort by @bqst in https://github.com/medusajs/medusa/pull/13874
* fix(dashboard) Standardize heading levels for consistent hierarchy by @radeknapora in https://github.com/medusajs/medusa/pull/13861
* feat(dashboard): type-safe i18n for UI extensions by @leobenzol in https://github.com/medusajs/medusa/pull/13851
## New Contributors
* @MBLVD made their first contribution in https://github.com/medusajs/medusa/pull/13862
* @kevinresol made their first contribution in https://github.com/medusajs/medusa/pull/13787
* @siddarthan007 made their first contribution in https://github.com/medusajs/medusa/pull/13863
* @cboeddek made their first contribution in https://github.com/medusajs/medusa/pull/13866
**Full Changelog**: https://github.com/medusajs/medusa/compare/v2.11.1...v2.11.2