medusajs/medusa
36.1
Weak · 12 October 2026
2.1k
lines of production code
TypeScript
with JavaScript
3
measurements over time
What this system is
This system is a comprehensive e-commerce framework that provides a modular backend for managing core commerce operations like products, orders, payments, and inventory. It includes a unified admin dashboard for operational management, featuring interfaces for user access control, tax configuration, and localization. The platform supports extensibility through a plugin system and offers automated tooling for documentation and project scaffolding.
How it got here
2020–2024 — Medusa v2 migration and admin modernization
374 changes.
This period centered on migrating the core backend to the Medusa Framework v2 architecture, establishing standalone packages for key features and enhancing backend capabilities like fractional inventory tracking. Simultaneously, the admin dashboard underwent a comprehensive redesign using Vite 7 and React Router 7, introducing a modular LayoutComposer system and robust extension mechanisms to support third-party plugins and standardized UI components.
2025–2026 — Admin dashboard extensibility and RBAC
105 changes.
This period focused on transforming the admin dashboard into a highly extensible platform by introducing configurable data tables, dynamic route registration, and a layout composition system. It also established the foundational infrastructure for Role-Based Access Control (RBAC) and introduced new core modules for search, translation, and analytics to support advanced commerce features.
Features
Add API key creation form with secure secret key handling
The admin dashboard now includes a new form for creating API keys, supporting both publishable and secret key types. For secret keys, the interface displays the generated token in a redacted format by default, allowing users to toggle visibility and copy the full token to their clipboard via a dedicated button. Upon successful creation, publishable keys redirect to their settings page, while secret keys trigger a confirmation dialog showing the token details.
packages/admin/dashboard/src/routes/api-key-management/api-key-management-create · high confidence
Add Brand module integration test scaffold
Added a new integration test module for 'Brand' that defines the module structure, including the service, entity model, and database migration. The Brand entity includes id, name, and status fields, with a migration to create the corresponding database table and index.
integration-tests/modules/src/modules/brand · high confidence
Add Copy Payment Link button to order details
A new 'Copy Payment Link' button has been added to the order detail view. When clicked, it copies a URL to the clipboard that links to the storefront's payment collection page for that specific order, including the order ID as a query parameter for direct access. The button displays the payment amount and provides visual feedback (a checkmark and 'Copied' text) upon successful copy.
packages/admin/dashboard/src/routes/orders/order-detail/components/copy-payment-link · high confidence
Add CountrySelect input component
Introduced a new CountrySelect component for the admin dashboard that wraps the existing Combobox to provide a dedicated interface for selecting countries. The component automatically populates its options from the internal country data library, mapping ISO 2-letter codes to display names, and supports standard input behaviors like placeholders, default values, and clearing selections.
packages/admin/dashboard/src/components/inputs/country-select · high confidence
Add JSON doc-model theme to TypeDoc plugin
The \typedoc-plugin-medusa-theme\ now includes a new \json\ theme that generates a structured \DocPage\ JSON model instead of MDX files. This theme reuses the existing \MarkdownTheme\ logic for URL mapping and Handlebars helpers but outputs \.json\ files and resolves internal links to final website URLs at build time, enabling a decoupled documentation pipeline.
www/utils/packages/typedoc-plugin-medusa-theme · high confidence
Add Save View Dropdown component for table configurations
A new SaveViewDropdown component has been introduced in the dashboard table module, providing users with a UI to manage saved table views. This component renders a dropdown menu with options to save the current configuration as a new view, update an existing named view, or set the current configuration as the system default for all users. The 'Save as system default' and 'Update existing view' actions are protected by confirmation prompts to prevent accidental changes.
packages/admin/dashboard/src/components/table/save-view-dropdown · high confidence
Add SectionRow component for consistent data display
A new SectionRow component has been introduced in the common section library to provide a standardized layout for displaying key-value pairs within admin dashboard sections. This component supports optional action buttons and handles both string and complex React node values, ensuring consistent styling and spacing across product details and other inventory screens.
packages/admin/dashboard/src/components/common/section · high confidence
Add SegmentedControl component
Introduces a new SegmentedControl component in the admin dashboard's common UI library. This component renders a grid of small buttons that allow users to select a single value from a provided list of options, visually highlighting the active selection with a secondary button variant while keeping others transparent.
packages/admin/dashboard/src/components/common/segmented-control · high confidence
Add Shipping Profile metadata route
The admin dashboard now includes a dedicated route for editing shipping profile metadata. This new page allows users to view and update the metadata associated with a specific shipping profile using a dedicated form component, integrating with the existing shipping profile data hooks.
packages/admin/dashboard/src/routes/shipping-profiles/shipping-profile-metadata · high confidence
Add UserLink and By components for displaying user and customer references
The dashboard now includes a new UserLink component that renders a clickable link to either a user settings page or a customer detail page, displaying the user's name or email alongside an avatar. Additionally, a By component is introduced to resolve and display the actor (user or customer) associated with an ID, automatically determining the correct entity type based on the ID prefix (user\_ or cus\_) and fetching the relevant data.
packages/admin/dashboard/src/components/common/user-link · high confidence
Add ability to save, edit, and delete configurable table views
Users can now save their current table configuration (columns, sorting, filters, search) as a named view, switch between saved personal views, and manage them via a dropdown or pill selector. The new \SaveViewDialog\ component allows creating or renaming views, while \ViewSelector\ and \ViewPills\ provide UI to select, edit, delete, or reset personal views to the system default.
packages/admin/dashboard/src/components/table/save-view-dialog, packages/admin/dashboard/src/components/table/view-selector · high confidence
Add batch translation settings management UI
The translations settings page in the admin dashboard now includes a new interface for managing batch translation configurations. Users can select specific translatable entities and their fields via a searchable, filterable tree component, toggle selection modes (full/selected), sort alphabetically, and save changes through a form that submits batch create/update requests to the API.
packages/admin/dashboard/src/routes/translations/settings · high confidence
Add breadcrumb navigation and metadata editing to Stock Location details
The Stock Location detail page now includes a breadcrumb component that displays the location name in the navigation header, improving wayfinding within the admin interface. Additionally, a new metadata form has been added to the location details, allowing users to view and edit the stock location's metadata directly from this page.
packages/admin/dashboard/src/routes/locations/location-detail · high confidence
Add breadcrumb navigation and metadata editing to price list detail view
The price list detail page in the admin dashboard now includes a breadcrumb component that displays the price list title for easier navigation, and a new metadata section that allows users to view and edit the price list's metadata via a dedicated form.
packages/admin/dashboard/src/routes/price-lists/price-list-detail · high confidence
Add breadcrumbs and detail pages for shipping profiles and workflow executions
The admin dashboard now includes navigation breadcrumbs and dedicated detail views for shipping profiles and workflow executions. For shipping profiles, users can view profile details and delete them via a confirmation prompt, with the breadcrumb displaying the profile name. For workflow executions, users can view execution details including general info, timeline, payload, and history, with the breadcrumb showing the execution ID (with the 'wf\exec\' prefix stripped). Both pages use the new LayoutComposer for consistent single-column layouts.
packages/admin/dashboard/src/routes/shipping-profiles/shipping-profile-detail, packages/admin/dashboard/src/routes/workflow-executions/workflow-execution-detail · high confidence
Add campaign association to promotions
The promotion editing interface now allows users to associate a promotion with an existing campaign, create a new campaign, or leave it unassociated. The form includes a combobox to select an existing campaign, filtering out those with incompatible currency budgets, and displays a read-only details panel showing the selected campaign's identifier, dates, and budget usage.
packages/admin/dashboard/src/routes/promotions/promotion-add-campaign · high confidence
Add campaign creation form in admin dashboard
The admin dashboard now includes a new UI for creating campaigns. Users can access a modal-based form to define campaign details including name, description, identifier, start and end dates, and budget settings (type, limit, currency, and optional attribute). The form uses Zod for validation and integrates with the backend via the \useCreateCampaign\ hook, providing success and error toasts upon submission.
packages/admin/dashboard/src/routes/campaigns/campaign-create, packages/admin/dashboard/src/routes/customer-groups/customer-group-create, packages/admin/dashboard/src/routes/shipping-profiles/shipping-profile-create · high confidence
Add collection creation form with keyboard shortcut support
The admin dashboard now includes a new form for creating collections, allowing users to input a title and an optional handle. This form is integrated with a focus modal and supports submitting the form by pressing Cmd + Enter, providing a faster workflow for power users.
packages/admin/dashboard/src/routes/collections/collection-create · high confidence
Add collection metadata editing form
A new route component has been added to the admin dashboard that allows users to view and update the metadata for a specific collection. This feature integrates the existing MetadataForm component with collection-specific data hooks to fetch current metadata and submit updates.
packages/admin/dashboard/src/routes/collections/collection-metadata, packages/admin/dashboard/src/routes/regions/region-metadata · high confidence
Add customers to a group via a new modal form
The customer-groups route now includes a new \customer-group-add-customers\ entry point that renders a modal form for adding existing customers to a specific group. Users can search, filter, and sort customers in a data table, select multiple rows, and submit the selection to add them to the group, with success or error feedback provided via toast notifications.
packages/admin/dashboard/src/routes/customer-groups/customer-group-add-customers · high confidence
Add dedicated table cell components for order details
The order table in the admin dashboard now uses specific, reusable components to display individual order attributes, improving consistency and readability. New cells have been introduced for the customer name, country (with flag icon), display ID, fulfillment status, payment status, sales channel, and total amount. Each cell handles its own header label and data presentation, such as showing a placeholder for missing values or formatting currency amounts, providing a more structured view of order information in the list.
packages/admin/dashboard/src/components/table/table-cells/order · high confidence
Add inventory item export capability in the admin dashboard
The admin dashboard now includes a new inventory export feature. Users can access this via a dedicated route that presents a drawer interface containing filter options (leveraging existing inventory table filters) and an export button. Clicking export triggers an API call to export inventory items based on the current filters, providing success or error feedback via toast notifications.
packages/admin/dashboard/src/routes/inventory/inventory-export · high confidence
Add inventory item metadata editing capability
Users can now edit metadata for individual inventory items via a dedicated drawer interface. This change introduces the InventoryItemMetadata component, which retrieves the specific item's data and provides a form to update its metadata fields.
packages/admin/dashboard/src/routes/inventory/inventory-metadata · high confidence
Add inventory item variants section component
A new \InventoryItemVariantsSection\ component has been introduced to display associated product variants within the inventory detail view. This component renders a list of variants, showing their titles, option values, and thumbnails, and provides clickable links to the respective product variant pages when available. It also includes specific styling for Right-to-Left (RTL) layouts to ensure the navigation icon rotates correctly.
packages/admin/dashboard/src/routes/inventory/inventory-detail/components/inventory-item-variants · high confidence
Add inventory kit form for product creation
Introduces a new \ProductCreateInventoryKitForm\ component and its \ProductCreateInventoryKitSection\ sub-component within the product creation flow. This UI allows users to define inventory kits by selecting inventory items via a combobox (displaying title and SKU) and specifying required quantities for each variant. The implementation includes logic to prevent duplicate inventory item selection within the same variant and handles numeric input casting. A corresponding test suite verifies that inventory is correctly added to the original variant when earlier variants are filtered out.
packages/admin/dashboard/src/routes/products/product-create/components/product-create-details-form/components/product-create-details-general-section, packages/admin/dashboard/src/routes/products/product-create/components/product-create-inventory-kit-form · high confidence
Add inventory management section to product variant detail page
The product variant detail view now includes a dedicated inventory section that displays a paginated table of associated inventory items. This table shows the item title, SKU, required quantity (formatted with the item's unit of measure), and total available inventory across locations. Users can navigate directly to an inventory item's details from the table or use the action menu to manage inventory items or kits. A placeholder state is also provided for variants where inventory is not yet managed.
packages/admin/dashboard/src/routes/product-variants/product-variant-detail/components/variant-inventory-section · high confidence
Add inventory progress bar component and constants
The dashboard now includes a new \ProgressBar\ component for visualizing inventory-related processes, featuring a configurable animation duration (defaulting to 2 seconds) that transitions from 0% to 90% width. Additionally, a constant \INVENTORY\_ITEM\_IDS\_KEY\ has been introduced in the inventory routes to standardize the key used for inventory item identifiers.
packages/admin/dashboard/src/components/common/progress-bar, packages/admin/dashboard/src/routes/inventory/common · high confidence
Add location list item component with sales channel and fulfillment set details
The location list view now includes a dedicated component for individual stock locations that displays the location name, formatted address, and associated sales channels. It also indicates whether pickup and shipping fulfillment sets are enabled or disabled for each location, and provides action buttons to edit, delete, or view details of the location.
packages/admin/dashboard/src/routes/locations/location-list/components · high confidence
Add location-specific shipping option edit interface
The dashboard now includes a dedicated route and UI component for editing shipping options within the context of a specific location. This new page, accessible via the location service zone shipping option edit path, fetches the relevant shipping option data and renders an edit form inside a drawer. It dynamically adjusts the header text to distinguish between standard shipping options and pickup options based on the fulfillment set type, providing a unified editing experience for both scenarios within the location management workflow.
packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-edit · high confidence
Add location-specific shipping option pricing UI
The dashboard now includes a new route component for editing shipping option pricing within the context of a specific location. This feature allows users to modify pricing details for a shipping option tied to a particular location via a focused modal interface, fetching the necessary shipping option data and price rules to populate the edit form.
packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-pricing · high confidence
Add metadata editing for reservations and sales channels
The admin dashboard now includes dedicated metadata editing interfaces for reservations and sales channels. New route components (ReservationMetadata and SalesChannelMetadata) have been added, each rendering a metadata form within a drawer modal. These forms allow users to view and update the metadata associated with individual reservation items and sales channels by leveraging existing API hooks for fetching and updating data.
packages/admin/dashboard/src/routes/reservations/reservation-metadata, packages/admin/dashboard/src/routes/sales-channels/sales-channel-metadata · high confidence
Add metadata editing form to product variant page
The product variant page now includes a Metadata form that allows users to view and update the metadata associated with a specific product variant. This new component integrates with the existing API hooks to fetch the current variant data and submit updates, providing a dedicated interface for managing variant-specific metadata within the admin dashboard.
packages/admin/dashboard/src/routes/product-variants/product-variant-metadata · high confidence
Add order edit preview section to order detail view
A new component has been introduced in the order detail page to display a preview of pending order edits. This section lists items that have been added or removed by comparing the current order state with the order preview, allowing users to see the impact of changes before finalizing them. It provides options to continue editing, force confirm the changes, or cancel the edit operation entirely.
packages/admin/dashboard/src/routes/orders/order-detail/components/order-active-edit-section · high confidence
Add order transfer form to admin dashboard
The admin dashboard now includes a new route and UI for transferring order ownership. Administrators can open a drawer to initiate a transfer, choosing between assigning the order to an existing registered customer or converting it to a guest account by providing an email address. The form validates inputs and displays success or error toasts upon completion.
packages/admin/dashboard/src/routes/orders/order-request-transfer · high confidence
Add password reset UI for the admin dashboard
Introduces a new password reset flow in the admin dashboard, allowing users to request a reset link and set a new password. The implementation includes a form with validation for password matching, token verification to handle invalid or expired links, and integration with the authentication API to update the provider credentials.
packages/admin/dashboard/src/routes/reset-password · high confidence
Add price list configuration form for managing rules and dates
The price-lists section now includes a dedicated configuration form that allows users to edit a price list's start and end dates and manage customer group rules. This new component, located in the price-list-configuration route, provides a UI to set date ranges via date pickers and to add or remove specific customer groups from the price list's rules, submitting these changes through an update API call.
packages/admin/dashboard/src/routes/price-lists/price-list-configuration · high confidence
Add price list prices addition page
The admin dashboard now includes a new page for adding prices to a price list. This feature introduces the \PriceListProductsAdd\ component, which fetches price list details and currency data to render the \PriceListPricesAddForm\ within a focus modal, enabling users to specify new pricing rules.
packages/admin/dashboard/src/routes/price-lists/price-list-prices-add · high confidence
Add price list prices edit route component
The dashboard now includes a new route component for editing prices within a price list. This component fetches the specific price list and associated product data, ensuring that unnecessary relations (such as type, collection, options, tags, images, and sales channels) are excluded from the product query to optimize performance, and renders the editing form within a focus modal.
packages/admin/dashboard/src/routes/price-lists/price-list-prices-edit · high confidence
Add product image variant management interface
The dashboard now includes a new route and UI component for managing which product variants are associated with a specific product image. This feature allows users to select or deselect variants via a table form, which then updates the image's variant associations through a batch API call. The implementation includes a dedicated drawer view that displays the image and a list of variants with their titles, SKUs, and thumbnail status, enabling precise control over image-variant relationships.
packages/admin/dashboard/src/routes/products/product-image-variants-edit · high confidence
Add product options management drawer
Introduces a new product-options-manage route and associated form component that allows users to manage global product options within a drawer interface. The form enables linking existing non-exclusive options to a product, creating new local options, and handling the selection and deduplication of option values, while the route component fetches the necessary product details to populate the form.
packages/admin/dashboard/src/routes/products/product-options-manage · high confidence
Add product pricing edit modal
Introduces a new modal-based interface for editing product variant prices. The \ProductPrices\ component fetches product data with optimized fields to avoid overfetching unnecessary relations, and the \PricingEdit\ component provides a form for updating prices by currency or region, supporting batch updates via the \useUpdateProductVariantsBatch\ hook.
packages/admin/dashboard/src/routes/products/product-prices · high confidence
Add product shipping profile editing UI
The dashboard now includes a new route and UI component for editing a product's shipping profile. This change introduces a dedicated form (ProductShippingProfileForm) that allows users to select a shipping profile via a combobox and save the update through the product update API. The main component (ProductShippingProfile) fetches the specific product data, explicitly excluding unnecessary relations like variants and images to optimize performance, and presents the editing interface within a route drawer.
packages/admin/dashboard/src/routes/products/product-shipping-profile · high confidence
Add product shipping profile section to product detail view
A new UI component has been added to the product detail page to display the current shipping profile associated with a product. This section includes a header and a link that navigates users directly to the shipping profile settings page for quick access and editing.
packages/admin/dashboard/src/routes/products/product-detail/components/product-shipping-profile-section · high confidence
Add product variant edit page with optimized data loading
The product variant edit interface is now available as a dedicated route, loading variant details via a new loader that caches data in the query client to avoid redundant network requests. The page renders the variant editing form within a drawer modal and explicitly excludes unnecessary product relations (such as type, collection, tags, images, variants, and sales channels) from the product data fetch to improve performance.
packages/admin/dashboard/src/routes/product-variants/product-variant-edit · high confidence
Add products to collection via modal with DataTable
The admin dashboard now provides a dedicated modal interface for adding products to an existing collection. This new route renders a form containing a DataTable that supports row selection, pagination, search, and filtering by collection status. Users can select multiple products from the table and submit the form to update the collection's product list, with success or error feedback provided via toast notifications.
packages/admin/dashboard/src/routes/collections/collection-add-products · high confidence
Add products to sales channel via modal form
Users can now add products to a sales channel through a new modal interface. This change introduces a form component that displays a searchable, filterable, and paginated data table of available products. Users can select multiple products using row selection, and the form supports submission via a button or the Cmd+Enter keyboard shortcut. The selected products are validated and submitted to update the sales channel's product associations.
packages/admin/dashboard/src/routes/sales-channels/sales-channel-add-products · high confidence
Add promotion status display in admin dashboard table
The admin dashboard now displays the current status of promotions directly in the table view. A new status cell component has been added to the promotion table cells, which retrieves the promotion status and renders it with appropriate color coding and text labels, allowing users to quickly identify the state of each promotion.
packages/admin/dashboard/src/components/table/table-cells/promotion · high confidence
Add quantity-based pricing rule forms for price lists
The admin dashboard now includes new components to support quantity-based (tiered) pricing rules within price lists. This change introduces a \PriceListCustomerGroupRuleForm\ for selecting customer groups and a suite of components (\QuantityPriceModal\, \QuantityPriceForm\, \QuantityPriceProvider\) that enable users to define and edit tiered prices based on quantity ranges (min/max) for specific products, variants, and currencies. These components provide the UI for inputting amounts and managing the state of quantity price rules within the price list creation and editing workflows.
packages/admin/dashboard/src/routes/price-lists/common/components · high confidence
Add refund reason management in the admin dashboard
Admin users can now create, edit, and delete refund reasons directly from the dashboard. The refund reasons list view displays reasons in a data table with search and pagination, and includes action menus to edit or delete individual reasons. Creating a new refund reason opens a modal form where users can enter a label, code, and optional description, with the code auto-generated from the label. Editing a reason opens a side drawer form pre-populated with existing values. The list view also supports a configurable data table layout when the view configurations feature flag is enabled.
packages/admin/dashboard/src/routes/refund-reasons · high confidence
Add reservation creation form with quantity validation
The admin dashboard now includes a new form for creating reservations, allowing users to select an inventory item and a stock location, specify a quantity, and add an optional description. The form enforces validation rules, ensuring the requested quantity does not exceed the available quantity at the selected location, and provides user-friendly error messages when limits are exceeded or no stock is available.
packages/admin/dashboard/src/routes/reservations/reservation-create · high confidence
Add reusable Thumbnail component
A new Thumbnail component has been added to the common UI library, providing a consistent way to display product images with a fallback icon. It supports two sizes (small and base) and handles missing image sources gracefully by showing a placeholder icon.
packages/admin/dashboard/src/components/common/thumbnail · high confidence
Add sales channels to API keys via modal form
The API key management section now includes a new modal interface that allows users to associate existing sales channels with an API key. This feature introduces a dedicated route and form component that displays a searchable, paginated data table of available sales channels, enabling users to select multiple channels and submit the changes in a single action.
packages/admin/dashboard/src/routes/api-key-management/api-key-management-sales-channels · high confidence
Add search index management UI in admin dashboard
The admin dashboard now includes a dedicated Search Indexes page that lists all configured search indexes, displaying their status (ready, building, error), provider, and associated fields. Users can trigger a reindex operation via a modal that supports optional filtering by a 'since' timestamp or specific entity IDs, and can delete indexes directly from the list.
packages/admin/dashboard/src/routes/search-indexes · high confidence
Add service zone area management UI for stock locations
The dashboard now includes a new route and form component for managing the geographic areas (countries) within a service zone. Users can edit which countries are included in a specific service zone via a modal interface that validates input using Zod and saves changes through the fulfillment set API, providing success or error feedback via toast notifications.
packages/admin/dashboard/src/routes/locations/location-service-zone-manage-areas · high confidence
Add sortable tree component with keyboard and drag support
The admin dashboard now includes a new \SortableTree\ component in the common UI library, enabling users to rearrange hierarchical items via both mouse dragging and keyboard navigation. This component leverages \@dnd-kit\ to provide smooth drag-and-drop interactions, visual feedback during sorting, and accessible keyboard controls for adjusting item depth and position within the tree structure.
packages/admin/dashboard/src/components/common/sortable-tree · high confidence
Add status cell component to configurable data tables
The admin dashboard's configurable data tables now include a dedicated status cell component that renders a colored indicator dot alongside a text label. This allows table columns to display status information with specific color coding (green, red, blue, orange, grey, or purple) and supports alignment adjustments within the table layout.
packages/admin/dashboard/src/components/data-table/components · high confidence
Add translations editing interface in the admin dashboard
The admin dashboard now includes a new translations editing interface, allowing users to manage translations for specific entities. This feature is gated behind the 'translation' feature flag and provides a form to create, update, and delete translations for a given reference type and locale. The interface includes a data grid for editing multiple fields across multiple entities, with support for batch operations. It also includes a copy action for original translations and handles locale snapshots to track changes.
packages/admin/dashboard/src/routes/translations/translations-edit · high confidence
Add user metadata editing capability in admin dashboard
Users can now edit metadata for existing users via a dedicated route. This change introduces the \UserMetadata\ component, which renders a \MetadataForm\ inside a \RouteDrawer\. The form is pre-populated with the current user's metadata and uses the \useUpdateUser\ hook to persist changes, accessible via the user's ID from the URL parameters.
packages/admin/dashboard/src/routes/orders/order-edit-email, packages/admin/dashboard/src/routes/users/user-metadata · high confidence
Add variant prices section component
The product variant detail page now includes a dedicated section for displaying variant prices. This new component lists prices filtered to exclude those with specific rules, sorts them by currency code, and implements pagination to show the first three prices with a 'Show More' button for the rest. It also provides a link to edit prices via an action menu.
packages/admin/dashboard/src/routes/product-variants/product-variant-detail/components/variant-prices-section, packages/admin/dashboard/src/routes/promotions/promotion-detail/components/promotion-conditions-section · high confidence
Add variant-specific media section to product variant detail
The product variant detail view now includes a dedicated media section that displays only images scoped to the current variant. This component filters the variant's images to show those explicitly linked to the variant ID, highlights the thumbnail image with a badge, and provides an action menu to edit images, replacing the previous behavior where all variant images might have been displayed indiscriminately.
packages/admin/dashboard/src/routes/product-variants/product-variant-detail/components/variant-media-section · high confidence
Added deep-merge utility for configuration merging
The admin-shared package now includes a new \deep-merge\ utility function that recursively merges source objects into target objects, preserving existing properties when the source value is not an object. This utility, along with its helper \isObject\ check, is exported from the utils index, enabling consistent deep-merging behavior for configuration or state updates within the admin dashboard.
packages/admin/admin-shared/src/utils · high confidence
Added documentation for advanced database operations in services
This change introduces a new documentation page explaining how to perform advanced database operations within a module's service using MikroORM. It details the use of \InjectManager\ and \InjectTransactionManager\ decorators to run queries and wrap operations in transactions, including specific code examples for retrieving record counts and executing SQL statements.
www/apps/book/app/learn/fundamentals/modules/db-operations · high confidence
Added documentation on module options configuration and validation
A new documentation page has been added to the fundamentals section explaining how to pass, access, and validate module options. It covers configuring options in \medusa-config.ts\ for both modules and plugins, accessing them in main services and loaders, and performing early validation in loaders to ensure required options like API keys are present before the application starts.
www/apps/book/app/learn/fundamentals/modules/options · high confidence
Added generic forward ref utility and visually hidden component
The dashboard now includes a new \genericForwardRef\ utility function that wraps React's \forwardRef\ to support generic type parameters, simplifying the creation of forward-ref components with custom props. Additionally, a \VisuallyHidden\ component has been added to render content that is visually hidden but remains accessible to screen readers using the \sr-only\ class.
packages/admin/dashboard/src/components/utilities/generic-forward-ref · high confidence
Admin bundler exposes configurable maximum file upload size
The admin bundler now supports a configurable maximum file upload size. This is implemented by introducing a new \BundlerOptions\ type that includes the \maxUploadFileSize\ property (inherited from \AdminOptions\), making this setting available to the bundler's build and development commands.
packages/admin/admin-bundler/src · high confidence
Admin dashboard adds full CRUD interface for RBAC roles
The admin dashboard now includes a complete user interface for managing Role-Based Access Control (RBAC) roles. Administrators can create new roles by defining a name, description, and selecting specific permission policies via a multi-step form. Existing roles can be viewed in a searchable list, and their details—such as assigned users and policies—can be edited or deleted. Additionally, administrators can manage role membership by adding or removing users from specific roles, with all actions gated by the appropriate \rbac\_role\ and \user\ permissions.
packages/admin/dashboard/src/routes/roles · high confidence
Admin dashboard i18n infrastructure and locale definitions added
The admin dashboard now includes the core internationalization setup, defining configuration for language detection (via cookie, localStorage, and header) with English as the fallback, a comprehensive list of supported languages (including English, Bosnian, Bulgarian, German, Finnish, French, Hebrew, Croatian, Hungarian, Italian, Japanese, Polish, Brazilian Portuguese, European Portuguese, Turkish, Thai, Ukrainian, Romanian, Macedonian, Mongolian, Arabic, Simplified Chinese, Persian, and others) with their display names and directionality, and specific pluralization rules for each locale to ensure correct text formatting.
packages/admin/dashboard/src/i18n · high confidence
Admin dashboard introduces RBAC-based route protection
The admin dashboard now enforces role-based access control (RBAC) on routes. A new ProtectedRoute component wraps the application layout and conditionally fetches user permissions when the RBAC feature flag is enabled. Additionally, a RoutePermissionGuard component allows developers to declare specific permission requirements (e.g., 'customer:create') directly in route handles, automatically blocking access and displaying an 'Access Denied' screen if the user lacks the necessary permissions.
packages/admin/dashboard/src/components/authentication · high confidence
Admin dashboard list pages adopt LayoutComposer and configurable tables
The admin dashboard's list routes (including API keys, campaigns, collections, customer groups, price lists, promotions, reservations, shipping profiles, and users) have been refactored to use the new LayoutComposer component for page structure. These pages now conditionally render a ConfigurableTable variant when the 'view\_configurations' feature flag is enabled, allowing for customizable data views, while falling back to the standard table implementation otherwise.
(repo-wide) · high confidence
Admin dashboard now displays feed channel notifications in a dedicated drawer
Users can now view notifications from the 'feed' channel directly within the admin dashboard via a new notification drawer, accessible via a bell icon in the layout. The component filters notifications specifically for the currently logged-in user (by ID or email) and distinguishes between read and unread items using a visual indicator and local storage tracking. It supports displaying notification titles, descriptions, and attached files, with an infinite scroll list for performance.
packages/admin/dashboard/src/components/layout/notifications · high confidence
Admin dashboard now includes RBAC policy management views
The admin dashboard now provides the UI components for managing RBAC policies, including a list view (PolicyListTable), a detail view (PolicyDetail) with general and roles sections, and forms for creating (CreatePolicyForm) and editing (EditPolicyForm) policies. These components are gated by the RBAC feature flag and permission checks, meaning they will only render when RBAC is enabled and the user has the appropriate permissions (e.g., rbac\_policy:create, rbac\_role:read).
packages/admin/dashboard/src/routes/policies · high confidence
Admin profile page now supports Multi-Factor Authentication (MFA)
The admin profile detail page has been updated to include a dedicated MFA section, allowing users to enable, verify, and disable two-factor authentication via an authenticator app. This change introduces new UI components for generating and displaying QR codes, managing recovery codes, and handling the verification workflow, alongside a refactored general profile section that displays user name, email, and language preferences.
packages/admin/dashboard/src/routes/profile/profile-detail · high confidence
Auth module initialization with MFA, verification, and cloud OAuth support
The auth module is now available as a standalone package, introducing multi-factor authentication (MFA) with TOTP and recovery code providers, email verification primitives, and a Medusa Cloud OAuth provider. The module also includes integration tests for auth identity management, provider loading, and MFA lifecycle events, ensuring robust authentication workflows out of the box.
packages/modules/auth · high confidence
Automated column alignment and ordering for data tables
The dashboard now automatically applies appropriate alignment and initial ordering to columns in data tables based on their metadata. Currency, number, and amount/price fields are right-aligned, country fields are centered, and other fields default to left alignment. Additionally, columns are initially ordered according to their default\_order property, ensuring a consistent and logical layout for users viewing product and other data.
packages/admin/dashboard/src/utils · high confidence
Automated i18n validation and currency data generation scripts
Added build scripts to the admin dashboard to automate internationalization quality checks and data generation. The new \validate-translation\ script enforces locale-specific plural forms and validates translation files against a generated JSON schema, while \sync-translations\ handles merging and placeholder consistency. Additionally, a new \generate-currencies\ script automatically creates the \currencies.ts\ type definition from Medusa's core currency utilities, ensuring the dashboard's currency data stays in sync with the backend.
packages/admin/dashboard/scripts · high confidence
Centralized Medusa SDK initialization in the admin dashboard
The admin dashboard now exposes a centralized SDK client instance via \packages/admin/dashboard/src/lib/client\. This client initializes the Medusa JS SDK using environment variables for the backend URL (\\_\_BACKEND\URL\\\), authentication type (\\\_AUTH\TYPE\\\), and JWT token storage key (\\\_JWT\_TOKEN\_STORAGE\KEY\\_\), defaulting to a relative path for the backend URL and session-based authentication. This change provides a single point of configuration for API connectivity and authentication within the dashboard application.
packages/admin/dashboard/src/lib/client · high confidence
Centralized exports for admin extension APIs
The admin-shared package now serves as the central entry point for core admin extension capabilities. Users can import custom fields, layout definitions, route configurations, and widget extensions directly from this module, simplifying access to the reworked admin extension system and custom fields API.
packages/admin/admin-shared/src · high confidence
Centralized table column definitions and configurable view support in the admin dashboard
The admin dashboard now organizes table column definitions into a dedicated \hooks/table/columns\ directory, providing standardized hooks for orders, products, customers, campaigns, and other entities. This change introduces a \useConfigurableTableColumns\ hook that dynamically generates table columns based on API-driven \AdminColumn\ configurations, enabling features like custom cell renderers, sorting, and visibility control. Additionally, a new \useColumnState\ hook manages column visibility and ordering, allowing users to save and switch between different table view configurations.
packages/admin/dashboard/src/hooks/table/columns · high confidence
Cloud documentation site scaffolding and initial content
The Cloud documentation application is now scaffolded with a Next.js structure, including configuration files (ESLint, environment variables, gitignore) and a comprehensive set of initial documentation pages. These pages cover core Cloud concepts and features, such as the Cloud Assistant, access keys, billing management, caching, CLI usage for AI agents, and the changelog. This establishes the foundational content and infrastructure for the Cloud docs site.
www/apps/cloud · high confidence
Customers section rewritten with new UI components and layout system
The customer management interface in the admin dashboard has been rebuilt from the ground up. The customer list now supports a configurable data table (when the view\_configurations feature flag is enabled), allowing for customizable columns and layouts. The customer detail page has been restructured using the new LayoutComposer, presenting customer information in a two-column layout with dedicated sections for general details, orders, and customer groups. Creating and editing customers now occurs in focused modals and drawers respectively, with improved form validation using Zod. Additionally, users can now manage customer addresses and assign customer groups directly from the customer detail view, with proper permission guards applied to all actions.
packages/admin/dashboard/src/routes/customers · high confidence
Customizable menu item ranking and optional route support in the admin dashboard
The admin dashboard now allows plugins to define a \rank\ property for menu items, enabling precise control over the order in which navigation links appear in the sidebar (items with a rank are sorted first, followed by unranked items in their original order). Additionally, the dashboard app now supports optional splat routes (e.g., \/path/:id?\), stripping the optional segment from the menu path to ensure valid sidebar entries while preserving the underlying route flexibility. These changes are implemented in the \DashboardApp\ class and its associated utility functions, which handle the population and sorting of menu items from plugin extensions.
packages/admin/dashboard/src/dashboard-app · high confidence
Documentation app restructured with new linting, fonts, and agent feedback tracking
The documentation application (\www/apps/book\) has been reorganized into a new Next.js project structure. This includes adding a dedicated ESLint configuration (\.content.eslint.mjs\) for linting MDX and embedded code, defining Google fonts (Inter and Roboto Mono) in \app/fonts.ts\, and implementing a new agent feedback endpoint (\app/agents/feedback/route.ts\) that captures user feedback via PostHog. The app also now includes a \.env.sample\ with required environment variables for Algolia, PostHog, and Cloud services, alongside updated configuration files for agent documentation testing and Vercel deployment.
www/apps/book · high confidence
Enable editing of order metadata in the admin dashboard
The admin dashboard now includes a dedicated interface for viewing and modifying order metadata. This change introduces the OrderMetadata component, which fetches the current metadata for a specific order and provides a form (MetadataForm) to update it via the useUpdateOrder hook, allowing users to persist changes directly from the dashboard.
packages/admin/dashboard/src/routes/orders/order-metadata · high confidence
First and last name fields added to order address editing forms
The order-edit-billing-address and order-edit-shipping-address routes in the admin dashboard now include first\_name and last\_name input fields. These new fields are validated via Zod schemas, pre-filled with existing order data, and submitted to update the respective billing or shipping address on the order.
packages/admin/dashboard/src/routes/orders/order-edit-billing-address, packages/admin/dashboard/src/routes/orders/order-edit-shipping-address · high confidence
Initial release of the standalone Product Module
The \@medusajs/product\ package is now available as a standalone module, allowing you to manage Products, Variants, Categories, Tags, and Collections independently in Next.js functions or other Node.js runtimes. This release includes the core service implementation, database migrations, and integration tests to support isolated product management workflows.
packages/modules/product · high confidence
Introduce @medusajs/admin-vite-plugin package with Vite 5-7 support
The new @medusajs/admin-vite-plugin package provides a Vite plugin for the Medusa admin, supporting Vite versions 5, 6, and 7. It includes configuration for building CommonJS and ESM outputs, along with test setup via Vitest. A key behavioral update in version 2.19.0 widens the supported Vite peer range to include v5, v6, and v7, and removes the unused chokidar dependency in favor of Vite's built-in watcher.
packages/admin/admin-vite-plugin · high confidence
Introduce @medusajs/eslint-plugin with framework-specific linting rules
The new @medusajs/eslint-plugin enforces Medusa's coding conventions through a set of ESLint rules and three configuration presets: recommended, strict, and modules. The recommended preset covers workflows (e.g., no async constructors, no nested when/then blocks, step naming), API routes (e.g., route file naming, authentication flags), admin dashboard code (e.g., arrow-function components, using import.meta.env instead of process.env, avoiding Node-only framework imports), and module links. The strict preset adds type-aware and cross-file rules that require a tsconfig, such as checking for non-serializable step returns and ensuring scheduled job names are unique. The modules preset targets standalone module/provider packages, enforcing service patterns, module definition structure, and data model conventions. The plugin also ships with a modules config preset and supports ESLint 8.57+.
packages/eslint-plugin · high confidence
Introduce @medusajs/locking module with in-memory provider
The new @medusajs/locking module provides distributed locking capabilities to prevent race conditions in concurrent operations. It ships with a default in-memory provider (InMemoryLockingProvider) that supports acquiring, releasing, and executing jobs with keys, including timeout handling and owner-based lock management. The module allows configuration of custom providers via the module options, enabling users to swap the default implementation for other backends if needed.
packages/modules/locking · high confidence
Introduce Analytics Module with Provider Architecture
The analytics module is now available, allowing users to track and identify user events through a pluggable provider system. The module exposes \track\ and \identify\ methods on the analytics service, which delegate to a single registered analytics provider. Users can configure the module by specifying a provider (such as a local or PostHog implementation) in the Medusa configuration, enabling flexible integration with external analytics platforms.
packages/modules/analytics · high confidence
Introduce Draft Order plugin for creating and managing orders on behalf of customers
The new Draft Order plugin enables admin users to create and manage draft orders directly from the Medusa Admin dashboard, a capability particularly useful for customer support scenarios or offline order placement. Administrators can associate customers with draft orders, manage line items (add, update, remove), and apply shipping methods. The plugin provides a dedicated UI for viewing and editing these orders, including handling pending edits and viewing activity logs, before converting the draft into a regular order for final purchase completion.
packages/plugins/draft-order · high confidence
Introduce Layout Composer for customizable admin dashboard sections
The admin dashboard now includes a Layout Composer system that allows users to customize the arrangement of the page, top bar, and sidebars. This change introduces a new \LayoutComposer\ component and a \CustomizerMenu\ in the top bar, enabling users to reorder, hide, or move widgets between sections via drag-and-drop. The system supports multiple layout definitions (single column, single row, two column, and settings sidebar) and persists user preferences for widget order and visibility. It also provides a \detailPageDefaultEntries\ helper to wrap standard detail page sections (metadata, JSON view, permissions) in the composer, ensuring these elements can be customized alongside core content.
packages/admin/dashboard/src/components/layout-composer · high confidence
Introduce Order General Section component for order details view
Added the \OrderGeneralSection\ component to the order detail page, which displays the order ID with a copy button, creation date, sales channel, and status badges for order, payment, and fulfillment states. It also provides a cancel action in the action menu that triggers a confirmation prompt and handles success/error toast notifications.
packages/admin/dashboard/src/routes/orders/order-detail/components/order-general-section · high confidence
Introduce RBAC module for role-based access control
The new \@medusajs/rbac\ module provides the core infrastructure for role-based access control, including database models for roles, policies, and their relationships. It introduces a \RbacModuleService\ that manages role and policy creation, linking, and soft-deletion, while an initial data loader automatically provisions a Super Admin role with wildcard permissions upon application start. The module also includes a custom repository with recursive SQL queries to resolve role hierarchies and detect circular dependencies, ensuring that inherited policies are correctly calculated for nested roles.
packages/modules/rbac · high confidence
Introduce Redis cache module
The \@medusajs/cache-redis\ package is now available, allowing users to use Redis as a cache store for Medusa. The module provides a \RedisCacheService\ that implements the standard cache interface, supporting configuration for the Redis connection URL, client options, a custom key namespace (defaulting to \medusa:\), and a default time-to-live (TTL) of 30 seconds. It includes a loader to establish the Redis connection and handles key invalidation via pattern scanning.
packages/modules/cache-redis · high confidence
Introduce RouteDrawer component for modal form workflows
A new RouteDrawer component is added to the admin dashboard, providing a drawer-based modal wrapper designed for rendering forms on separate routes. It automatically opens on mount to ensure entry animations play, manages navigation state via a 'prev' prop, and integrates with stacked modal providers to handle nested UI interactions.
packages/admin/dashboard/src/components/modals/route-drawer · high confidence
Introduce RouteModalProvider for managing modal navigation state
Added a new RouteModalProvider component and associated context to the admin dashboard's modal system. This provider manages navigation state for modals, allowing them to handle success callbacks and control escape-key behavior. It exposes a \handleSuccess\ function to navigate back to a previous route or a specified path after a successful action, and a \setCloseOnEscape\ function to toggle whether pressing Escape closes the modal. A custom hook \useRouteModal\ is also provided to access this context within child components.
packages/admin/dashboard/src/components/modals/route-modal-provider · high confidence
Introduce Settings module for persisting admin view configurations and user preferences
The new \@medusajs/settings\ module provides a backend service for storing and managing admin interface settings, including user-specific view configurations (column visibility, order, filters, and sorting), system-wide default view configurations, custom property labels for entities, and arbitrary user preferences. It also introduces an entity discovery service that introspects other modules (like Product and Order) to generate column definitions for the admin dashboard, enabling the configurable data tables feature.
packages/modules/settings · high confidence
Introduce Store Credit module with account and transaction management
The loyalty plugin now includes a new Store Credit module that allows managing customer store credit accounts and their associated transactions. This change introduces the core data models (StoreCreditAccount and AccountTransaction), database migrations for the \store\_credit\_account\ and \store\_credit\_account\_transaction\ tables, and the \StoreCreditService\ implementation. The service provides methods to list accounts with calculated balances (credits, debits, and net balance), update account metadata, and manage transactions. It also includes logic to exclude soft-deleted transactions from balance calculations and prevents updates to critical fields like \customer\_id\ and \currency\_code\ to ensure data integrity.
packages/plugins/loyalty/src/modules/store-credit · high confidence
Introduce User Module with invite token validation and unique email constraints
The new User Module introduces user and invite management with strict data integrity and security measures. Invite tokens are now validated against the stored value to reject rotated or reused tokens, and unique indexes on the email columns for both users and invites prevent duplicate accounts. The module also includes integration tests covering invite listing, retrieval, updates, and token validation.
packages/modules/user · high confidence
Introduce anonymous usage telemetry collection
The medusa-telemetry package now collects anonymous usage analytics to help improve the platform. Upon installation, users will see a notification prompting them to opt-in or opt-out; tracking can be disabled via the \medusa telemetry --disable\ command or by setting the \MEDUSA\_DISABLE\_TELEMETRY\ environment variable. The system tracks anonymous data including the Medusa and CLI versions, operating system details, and information about installed modules and plugins, sending this data in batches to a telemetry endpoint.
packages/medusa-telemetry · high confidence
Introduce centralized Providers component for dashboard context management
The dashboard now uses a new \Providers\ component to wrap the application with essential context providers, including \ExtensionProvider\, \QueryClientProvider\, \ThemeProvider\, \FeatureFlagProvider\, and \I18nProvider\. This change centralizes the setup of UI, data fetching, theming, feature flags, and internationalization contexts, ensuring consistent availability of these services across the admin dashboard.
packages/admin/dashboard/src/providers · high confidence
Introduce configurable data tables with view management
The admin dashboard now includes a new \ConfigurableDataTable\ component that allows users to customize table layouts, including column visibility, ordering, and filtering. This component integrates with a view configuration system, enabling users to save, update, and switch between different table views (e.g., 'Default' or custom named views) via a \SaveViewDropdown\. It supports dynamic column rendering, row selection, and action buttons, and handles query parameter serialization for nested filters.
packages/admin/dashboard/src/components/table/configurable-data-table · high confidence
Introduce configurable global search with dynamic entity support
The dashboard now features a new global search component that combines static navigation/shortcut results with dynamic results fetched from a backend endpoint. Users can filter search results by area (all, command, navigation, or specific registered entities), and the system supports configurable search entities via a registry, allowing apps to customize which data types appear in search. The search interface includes debounced input, loading states, and pagination for large result sets.
packages/admin/dashboard/src/components/search · high confidence
Introduce configurable order views in the Admin dashboard
The Orders list now supports saving, updating, and switching between multiple table configurations (views). Users can customize column visibility, order, and filters, then save these setups as new views, update existing ones, or set a view as the default for all users via the new Save View dropdown. The table rendering is now driven by a configurable data table component that adapts to these saved configurations, allowing for personalized order management workflows.
packages/admin/dashboard/src/routes/orders/order-list/components · high confidence
Introduce create-medusa-app CLI for new project scaffolding
The \create-medusa-app\ package is now available as a standalone CLI tool to scaffold new Medusa projects. It supports creating both full applications and plugins, allows specifying a custom repository URL, and lets users choose between npm, yarn, pnpm, or the newly detected 'nub' package manager. The setup process includes automatic database creation, migration execution, and optional seeding with demo data. It also supports installing a Next.js storefront alongside the backend and integrates a prompt to install the Medusa plugin for Claude Code when detected. The tool enforces a minimum Node.js version (v22.22.0) and provides clear error handling for database connection issues.
packages/cli · high confidence
Introduce custom fields API for product forms and displays
This change adds the foundational structure for the new custom fields API within the admin shared package. It defines the TypeScript types, constants, and validation utilities that allow custom fields to be injected into specific product-related areas, including the create, edit, organize, and attributes form zones, as well as the general, organize, and attributes display zones. This provides the type-safe hooks needed for extensions to modify product data entry and presentation.
packages/admin/admin-shared/src/extensions/custom-fields · high confidence
Introduce damaged item write-off capability in return receiving
The Order Receive Return flow now allows users to mark items as damaged or lost during the receiving process. A new DismissedQuantity component adds a button to specify a write-off amount for each line item, which is validated against the total return quantity and persisted via new API mutations (add, update, remove dismissed items). The receiving form schema and UI have been updated to track and submit these dismissed quantities alongside standard received quantities.
packages/admin/dashboard/src/routes/orders/order-receive-return · high confidence
Introduce dedicated Order Summary Section component
The order detail page now uses a new \OrderSummarySection\ component to render the summary area. This component consolidates the display of order totals, payment status, and fulfillment actions, including logic to show allocation buttons for unreserved items and handle payment marking. It also introduces \ReturnInfoPopover\ and \ShippingInfoPopover\ to provide contextual details about returns, claims, and exchanges directly within the summary view.
packages/admin/dashboard/src/routes/orders/order-detail/components/order-payment-section, packages/admin/dashboard/src/routes/orders/order-detail/components/order-summary-section, packages/admin/dashboard/src/routes/product-variants/product-variant-detail/components/variant-general-section · high confidence
Introduce dedicated Store module for managing store configuration
The store module is now a standalone package (\@medusajs/store\) that manages store-level configuration, including supported currencies and locales. This change introduces new database tables (\store\_currency\, \store\_locale\) to handle these relationships, replacing the previous flat structure. Users can now create, update, and manage stores with validation for default currencies and duplicate codes, and the module exposes linkable entities for \store\, \storeCurrency\, and \storeLocale\.
packages/modules/store · high confidence
Introduce dedicated order refund creation flow
The dashboard now includes a dedicated route and UI for creating refunds on orders. This change adds a new \CreateRefundForm\ component that handles refund logic, including selecting a specific payment to refund, inputting the refund amount with proper currency formatting and rounding, and adding optional notes or reasons. The form is presented in a drawer and integrates with the order details page, conditionally rendering either the standard refund form or a balance settlement form depending on whether a loyalty plugin is active.
packages/admin/dashboard/src/routes/orders/order-create-refund · high confidence
Introduce docs-automator package for generating documentation update prompts
The new \docs-automator\ package provides CLI commands (\analyze\, \analyze-cloud\, \analyze-webhooks\) that analyze code changes or deployment payloads and generate structured prompts for an AI documentation assistant. It includes classes to analyze git diffs against specific package categories, map those changes to relevant documentation projects (book, resources, UI, user-guide), and build context for Cloud dashboard and webhook updates, enabling automated documentation maintenance.
www/utils/packages/docs-automator · high confidence
Introduce dynamic route map generation with extension support
The admin dashboard now uses a centralized \getRouteMap\ function and utility helpers in \routes/utils.ts\ to dynamically construct the React Router route tree. This change replaces static route definitions with a system that accepts \coreRoutes\ and \settingsRoutes\ as inputs, allowing for modular route registration. It introduces support for route extensions, enabling plugins or custom modules to inject new pages (such as metadata forms, product options management, and translation settings) into the existing navigation structure without modifying core files. The implementation also handles parallel routes and splat routes (\\*\), ensuring that dynamically added content integrates correctly with the main layout and protected route guards.
packages/admin/dashboard/src/dashboard-app/routes · high confidence
Introduce global keyboard shortcut system in admin dashboard
The admin dashboard now supports global keyboard shortcuts for navigation and actions. Users can navigate to Settings, Store, Workflows, and Profile using the 'G' key sequence, and log out using the 'B' key sequence. Shortcuts are platform-aware (Mac/Windows/Linux) and can be registered dynamically by plugins or other admin packages via the new KeybindProvider.
packages/admin/dashboard/src/providers/keybind-provider · high confidence
Introduce in-memory cache module for development and testing
The \@medusajs/cache-inmemory\ package is now available, providing a simple cache implementation backed by a plain JavaScript Map. This module is recommended for development and testing environments, offering features such as configurable time-to-live (TTL) expiration, single-key invalidation, and wildcard-based bulk invalidation. It serves as a lightweight alternative to the Redis cache module for production use cases.
packages/modules/cache-inmemory · high confidence
Introduce internal Workflows Diagram Generator utility
Added a new internal CLI tool that generates Mermaid.js diagrams for Medusa workflows. The tool accepts a workflow file or directory and outputs diagrams in various formats (Mermaid source, Markdown, SVG, PNG, PDF) or console output. It supports options to customize the output type, toggle Medusa's default theming, and prettify step names for better readability.
www/utils/packages/workflows-diagrams-generator · high confidence
Introduce multi-step form for adding prices to a price list
The price list prices-add flow now uses a new multi-step form component that guides users through selecting products and then configuring their prices. The first step presents a searchable, paginated product table with row selection, while the second step provides a data grid for entering currency and region-specific prices, including support for quantity-based pricing. The form enforces validation at each step before allowing progression and submits all selected products and their associated price data in a single batch operation.
packages/admin/dashboard/src/routes/price-lists/price-list-prices-add/components · high confidence
Introduce new DataTable-based workflow execution list
The workflow executions list in the admin dashboard has been replaced with a new implementation using the DataTable block. This change updates the user interface to display workflow executions with columns for workflow ID, transaction ID, state, progress (steps completed), and creation date. It also adds filtering capabilities, allowing users to filter by workflow ID, state (status), and creation date, while maintaining pagination and search functionality.
packages/admin/dashboard/src/routes/workflow-executions/workflow-execution-list/components · high confidence
Introduce new MainLayout component for admin dashboard structure
The admin dashboard now uses a new \MainLayout\ component (located in \packages/admin/dashboard/src/components/layout/main-layout\) to define the core shell structure. This component integrates the sidebar, header, and user section, leveraging the \LayoutComposer\ for extensibility and \PermissionGuard\ for access control, effectively establishing the foundational layout for the admin interface.
packages/admin/dashboard/src/components/layout/main-layout · high confidence
Introduce order balance settlement form for refunds and credit lines
The admin dashboard now includes a dedicated form for settling order balances, allowing administrators to process refunds or apply credit lines. The form supports selecting a refund reason, handles currency input formatting, and restricts the credit line option to registered customers with outstanding amounts.
packages/admin/dashboard/src/routes/orders/order-balance-settlement · high confidence
Introduce public layout component with dynamic document titles
The public layout component for the admin dashboard now wraps page content with a DocumentTitle hook, ensuring that browser tab titles update dynamically based on the current route. This component serves as the base layout for public-facing admin pages, integrating React Router's Outlet for nested routing while managing the document title context.
packages/admin/dashboard/src/components/layout/public-layout · high confidence
Introduce reusable sidebar link component with RTL support
A new \SidebarLink\ component has been added to the dashboard's common UI library, providing a consistent, styled navigation link that displays an icon, label, and description. This component includes built-in support for right-to-left (RTL) layouts by rotating the navigation arrow icon when in RTL mode, ensuring the dashboard interface remains usable and visually correct for users in RTL languages.
packages/admin/dashboard/src/components/common/sidebar-link · high confidence
Introduce shared TypeScript types for documentation generation configuration
Added a new \www/utils/packages/types\ package that exports TypeScript definitions for documentation tooling, including \SectionKey\ and \Sections\ for controlling API reference content, \FormattingOptionsType\ for customizing output appearance (e.g., source code links, parameter styles), and \FrontmatterData\ for metadata like tags and keywords. It also extends the TypeDoc option map with new settings such as \enableInternalResolve\, \ignoreApi\, and \frontmatterData\, providing a centralized type contract for the docs-util and reference generation systems.
www/utils/packages/types · high confidence
Introduce shared TypeScript types for the documentation system
The \www/packages/types\ package now provides a centralized set of TypeScript definitions for the documentation infrastructure. This includes types for the new doc-model serialization format (replacing MDX), API reference structures (OpenAPI extensions), sidebar and navigation configurations, cloud status indicators, and UI components. This change establishes a shared type contract between the documentation generator and the rendering layer, ensuring consistency across the docs site.
www/packages/types · high confidence
Introduce the Promotion module with campaign management, usage tracking, and promotion computation tests
The \packages/modules/promotion\ package is added, providing the core promotion engine including campaign creation, budget tracking (spend and usage limits), promotion application logic, and rule evaluation. The diff introduces integration tests for campaign lifecycle, promotion computation (including tax-inclusive stacking and buy-get logic), rule condition evaluation, and concurrent usage registration with serialization to prevent budget overspend. It also includes fixtures for campaigns and promotions, a Jest configuration, and a MikroORM development config, establishing the foundational test suite and module structure for the promotion feature.
packages/modules/promotion · high confidence
Introduce the Search Module with provider-backed indexing and Medusa Cloud support
The new Search module (\@medusajs/search\) provides a provider-backed search system that manages index definitions, migrations, and event-driven ingestion. It includes a built-in Medusa Cloud search provider, allowing users to configure search via connection strings or API keys. The module introduces a DSL for defining index fields (keyword, text, float, etc.) and supports features like typo tolerance, highlighting, and faceting. It replaces the previous local in-memory search provider, requiring indexes to be created via \db:migrate\ rather than at application startup. The module also handles index versioning, allowing for safe swaps and resumable seeding, and includes integration tests for both the core module and the Medusa Cloud provider.
packages/modules/search · high confidence
Introduce the new File module for managing file storage providers
The \@medusajs/file\ module is now available, providing a unified interface for file operations such as uploading, downloading, and deleting files. It supports direct uploads and presigned URL generation via a pluggable provider architecture, allowing users to configure custom storage backends through the module's provider options.
packages/modules/file · high confidence
Introduces RBAC permission types and utility functions in the admin dashboard
The admin dashboard now includes the core TypeScript definitions and helper utilities for Role-Based Access Control (RBAC). This change adds the \PermissionResource\ type covering commerce domains (such as customer, order, product, and rbac\_role) and the \PermissionOperation\ type (read, create, update, delete, and wildcard). It also provides \buildPermission\ and \parsePermission\ utilities to manage permission strings in the \resource:operation\ format, along with an \OPERATION\_IMPLICATIONS\ map that defines how wildcard permissions expand to specific CRUD operations. These components form the foundational type system and parsing logic for permission checks within the dashboard.
packages/admin/dashboard/src/lib/permissions · high confidence
Introduces configurable data table hooks for the admin dashboard
Adds \useTableConfiguration\ and \useRelationshipFilterOptions\ hooks to \packages/admin/dashboard/src/hooks/table\. These hooks enable dynamic table configuration by managing column visibility, sorting, and filtering state, including support for relationship-based filters that fetch options from API endpoints. The implementation integrates with existing view configuration systems and query parameter handling to allow users to customize their data table views.
packages/admin/dashboard/src/hooks/table · high confidence
Inventory module now supports fractional quantities and units of measure
The inventory module has been updated to support fractional inventory quantities and units of measure. This change introduces a new \unit\_of\_measure\ field on inventory items and migrates quantity columns (stocked, reserved, incoming, and reservation quantity) from integers to numeric types with associated raw JSONB fields for precision. This allows users to track inventory in non-integer units (e.g., liters, kilograms) and handle fractional stock levels accurately.
packages/modules/inventory · high confidence
Link modules package initialization and migration planner fixes
The \@medusajs/link-modules\ package is introduced to centralize link definitions between Medusa modules, including new links for cart-payment collections, cart promotions, customer-account holders, fulfillment provider locations, and RBAC role invites. The package also includes a \MigrationsExecutionPlanner\ that fixes PostgreSQL syntax errors during table renames by dropping schema prefixes and ensures correct handling of long table names that exceed database limits.
packages/modules/link-modules · high confidence
Medusa UI documentation site scaffolding and component reference pages
The \www/apps/ui\ directory is initialized as a Next.js application serving the Medusa UI documentation. This includes a new ESLint configuration (\.content.eslintrc.mjs\) for linting Markdown and MDX content, environment variable examples (\.env.example\) for local development and Cloudflare deployment, and a comprehensive set of MDX pages under \app/components/\ (e.g., Alert, Button, DataTable, Drawer) that document the usage, API, and examples for each UI component.
www/apps/ui · high confidence
Migrate to SWC and introduce new API endpoints
The Medusa package now uses SWC for TypeScript compilation, replacing the previous TSC-based build process, which is configured via a new \.swcrc\ file and updated Jest settings. Additionally, this change introduces a suite of new Admin API endpoints and their corresponding workflows for managing API keys, promotional campaigns, and order claims, including operations for creating, updating, revoking, and linking sales channels to API keys, as well as managing campaign promotions and claim item actions.
packages/medusa · high confidence
New @medusajs/icons package with component tests
The design-system now includes a dedicated @medusajs/icons package, providing a standardized set of SVG icons for use in the Medusa UI. This release adds a comprehensive suite of unit tests to ensure each icon renders correctly without errors, and includes a build configuration to bundle the icons for various module formats.
packages/design-system · high confidence
New Action Menu and JSON View Section components in the admin dashboard
The admin dashboard now includes two new common UI components. The Action Menu allows grouping actions with support for disabled states that display custom tooltips, and supports both navigation links and click handlers. The JSON View Section provides a collapsible drawer for inspecting JSON data, featuring syntax highlighting, copy-to-clipboard functionality, and item count badges.
packages/admin/dashboard/src/components/common/action-menu · high confidence
New CategoryCombobox component for product category selection
The admin dashboard now includes a new CategoryCombobox component that allows users to select multiple product categories from a hierarchical tree. This component supports debounced search, multi-level navigation within the category tree, and keyboard navigation for accessibility. It integrates with the existing product categories API and provides a user-friendly interface for assigning categories to products.
packages/admin/dashboard/src/routes/products/common/components/category-combobox · high confidence
New ChipGroup component with variant-specific hover states
A new \ChipGroup\ component has been added to the admin dashboard, providing a container for filter chips that supports two display variants: 'component' and 'base'. The component manages context for removing individual chips and offers a 'Clear All' button when multiple chips are active. Crucially, the implementation includes specific hover and active state styling for the remove buttons, ensuring visual feedback differs based on the selected variant (e.g., \hover:bg-ui-bg-component-hover\ for component variant vs. \hover:bg-ui-bg-base-hover\ for base variant), addressing previous inconsistencies in filter interaction states.
packages/admin/dashboard/src/components/common/chip-group · high confidence
New ChipInput component for managing comma-separated values
The dashboard now includes a new ChipInput component that allows users to enter and manage multiple values as individual chips. This component supports adding values via comma or Enter key, removing individual chips with a close button or backspace, and prevents duplicate entries by default. It features visual feedback for duplicates with a shake animation and supports both controlled and uncontrolled usage patterns.
packages/admin/dashboard/src/components/inputs/chip-input · high confidence
New Combobox input component with search, selection, and multi-value support
The dashboard now includes a new \Combobox\ component for selecting options from a list. It supports both controlled and uncontrolled modes, allowing users to type to filter options locally or via external state. The component handles single and multi-value selections, displays selected values as chips or a count, and allows clearing individual selections in multi-mode. It integrates with React Query for data fetching and supports infinite scrolling for large lists. Tests verify search input behavior, local filtering, selection clearing, and query invalidation.
packages/admin/dashboard/src/components/inputs/combobox · high confidence
New Data Grid component library for the admin dashboard
The admin dashboard now includes a new Data Grid component system, providing a structured way to display and edit tabular data. This update introduces a suite of specialized cell components—including boolean, currency, number, text, and multiline variants—along with a root container that handles selection, navigation, and validation error highlighting. It also adds a keyboard shortcut modal to help users navigate the grid efficiently.
packages/admin/dashboard/src/components/data-grid/components · high confidence
New DataTable component for admin dashboard tables
The admin dashboard now uses a new \DataTable\ component (located in \packages/admin/dashboard/src/components/data-table\) to render list views. This component provides built-in support for pagination, search, sorting, filtering, column visibility toggling, and row selection. It integrates with the application's query parameters for state persistence and respects the \view\_configurations\ feature flag to enable dynamic column management. Existing tables in the dashboard are being migrated to use this standardized component.
packages/admin/dashboard/src/components/data-table · high confidence
New DataTable component with integrated filtering, sorting, and search
The dashboard now includes a new \DataTable\ component that provides a unified interface for displaying tabular data with built-in query capabilities. Users can now apply filters (including date ranges, numeric comparisons, string matching, and multi-select options) directly within the table header, sort columns by key and direction, and perform debounced text searches. These query states are persisted in the URL search parameters, ensuring that filters and sorting survive page navigation and can be shared via links.
packages/admin/dashboard/src/components/table/data-table · high confidence
New DisplayId component for copyable ID snippets
A new DisplayId component has been added to the common components library. It renders a truncated version of an ID (last 7 characters) prefixed with '\#'. Clicking the ID copies the full value to the clipboard and displays a success toast notification, while hovering shows the full ID in a tooltip.
packages/admin/dashboard/src/components/common/display-id · high confidence
New HandleInput and StackedDrawer components added to admin dashboard
The admin dashboard now includes a new \HandleInput\ component, which renders a text input with a leading slash (/) prefix, and a \StackedDrawer\ component that wraps the standard drawer to support nested modal stacking via a context provider. These components are now available for use within the admin interface to enhance input formatting and complex modal interactions.
packages/admin/dashboard/src/components/inputs/handle-input, packages/admin/dashboard/src/components/modals/stacked-drawer · high confidence
New IconAvatar component for admin dashboard
A new \IconAvatar\ component has been added to the admin dashboard's common components, allowing users to render avatars with icons. This component addresses a limitation in the existing \@medusajs/ui\ Avatar component, which does not support passing an icon as a child. It supports configurable sizes (small, large, xlarge) and variants (squared, rounded), providing a flexible solution for avatar displays in the admin interface.
packages/admin/dashboard/src/components/common/icon-avatar · high confidence
New InfiniteList component for paginated data
The dashboard now includes a reusable InfiniteList component that handles bidirectional infinite scrolling for lists. It leverages React Query's useInfiniteQuery to manage pagination state and uses IntersectionObservers to automatically fetch the next or previous page of items as the user scrolls, providing a smoother experience for large datasets like notifications.
packages/admin/dashboard/src/components/common/infinite-list · high confidence
New PercentageInput component with configurable decimal precision
The dashboard now includes a new PercentageInput component that allows users to enter percentage values with support for more decimal places than the previous implementation. This component uses the react-currency-input-field library to handle decimal scaling and limits, ensuring that values are displayed and validated with appropriate precision (defaulting to a minimum of 2 decimal places). It also includes a deprecated version of the input for backward compatibility.
packages/admin/dashboard/src/components/inputs/percentage-input · high confidence
New QuantityInput component with unit of measure support
The admin dashboard now includes a new QuantityInput component that displays an inventory item's unit of measure (e.g., 'lb') as a suffix next to the numeric input field. This component renders the unit as a separate element rather than overlaying it, ensuring the native number stepper remains fully accessible and correctly positioned. If no unit is provided, the component falls back to rendering a standard number input.
packages/admin/dashboard/src/components/inputs/quantity-input · high confidence
New RBAC permission checking components and provider in the admin dashboard
The admin dashboard now includes a new permissions infrastructure to support Role-Based Access Control (RBAC). This change introduces the \PermissionsProvider\ to manage user policies and expose permission-checking hooks (\usePermissions\), a \PermissionsRequirementsProvider\ to collect permission needs from child components, and the \PermissionGuard\ component to conditionally render UI based on whether the user has the required permissions (supporting single permissions, multiple permissions with ANY/ALL logic, and resource-operation pairs). Additionally, the \RequiredPermissionsSection\ component displays a summary of the permissions required by the current view, and the \PermissionsRequirement\ component allows components to register their permission needs without rendering a guard.
packages/admin/dashboard/src/components/common/permission-guard, packages/admin/dashboard/src/components/common/required-permissions-section, packages/admin/dashboard/src/providers/permissions-provider · high confidence
New React Query API hooks for the admin dashboard
The dashboard now exposes a comprehensive set of React Query hooks for managing core resources, including API keys, authentication, campaigns, categories, claims, collections, currencies, customer groups, customers, exchanges, feature flags, fulfillment providers, fulfillment sets, and fulfillments. These hooks provide standardized access to list, retrieve, create, update, and delete operations, automatically handling query invalidation to keep the UI in sync with backend changes.
packages/admin/dashboard/src/hooks/api · high confidence
New RouteFocusModal component for route-based forms
A new \RouteFocusModal\ component is introduced in the admin dashboard to render forms on a separate route. It automatically opens on mount to ensure entry animations play and handles navigation back to a previous location (defaulting to the parent route) when the modal is closed. The component provides sub-components for Header, Title, Body, Description, Footer, Close, and Form, and supports a stacked modal state that adjusts the visual styling of the content area.
packages/admin/dashboard/src/components/modals/route-focus-modal · high confidence
New Shell layout component with breadcrumbs and layout customization
The dashboard now uses a new \Shell\ component to manage the main layout structure. This change introduces a breadcrumb navigation system that dynamically renders links based on route handles, improving wayfinding for users. It also integrates a layout customizer host, allowing for dynamic document titles and potential future layout adjustments, while wrapping the application in a keybind provider for global shortcuts.
packages/admin/dashboard/src/components/layout/shell · high confidence
New StackedFocusModal component for layered modals
The dashboard now includes a new \StackedFocusModal\ component that allows modals to be rendered on top of existing modals. This component manages its own open state via a stacked modal provider, enabling nested modal interactions within the admin interface.
packages/admin/dashboard/src/components/modals/stacked-focus-modal · high confidence
New SwitchBox component for form-integrated toggle controls
The dashboard now includes a SwitchBox component that wraps the UI Switch in a styled container with label, description, and error handling, specifically designed for use with react-hook-form. This component simplifies the creation of toggle fields within forms by providing a consistent layout and built-in form integration, including support for optional indicators, tooltips, and side-effect callbacks on state changes.
packages/admin/dashboard/src/components/common/switch-box · high confidence
New Tailwind CSS configuration package for documentation site theming
A new \www/packages/tailwind\ package has been introduced to centralize and manage the Tailwind CSS configuration for the documentation site. This package defines a comprehensive design system using CSS custom properties (variables) for both light and dark modes, covering backgrounds, foregrounds, borders, buttons, tags, and code blocks. It includes a base configuration that extends \@medusajs/ui-preset\, a modified configuration that prefixes core spacing and border-radius values with \docs\_\ to avoid conflicts, and a final configuration that scans the \docs-ui\ package for content. Additionally, it provides ESLint, PostCSS, and TypeScript configurations to support the development workflow for these styles.
www/packages/tailwind · high confidence
New Translation module for managing locales and entity translations
The new \@medusajs/translation\ module introduces a dedicated system for managing locales and entity translations. It provides a \Locale\ model to store language codes and names, a \Translation\ model to store JSON-based translations for specific entity references (like products), and a \TranslationSettings\ model to configure which fields are translatable per entity type. The module includes a default loader that seeds a comprehensive list of BCP 47 locales (including new additions like Georgian and Mongolian) and automatically initializes translation settings for all registered translatable entities. It also features a \translated\_field\_count\ column to optimize queries by tracking the number of translated fields per entity.
packages/modules/translation · high confidence
New TypeDoc plugin for generating workflow documentation
Added a new \typedoc-plugin-workflows\ utility package that automatically extracts workflow steps, hooks, and their associated types from the codebase to enhance generated API references. The plugin parses workflow definitions to attach detailed documentation for each step and hook, supports generating code examples for hooks, and allows workflows to be ignored or tagged for better reference organization.
www/utils/packages/typedoc-plugin-workflows · high confidence
New UI for creating and editing service zones in stock locations
The stock locations settings now feature dedicated forms for managing service zones. Users can create new service zones via a modal dialog that allows specifying a name and selecting countries, with validation and success feedback. Existing service zones can be edited through a side drawer interface, enabling users to update the zone name. These components are integrated into the location management workflow, replacing previous implementations with a consistent UI pattern using the shared form and modal utilities.
packages/admin/dashboard/src/routes/locations/location-service-zone-create · high confidence
New admin SDK configuration APIs for routes, layouts, and custom fields
The admin SDK now exposes a new \config\ module that provides helper functions and type definitions for configuring the admin interface. Users can use \defineRouteConfig\ to specify route metadata such as sidebar labels, icons, i18n namespaces, nested positioning, and ranking. \defineLayoutConfig\ allows defining custom layouts with named sections that can be targeted by widgets. \defineWidgetConfig\ enables registering widgets into specific injection zones with optional stable IDs for persisting user customizations. Additionally, the experimental \unstable\_defineCustomFieldsConfig\ and \unstable\_createFormHelper\ APIs allow developers to extend existing entity forms (like products or customers) with custom fields, including validation rules, default values, and custom rendering components.
packages/admin/admin-sdk/src · high confidence
New admin dashboard UI components and providers
The admin dashboard now includes a suite of new common UI components, such as BadgeListSummary, ConditionalTooltip, DateRangeDisplay, LinkButton, MetadataSection, Skeleton variants, and SortableList, alongside specialized table cells for customers, sales channels, shipping options, and taxes. Additionally, new providers for search and sidebar state management have been introduced, along with stacked modal support and route-specific components for API key management, customer group metadata, and order detail sections for claims, exchanges, and returns.
(repo-wide) · high confidence
New admin-vite-plugin architecture for extensions, layouts, and custom fields
The admin-vite-plugin has been restructured to introduce a new, modular system for detecting and bundling admin extensions. This change adds support for defining custom fields (including links, forms, and displays) via a new \unstable\_defineCustomFieldsConfig\ API, and allows developers to register custom admin layouts using \defineLayoutConfig\. The plugin now automatically scans for these configurations, generates virtual modules for the UI, and handles internationalization (i18n) merging across multiple sources. It also enhances route generation to support nested menu items, route ranking, and parallel routes with loaders and handles, ensuring consistent behavior across Windows and Unix file systems.
packages/admin/admin-vite-plugin/src · high confidence
New analytics and authentication provider packages
Added new provider packages for analytics (\@medusajs/analytics-local\ and \@medusajs/analytics-posthog\) and authentication (\@medusajs/auth-emailpass\ and \@medusajs/auth-github\). The analytics providers allow tracking and identifying user events locally or via PostHog, while the authentication providers enable email/password and GitHub OAuth login flows.
packages/modules/providers · high confidence
New automation and CI scripts for repository workflows
The repository introduces a suite of new scripts to support automated GitHub workflows and CI processes. This includes a new \assert-plugin-admin-bundle.mjs\ script that validates plugin admin bundles for correct ESM/CJS output and external dependencies, and a \deps-analyze\ directory with tools to analyze dependency sizes and update versions across the workspace. GitHub automation is expanded with scripts for managing issue and PR lifecycles (\add\_comment\, \close\_issue\, \convert\_to\_discussion\, \labels\), fetching repository data (\get\_comments\, \get\_issue\, \get\_pr\, \get\_pr\_diff\, \get\_linked\_issues\), and triaging security and dependency alerts (\security-advisories-to-linear\, \triage-published-alerts\). CI infrastructure is updated with new file-change assertion scripts for GitHub Actions and CircleCI, a script to check team reviews, and a chunked unit test runner for better parallelization.
scripts · high confidence
New automation scripts for documentation maintenance and release workflows
This change introduces a new set of utility scripts in the \www/utils/packages/scripts\ package to automate documentation quality and release processes. The \freshness-check\ script now scans documentation directories (book, resources, user-guide, ui, cloud) to identify markdown files not updated in over six months and automatically creates issues in Linear for the DX team to review. Additionally, new scripts handle release logistics: \change-config-version\ updates the global documentation config with the latest release version, date, and URL; \create-cloud-announcement\ parses release notes to generate and publish announcements in the Cloud UI; and \check-release-commit\ validates release commits. Supporting scripts like \check-pr-files-count\ and \run-changeset\ further streamline the CI/CD pipeline for pull requests and versioning.
www/utils/packages/scripts · high confidence
New caching module with memory provider and invalidation tests
The \@medusajs/caching\ module is introduced, providing a new caching service backed by a built-in memory provider (\cache-memory\) and a loader-based provider system. The module includes a \CachingModuleService\ that manages cache operations, supports tag-based invalidation, and implements promise deduplication for concurrent requests. The memory provider enforces a configurable \maxSize\ limit (defaulting to 300MB) and resets its size accounting on wildcard clears to prevent false 'full' states. Integration tests verify basic cache operations, tag-based retrieval, provider priority, and cache invalidation strategies (including auto-invalidation on entity updates and explicit vs. computed tags).
packages/modules/caching · high confidence
New campaign budget editing and status display components
The dashboard now includes a dedicated UI for editing campaign budgets, allowing users to update the spend or usage limit within a drawer interface that respects the campaign's currency code. Additionally, common utilities have been added to calculate and display a campaign's current status (active, scheduled, or expired) with corresponding color indicators, and default campaign creation values have been standardized to support these budget types.
packages/admin/dashboard/src/routes/campaigns/common · high confidence
New campaign configuration and promotion assignment interfaces
The admin dashboard now includes dedicated UI components for managing campaign details and associating promotions. Users can edit a campaign's start and end dates via a new configuration drawer, and assign specific promotions to a campaign through a new modal featuring a searchable, filterable data table with row selection.
packages/admin/dashboard/src/routes/campaigns/add-campaign-promotions · high confidence
New collection editing interface with error handling
The admin dashboard now includes a dedicated route for editing collections, featuring a form that validates title and handle fields and displays error messages via toast notifications when updates fail. This change introduces the \CollectionEdit\ component and its associated form logic, replacing previous implementation gaps with a structured UI that handles loading states and submission errors.
packages/admin/dashboard/src/routes/collections/collection-edit · high confidence
New common UI components for empty states and list items
The admin dashboard now includes new reusable UI components: \NoResults\ and \NoRecords\ for displaying empty table states with customizable titles, messages, icons, and action buttons, and \Listicle\ for rendering list items with labels, descriptions, and optional children. These components standardize the appearance of empty states and list entries across the admin interface.
packages/admin/dashboard/src/components/common/empty-table-content · high confidence
New common table cell components for the admin dashboard
The admin dashboard now includes a new set of reusable table cell components in the common directory, including CodeCell, CreatedAtCell, DateCell, EmailCell, MoneyAmountCell, NameCell, StatusCell, TextCell, and TieredPriceCell. These components provide consistent rendering for various data types within tables, with features like tooltips for dates, formatted currency display, and placeholder handling for empty values. The TieredPriceCell specifically supports tiered pricing inputs with currency formatting and modal expansion capabilities.
packages/admin/dashboard/src/components/table/table-cells/common · high confidence
New components for Stock Location detail view
The Stock Location detail page now includes dedicated UI sections for managing fulfillment providers, sales channels, and general location settings (including fulfillment sets and shipping options). These new components allow users to view and edit the specific fulfillment and sales channel associations for each location directly from the location's detail view.
packages/admin/dashboard/src/routes/locations/location-detail/components · high confidence
New configurable file upload component with size validation
The admin dashboard now includes a new \FileUpload\ component that supports drag-and-drop and click-to-select interactions. It validates uploaded files against allowed formats and a configurable maximum file size (defaulting to 1MB, but adjustable via the \maxFileSize\ prop or the \\_\_MAX\_UPLOAD\_FILE\SIZE\\_\ environment variable). Files exceeding the size limit or with unsupported formats are rejected and reported back to the consumer, allowing for immediate user feedback without server interaction.
packages/admin/dashboard/src/components/common/file-upload · high confidence
New custom TypeDoc plugin for enhanced API documentation generation
A new custom TypeDoc plugin has been introduced to improve the generation of API reference documentation. This plugin adds support for parsing DML (Data Model Language) JSON files to enrich documentation with metadata such as versioning (@since), deprecation status, and feature flags. It also resolves DML relations to accurately display data model relationships in Mermaid diagrams, normalizes primary key and nullable types for clearer type signatures, and integrates ESLint to validate code examples within the documentation. Additional features include automatic namespace generation based on file paths or custom tags, frontmatter injection for static site generators, and the ability to ignore specific API items or parent fields via custom tags.
www/utils/packages/typedoc-plugin-custom · high confidence
New customer info component with copy-to-clipboard for contact details and addresses
The dashboard now includes a new \CustomerInfo\ component that displays order customer details, including ID, company, contact information, and shipping/billing addresses. A key behavioral improvement is the addition of copy-to-clipboard functionality for the customer's email, phone number, and full address text, allowing users to easily copy this information with a single click. The component also handles cases where billing and shipping addresses are identical by displaying a 'same as shipping' indicator instead of duplicating the address block.
packages/admin/dashboard/src/components/common/customer-info · high confidence
New dashboard hooks for layout, permissions, and data handling
The dashboard now includes a suite of new React hooks to support advanced UI capabilities. \useLayoutPreference\ and \useLayoutDnd\ enable users to customize and drag-and-drop the admin layout, with changes persisted to the server. \useResourcePermissions\ and \useRequireRbacFeature\ enforce role-based access control, gating UI elements based on user permissions. Data handling is improved with \useDataTable\ for table pagination and selection, \useComboboxData\ for efficient combobox search and caching, and \useInfiniteList\ for infinite scrolling. Additional hooks like \useDocumentTitle\ and \useDate\ enhance the user experience with dynamic browser titles and localized date formatting.
packages/admin/dashboard/src/hooks · high confidence
New dashboard utility library for formatting, validation, and status logic
The admin dashboard now includes a new \lib\ directory containing a suite of utility functions to standardize data handling across the interface. This adds helpers for formatting addresses, currency amounts, file sizes, and inventory quantities (including support for fractional units of measure), as well as logic for determining promotion statuses and order payment/fulfillment states. It also introduces robust form validation schemas using Zod, number arithmetic helpers to prevent floating-point errors, and a mechanism to automatically reload the dashboard when Vite chunk preload errors occur after a deployment.
packages/admin/dashboard/src/lib · high confidence
New data-grid helpers for structured price column generation
The admin dashboard now includes new helper utilities in the data-grid module to standardize how price columns are defined and rendered. The \createDataGridHelper\ provides a typed wrapper around TanStack Table's column creation, allowing columns to carry metadata for field paths and types, while \createData-gridPriceColumns\ uses this helper to automatically generate columns for currencies and regions. These price columns intelligently handle read-only states, display currency/region names with tax-inclusive indicators, and render appropriate currency cells, simplifying the integration of complex pricing data into admin data grids.
packages/admin/dashboard/src/components/data-grid/helpers · high confidence
New docs-generator package for automated documentation
A new \docs-generator\ utility package has been introduced to automate the creation of documentation artifacts. This CLI tool scans source code to generate TSDoc docblocks for TypeScript files, produces OpenAPI Specification (OAS) YAML comments for API routes, and creates JSON documentation files for Medusa Data Model (DML) definitions. It also includes specific generators for API events and route examples (such as JS SDK snippets), supporting workflows like generating docs for specific files, git changes, or full releases.
www/utils/packages/docs-generator · high confidence
New documentation build scripts for sidebars, sitemaps, and LLM content
The \www/packages/build-scripts\ package now includes a suite of new utilities to automate documentation generation. This adds support for generating and splitting sidebars (including tag-based sorting and unique ID validation), creating sitemaps by scanning MDX pages, and producing \llms-full.txt\ files for LLM consumption with custom generators for workflows, steps, JS SDK, and API references. It also introduces scripts to copy MDX files to public directories, generate file edit dates from Git history, and catch bad redirects during the build process.
www/packages/build-scripts · high confidence
New documentation on creating Medusa plugins
Added a new guide explaining how to create and publish a Medusa plugin, including project setup via the CLI, directory structure, package configuration, and keyword requirements for third-party integrations.
www/apps/book/app/learn/fundamentals/plugins/create · high confidence
New documentation on module isolation concepts and patterns
Added a new chapter explaining how modules are isolated, detailing that modules cannot directly access resources from other modules. It introduces Module Links for extending data models, Query for cross-module data retrieval, and Workflows for building features that depend on functionalities from different modules, including code examples for syncing data between a Brand Module and a CMS.
www/apps/book/app/learn/fundamentals/modules/isolation · high confidence
New documentation utility library for MDX-to-Markdown conversion and API reference path generation
The \www/packages/docs-utils\ package has been introduced to provide shared utilities for the documentation system. It includes a robust MDX-to-Markdown conversion engine (\getClean-md\) that resolves MDX expressions, handles component parsing, and strips UI-only metadata to produce clean Markdown for LLM consumption or copy-paste. Additionally, it provides logic for generating unique URL slugs for API reference operations (\api-ref-paths\), converting structured doc-model JSON into Markdown (\doc-page-to-markdown\), and managing route errors in a worker-compatible way (\route-error\). The package also supports dual-module output (ESM and CommonJS) via dedicated TypeScript configurations and includes a script to mark the CommonJS output directory.
www/packages/docs-utils · high confidence
New documentation utility library for parsing TypeDoc reflections
A new \www/utils/packages/utils\ library has been introduced to support the generation of API references and documentation. It provides specialized utilities for parsing TypeDoc reflection structures, including detection of DML entities and relations, extraction of workflow and step input/output types, and handling of hook inputs. The package also includes helpers for generating fake example data, formatting strings, and managing tags, enabling more accurate and comprehensive documentation generation for the platform's core workflows and data models.
www/utils/packages/utils · high confidence
New drawer for managing inventory item stock locations
The inventory detail view now includes a dedicated drawer for managing which stock locations hold inventory for a specific item. This new interface allows users to search through available stock locations, select or deselect them via checkboxes, and save the changes to update inventory levels. The component handles the logic for determining which locations to add or remove and provides user feedback via toast notifications upon success or failure.
packages/admin/dashboard/src/routes/inventory/inventory-detail/components/manage-locations · high confidence
New edit and create routes for API keys, campaigns, customer groups, and locations
The admin dashboard now includes dedicated edit pages for API keys, campaigns, and customer groups, as well as a create page for stock locations. These new routes render their respective forms inside modal drawers or focus modals, allowing users to update titles, campaign details (including date ranges), group names, and location addresses directly within the interface.
(repo-wide) · high confidence
New exchange creation flow with item selection tables
The dashboard now provides a dedicated route for creating exchanges, featuring new \AddExchangeInboundItemsTable\ and \AddExchangeOutboundItemsTable\ components. These tables allow users to select items to return (inbound) and items to receive (outbound) with search, sorting, and date filtering capabilities. The flow includes a comprehensive form (\ExchangeCreateForm\) that manages inbound and outbound sections, supports custom shipping costs, and includes a toggle to carry over existing promotions to the new exchange.
packages/admin/dashboard/src/routes/orders/order-create-exchange · high confidence
New extension context provider for plugin integration
The dashboard now includes an ExtensionProvider and corresponding React context (ExtensionContext) along with a useExtension hook. This allows components within the dashboard to access the ExtensionApi, enabling plugins to interact with the dashboard application through a standardized injection mechanism.
packages/admin/dashboard/src/providers/extension-provider · high confidence
New feature flag provider for dashboard configuration
The dashboard now includes a FeatureFlagProvider component that manages feature flags via a React context. This provider fetches flag data using the existing useFeatureFlags hook and exposes utilities like useFeatureFlag to check if specific features are enabled, allowing the admin dashboard to dynamically toggle functionality based on server-side configuration.
packages/admin/dashboard/src/providers/feature-flag-provider · high confidence
New filtering and sorting UI components for the admin dashboard
The admin dashboard now includes new reusable components for managing data views: a search input (Query) that debounces updates to the URL query parameter, a filter group (FilterGroup) that allows adding and clearing filters based on available keys, and an order-by selector (OrderBy) that lets users sort data by specific keys and direction (ascending/descending). These components integrate with the browser's search parameters to maintain state across navigation and support right-to-left (RTL) layouts via the document direction hook.
packages/admin/dashboard/src/components/filtering · high confidence
New form and file-preview UI components
The admin dashboard now includes new reusable UI components: a \FilePreview\ component for displaying file metadata, thumbnails, and download actions, and a structured \Form\ component (with \Item\, \Label\, \Control\, \Hint\, and \ErrorMessage\ sub-components) that integrates with \react-hook-form\ and \radix-ui\ to provide accessible form fields with validation states and tooltips.
packages/admin/dashboard/src/components/common/form · high confidence
New form for adding countries to a region
The region-add-countries route now uses a dedicated AddCountriesForm component that renders a DataTable for selecting countries. Users can search, sort by name or code, and select multiple countries via checkboxes; submitting the form updates the region with the newly selected countries and displays a success toast.
packages/admin/dashboard/src/routes/regions/region-add-countries · high confidence
New form for editing shipping options in location service zones
A new \EditShippingOptionForm\ component has been added to the location service zone editing flow, allowing users to modify shipping option details such as name, price type (flat rate or calculated), and associated shipping profile. The form includes validation via Zod, supports submission via Cmd+Enter, and handles updates to shipping option rules, including the \enabled\_in\_store\ flag, with appropriate success and error toasts.
packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-edit/components · high confidence
New form for managing variant inventory items
The admin dashboard now includes a dedicated route and form for managing inventory items associated with a product variant. This new component allows users to select inventory items via a combobox (displaying title and SKU) and specify the required quantity for each, with validation ensuring quantities are positive. The form integrates with the existing product variant detail context and uses a focus modal for the user interface.
packages/admin/dashboard/src/routes/product-variants/product-variant-manage-inventory-items · high confidence
New fulfillment provider selection interface for stock locations
The stock location settings now include a dedicated modal interface for managing fulfillment providers. Users can view a searchable, filterable, and paginated list of enabled providers, select or deselect them via checkboxes, and save changes to add or remove providers from a specific location. The form ensures data integrity by tracking changes and provides immediate feedback via success or error toasts upon submission.
packages/admin/dashboard/src/routes/locations/location-fulfillment-providers · high confidence
New hooks for price list deletion, currency data, and grid columns
The price-lists module now includes three new hooks to support its UI and actions. \useDeletePriceListAction\ provides a function to delete a price list, handling the confirmation prompt, success/error toasts, and navigation back to the list. \usePriceListCurrencyData\ aggregates and synchronizes the state of supported currencies, regions, and price preferences, ensuring all data is loaded before returning. \usePriceListGridColumns\ defines the columns for the price list data grid, including a title column with tooltips for long names and dynamic price columns based on the available currencies and regions.
packages/admin/dashboard/src/routes/price-lists/common/hooks · high confidence
New integration test environment helpers for bootstrapping Medusa apps
Added a new set of helper utilities in integration-tests/environment-helpers to streamline the setup of integration tests. These helpers include bootstrap-app.js for initializing the Medusa application and Express server, setup-server.js for spawning test server processes with isolated Redis configurations, and utility modules (use-api, use-container, use-server) for managing test state and server lifecycle. This change provides a more robust and isolated environment for running integration tests, ensuring proper cleanup and resource management.
integration-tests/environment-helpers · high confidence
New integration test infrastructure with isolated database handling
The integration-tests directory now includes a dedicated test environment setup. This introduces a \.env.test\ file for default database credentials, a \jest.config.js\ to configure the test runner (including SWC transformation and project roots), and setup scripts (\setup-env.js\ and \setup.js\) that manage temporary database names per worker/chunk and ensure cleanup of these temporary databases after tests run. A \tsconfig.json\ is also added to extend the base TypeScript configuration for the test suite.
integration-tests · high confidence
New inventory detail section components
The inventory detail view now includes dedicated components for displaying general item information, location levels, and reservations. The general section shows SKU, stocked, reserved, and available quantities (formatted with the item's unit of measure) and provides an edit action. The location levels section displays a table of inventory across locations with a link to manage them. The reservations section lists existing reservations for the item and provides a button to create new ones.
packages/admin/dashboard/src/routes/inventory/inventory-detail/components · high confidence
New inventory item attributes editing drawer
The admin dashboard now includes a dedicated drawer for editing inventory item attributes. This new component allows users to update physical properties such as height, width, length, and weight, as well as logistical details including the unit of measure, HS code, origin country, material, and mid-code. The form uses Zod for validation and supports clearing optional fields.
packages/admin/dashboard/src/routes/inventory/inventory-detail/components/edit-inventory-item-attributes · high confidence
New inventory item creation form with multi-location availability
The admin dashboard now includes a new form for creating inventory items, allowing users to define item details (such as title, SKU, dimensions, and unit of measure) and specify stock quantities across multiple stock locations in a single workflow. The form is structured in two steps: first entering item details, then managing availability per location via a data grid, with validation and submission handled through a dedicated API hook.
packages/admin/dashboard/src/routes/inventory/inventory-create · high confidence
New inventory management drawers and attribute display
The inventory detail view now includes dedicated drawers for adjusting stock levels and editing item details, along with a new section for displaying item attributes. Users can now manage inventory quantities per location via the Adjust Inventory Drawer, which validates that stocked quantities remain above reserved amounts and displays available stock in real-time. The Edit Inventory Item Drawer allows updating the item's title and SKU. Additionally, the Inventory Item Attributes section provides a read-only view of physical dimensions, unit of measure, and origin details, with a direct link to the edit drawer.
packages/admin/dashboard/src/routes/inventory/inventory-detail/components/adjust-inventory · high confidence
New inventory stock management form with batch location updates
The inventory stock route now features a new form component that allows users to view and edit stock levels for multiple inventory items across various stock locations in a single interface. This change introduces a DataGrid-based UI where users can toggle and modify quantities for each location, with validation handled by a new Zod schema. The form supports batch operations, enabling users to create, update, or delete inventory levels across locations simultaneously, and includes logic to disable toggling for items with incoming or reserved quantities.
packages/admin/dashboard/src/routes/inventory/inventory-stock · high confidence
New layout composition system with centralized customization controls
The admin interface introduces a new layout composition system that allows users to customize the arrangement of sections within the dashboard and settings views. This change adds core layout definitions (single-column, single-row, two-column, and settings sidebar) and establishes a centralized provider mechanism in the dashboard. This provider manages the state for the layout customizer, enabling UI controls (such as edit triggers and save/cancel buttons) to be portaled into specific locations like the top bar and sidebar, allowing users to visually rearrange layout sections.
packages/admin/admin-shared/src/extensions/layouts, packages/admin/dashboard/src/providers/customizer-host-provider · high confidence
New linting and build tooling for the documentation workspace
The \www\ directory now includes a dedicated ESLint configuration (\eslint.config.mjs\) and a custom Markdown processor (\content-lint-processor.mjs\) that enables path-scoped linting for code examples within documentation files, allowing rules to target specific file paths like \src/api/\\\ or \src/admin/\\\. A new Medusa-specific ESLint plugin (\content-lint-medusa.mjs\) enforces framework-specific conventions on these examples. Additionally, a Vercel build script (\ignore-build-script.sh\) has been added to conditionally skip builds for non-docs branches and optimize preview deployments by checking for changes in specific project or package directories.
www · high confidence
New location-levels table component for inventory details
The inventory detail view now uses a new \ItemLocationListTable\ component to display stock levels across locations. This table, built on the shared \DataTable\ block, shows location names, reserved, stocked, and available quantities (formatted with the item's unit of measure), and supports sorting and pagination. Users can edit a location's settings by navigating to its page or delete a location level, provided no stock is reserved or stocked there.
packages/admin/dashboard/src/routes/inventory/inventory-detail/components/location-levels-table · high confidence
New login components for Cloud, SSO, Email/Password, and MFA
The login page now uses dedicated React components for each authentication method. Cloud authentication includes an auto-login flow and a dedicated button. SSO login dynamically renders buttons for configured providers and handles OAuth callbacks. Email/password login uses a form with validation and error handling. Multi-factor authentication (MFA) is supported via a challenge card and form that handles both TOTP and recovery codes, with method switching and verification logic.
packages/admin/dashboard/src/routes/login/components · high confidence
New manual reference generation tooling for documentation
The \typedoc-generate-references\ utility now includes a new \generate\ command that allows developers to manually generate API references for Medusa modules, workflows, and providers. This tool processes TypeScript definitions into a JSON doc-model, supporting custom configurations for various modules like Auth, Caching, and File providers, and integrates with the documentation site's rendering pipeline.
www/utils/packages/typedoc-generate-references · high confidence
New multi-step promotion creation form with templates and advanced options
The promotion creation interface has been replaced with a new multi-step form that guides users through selecting a template, configuring promotion details, and optionally linking to a campaign. The form supports standard and buy-get promotion types, with templates for fixed/percentage discounts on products or orders, buy-get offers, and free shipping. It includes advanced configuration options such as tax-inclusive pricing, usage limits, per-customer usage limits, and allocation methods (each, across, once). The form also supports campaign integration, allowing users to create new campaigns or add promotions to existing ones, and includes validation for required fields like max quantity when allocation is not 'across'.
packages/admin/dashboard/src/routes/promotions/promotion-create · high confidence
New order activity section with timeline and collapsible history
The order detail view now includes a dedicated Activity section that displays a chronological timeline of order events, including claims, exchanges, returns, and transfers. For orders with extensive history, the timeline collapses older entries into a collapsible list to keep the interface clean, while always showing the most recent activity. The timeline also features popovers that detail items being sent or returned, and tooltips for comparing value changes, providing a clearer view of order modifications.
packages/admin/dashboard/src/routes/orders/order-detail/components/order-activity-section · high confidence
New order claim creation flow with item selection and shipping configuration
The dashboard now includes a dedicated route for creating claims on existing orders. This feature introduces a form where administrators can select inbound items (to be returned) and outbound items (to be replaced), with tables supporting filtering by returnable quantity, refundable amount, and dates. The flow also allows configuring inbound and outbound shipping options, setting custom shipping amounts, and assigning return reasons and notes to specific items. A new schema validates the claim data, including a flag to carry over promotions, and the UI provides placeholders and validation for missing shipping options or items.
packages/admin/dashboard/src/routes/orders/order-create-claim · high confidence
New order edit creation flow with item selection and internal notes
The order-create-edit route now provides a complete UI for creating new order edits. Users can add items to an existing order by selecting variants from a searchable, paginated table that displays inventory availability, product details, and SKUs. The edit form allows users to add internal notes and toggle customer notifications before submitting the request. The interface also displays a summary of current totals, new totals, and any pending refund amounts, while clearly marking items as new, modified, or removed within the edit context.
packages/admin/dashboard/src/routes/orders/order-create-edit · high confidence
New order export feature with filterable selection
Users can now export orders by opening a dedicated export drawer. This interface displays the existing order table filters, allowing users to refine the dataset before initiating the export. Clicking the export button triggers the export process and provides success or error feedback via toast notifications.
packages/admin/dashboard/src/routes/orders/order-export · high confidence
New order fulfillment creation form with inventory-aware validation
The admin dashboard now includes a dedicated form for creating order fulfillments, located at the order-create-fulfillment route. This form allows users to select a stock location and shipping option, automatically pre-filling them based on the order's existing shipping method. It validates that the selected shipping option matches the shipping profile of the items being fulfilled (when shipping is required) and calculates available quantities by checking current inventory levels and reservations at the selected location. The form prevents submission if no shipping option or location is selected and ensures that only items with matching shipping profiles are included in the fulfillment payload.
packages/admin/dashboard/src/routes/orders/order-create-fulfillment · high confidence
New order fulfillment section with unfulfilled item breakdown
The order detail page now includes a dedicated OrderFulfillmentSection component that displays a breakdown of unfulfilled items. This section separates items requiring shipping from those that do not, showing remaining quantities, prices, and variant details for each. It provides direct access to fulfill these items via an action menu and displays status badges indicating whether shipping is required or if the items are awaiting fulfillment. The component also handles canceled orders by hiding the unfulfilled items display.
packages/admin/dashboard/src/routes/orders/order-detail/components/order-fulfillment-section · high confidence
New order item allocation form with inventory kit support
The order allocation flow in the admin dashboard now uses a dedicated form component that validates input via Zod and supports inventory kits. Users can allocate items to a specific stock location, with the UI automatically calculating and propagating required quantities for kit sub-items. The form displays available and in-stock quantities, prevents over-allocation, and provides specific error feedback if allocation fails for individual items.
packages/admin/dashboard/src/routes/orders/order-allocate-items · high confidence
New page layout components for the admin dashboard
The admin dashboard now includes new layout components (\SingleColumnPage\, \TwoColumnPage\, and \SingleRow\) that standardize how page content is structured. These components support widgets (rendered before/after content), optional JSON and metadata views for debugging, and nested routes via React Router outlets. The \TwoColumnPage\ specifically introduces a main content area and a 440px sidebar, with responsive behavior that stacks the JSON/metadata views on smaller screens.
packages/admin/dashboard/src/components/layout/pages · high confidence
New price list creation and editing interfaces
The admin dashboard now includes dedicated forms for creating and editing price lists. The creation flow is a multi-step modal allowing users to configure details (type, status, title, description, dates, customer group rules), select products via a paginated table, and define prices for variants using a data grid. The edit flow is a drawer interface for updating the price list's metadata. Both forms use Zod for validation and integrate with the existing API hooks.
packages/admin/dashboard/src/routes/price-lists/price-list-create, packages/admin/dashboard/src/routes/regions/region-edit, packages/admin/dashboard/src/routes/sales-channels/sales-channel-create · high confidence
New price-list prices edit form component
A new \PriceListPricesEditForm\ component has been introduced in the admin dashboard to handle editing prices within a price list. This component provides a structured form interface that integrates with a data grid for managing product and variant pricing, supports batch updates (create, update, delete) via the \useBatchPriceListPrices\ hook, and includes validation using Zod schemas. It also incorporates a \QuantityPriceModal\ for handling quantity-based pricing and ensures proper initialization of price structures for variants.
packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-pricing/components, packages/admin/dashboard/src/routes/price-lists/price-list-prices-edit/components · high confidence
New product attributes form with extensible fields
The product attributes section now uses a dedicated form component that supports custom fields via the extensions API. Users can edit product dimensions (weight, length, width, height) and codes (mid\_code, hs\_code, origin\_country), with optional fields like origin\_country now correctly allowing clear/reset operations. The form integrates with the existing update flow, ensuring changes are saved via the product update API.
packages/admin/dashboard/src/routes/products/product-attributes/components · high confidence
New product creation details form with extension support
The product creation flow now uses a dedicated \ProductCreateDetailsForm\ component that organizes the form into general, media, and variants sections. This component integrates with the custom fields API via \FormExtensionZone\, allowing extensions to inject additional fields into the general section of the product creation form.
packages/admin/dashboard/src/routes/products/product-create/components/product-create-details-form · high confidence
New product creation form with multi-step workflow and draft support
The product creation interface has been replaced with a new multi-step form component located in the product-create-form directory. This form guides users through Details, Organize, Variants, and Inventory tabs, allowing them to save products as drafts or publish them directly. It integrates with the extension system for custom fields, handles media uploads during submission, and supports keyboard shortcuts for form submission.
packages/admin/dashboard/src/routes/products/product-create/components/product-create-form · high confidence
New product import workflow with CSV template and validation
The product import feature in the admin dashboard has been implemented as a new workflow. Users can now upload CSV files to import products, with the system validating that files are in supported formats (text/csv, application/vnd.ms-excel). An import summary is displayed after upload, showing counts for products to create and update. A downloadable CSV template is provided to guide users on the required structure, including product and variant details. The import process is confirmed via a dedicated action, with success or error feedback provided through toast notifications.
packages/admin/dashboard/src/routes/products/product-import · high confidence
New product media editing form with drag-and-drop reordering
The product media management interface now includes a dedicated form component that allows users to reorder product images via drag-and-drop, select multiple images for batch deletion, and promote a selected image to be the product thumbnail. This new component replaces the previous inline editing mechanism, providing a more robust workflow for managing product visuals within the admin dashboard.
packages/admin/dashboard/src/routes/products/product-media/components/edit-product-media-form · high confidence
New product media management interface
A new ProductMedia component has been added to the admin dashboard, providing a dedicated view for managing product images. This feature allows users to interact with product media within a focused modal context. The implementation optimizes data fetching by explicitly excluding unnecessary product relations (such as type, collection, options, tags, variants, and sales channels) from the default query, ensuring that only the relevant media data is loaded for this specific view.
packages/admin/dashboard/src/routes/products/product-media · high confidence
New product media section component for image management
The product detail view now uses a dedicated \ProductMediaSection\ component to display and manage product images. This component presents images in a grid, allows users to select multiple images for bulk deletion (with specific warnings if the thumbnail is involved), and provides a shortcut to manage image variants for single selections. It also includes a link to the media editor for adding or reordering images.
packages/admin/dashboard/src/routes/products/product-detail/components/product-media-section, packages/admin/dashboard/src/routes/products/product-media/components/product-media-gallery · high confidence
New product media upload component with file validation
The product management interface now uses a dedicated \UploadMediaFormItem\ component for handling media uploads. This component enforces specific image format restrictions (JPEG, PNG, GIF, WebP, HEIC, SVG) and validates file sizes against a configurable maximum limit (defaulting to 1MB), providing clear error messages to users when uploads are rejected due to invalid types or excessive size.
packages/admin/dashboard/src/routes/products/common/components/upload-media-form-item · high confidence
New product option management interface with value ranking and configurable tables
The admin dashboard now provides a complete interface for creating, editing, and managing product options. Users can create new options with a title and a list of values, and explicitly define the display order of those values using a drag-and-drop sortable list that automatically assigns ranks. Existing options can be edited in a side drawer, where the same ranking logic applies and stale rank entries are cleaned up. The detail view for an option displays its general information (including whether it is global or exclusive) and lists the associated products. The values section within the detail view supports deletion of individual values. Additionally, when the 'view\_configurations' feature flag is enabled, the product list, values list, and product association sections utilize the new configurable data table system, allowing for dynamic column and filter customization.
packages/admin/dashboard/src/routes/product-options · high confidence
New product organization and attribute fields in the create form
The product creation form now includes dedicated sections for organizing products and defining attributes. The Organization section allows users to assign a product to a collection, type, category, or tags, select a shipping profile, and manage sales channels. The new Attribute section adds optional fields for origin country, material, physical dimensions (width, length, height, weight), and customs codes (HS code, MID code).
packages/admin/dashboard/src/routes/products/product-create/components/product-create-organize-form/components/product-create-organize-section · high confidence
New product organization form with extension support
The product creation flow now includes a dedicated 'Organize' form component that groups organization settings and sales channel selection within a stacked modal. This component integrates with the new custom fields API, allowing extensions to inject additional form fields into the organization section via the FormExtensionZone.
packages/admin/dashboard/src/routes/products/product-create/components/product-create-organize-form · high confidence
New product organization section with extensible custom fields
The product detail page now includes a dedicated organization section that displays a product's tags, type, collection, and categories as clickable badges. This component also integrates with the new custom fields API, allowing developers to inject additional display components into this section via the extension provider.
packages/admin/dashboard/src/routes/products/product-detail/components/product-organization-section · high confidence
New product sales channels editing interface
The product sales channels section now features a dedicated editing form that allows users to select and update sales channels for a product via a searchable, paginated data table. This change also optimizes the underlying product data query by explicitly excluding unnecessary relations (type, collection, options, tags, images, variants) to improve performance.
packages/admin/dashboard/src/routes/products/product-sales-channels · high confidence
New product stock management form in the dashboard
The dashboard now includes a dedicated product-stock route that allows users to view and batch-edit inventory levels for product variants across multiple stock locations. This new feature introduces a data grid interface where users can toggle stock availability and update quantities for each variant-inventory-item-location combination. The form handles creating new inventory links, updating existing stock quantities, and disabling inventory tracking (deleting links) with a confirmation prompt. It leverages Zod for schema validation and react-hook-form for state management, ensuring data integrity when saving changes to the backend.
packages/admin/dashboard/src/routes/products/product-stock · high confidence
New product table cells for collections, status, sales channels, and inventory
The product list table in the admin dashboard now includes dedicated cells for displaying collection titles, product status (with color-coded indicators), sales channels (with truncation and tooltips for multiple channels), variant counts, and variant inventory levels. These components handle edge cases such as null or deleted sales channel references and distinguish between single-location and multi-location inventory kits, providing clearer visibility into product data directly within the table view.
packages/admin/dashboard/src/components/table/table-cells/product · high confidence
New product variant creation flow with optimized data fetching
The admin dashboard now includes a dedicated route for creating product variants, implemented via a new \ProductCreateVariant\ component. This component fetches the parent product data using the \useProduct\ hook and explicitly excludes unnecessary relations (such as type, collection, tags, images, variants, and sales channels) in the query to improve performance, before rendering the \CreateProductVariantForm\ within a focus modal.
packages/admin/dashboard/src/routes/products/product-create-variant · high confidence
New product variant detail page with structured layout and breadcrumbs
The admin dashboard now features a dedicated product variant detail page that displays variant information in a two-column layout. This update introduces a breadcrumb component for navigation context, a dedicated loader to fetch variant data with specific field selections (including inventory, prices, and images), and organized sections for general details, media, inventory, and pricing. The page utilizes the new LayoutComposer approach to structure the UI, ensuring consistent rendering of variant-specific data within the admin interface.
packages/admin/dashboard/src/routes/product-variants/product-variant-detail · high confidence
New profile editing interface with language selection
The admin dashboard now includes a new profile-edit route that allows users to update their first and last names and change their interface language. The form supports right-to-left (RTL) layouts via the document direction hook and integrates with the existing modal/drawer UI components for a consistent experience.
packages/admin/dashboard/src/routes/profile/profile-edit · high confidence
New promotion detail general section component
The dashboard now includes a dedicated \PromotionGeneralSection\ component for the promotion detail view. This component renders key promotion metadata, including the promotion code (with a copy-to-clipboard feature), status badge, type, and application method value (formatted as currency for fixed amounts or percentage for others). It also displays the allocation method and conditionally shows the tax-inclusive setting specifically for fixed-type promotions. The section provides action menus for editing and deleting the promotion, with a confirmation prompt for deletion.
packages/admin/dashboard/src/components/utilities/error-boundary, packages/admin/dashboard/src/routes/promotions/promotion-detail/components/promotion-general-section · high confidence
New promotion rules editing interface in the admin dashboard
The admin dashboard now includes a dedicated interface for editing promotion rules, supporting standard rules, buy rules, and target rules. This change introduces a new form-based workflow using react-hook-form and Zod validation, allowing users to add, update, and remove rules with proper handling of operators (such as 'eq') and value types (number, text, select). The implementation includes specific logic to handle disguised rules (like currency codes) by mapping them to the application method, and ensures that rule values are correctly computed and submitted to the backend.
packages/admin/dashboard/src/routes/promotions/common · high confidence
New public exports for dashboard components, hooks, and utilities
The dashboard package now exposes a public API surface via \@medusajs/dashboard/components\, \@medusajs/dashboard/hooks\, and \@medusajs/dashboard/lib\. This allows external code to directly import shared UI components (such as \LayoutComposer\, \ConfigurableDataTable\, \ActionMenu\, and various table cells), API and utility hooks (including customer, order, product, and sales channel hooks, plus \useDebouncedSearch\ and \useQueryParams\), and library functions (like \defineCellRenderer\, \createTableAdapter\, search entity definitions, and currency/money formatting helpers).
packages/admin/dashboard/src/exports · high confidence
New react-docs-generator utility for automated React component documentation
A new \react-docs-generator\ tool has been added to \www/utils/packages\ to automate the generation of documentation specs for React components. Built on \react-docgen\ and \Typedoc\, the tool scans source files and outputs JSON specification files containing component metadata, props, and types. It features a custom resolver to handle variable component definitions (such as re-exports like \SelectPrimitive.Value\), an \argsPropHandler\ to resolve props from function arguments, and a \TypedocManager\ that fills in missing descriptions and TypeScript types by analyzing the TypeScript AST. The generator supports CLI options to specify source/output paths, clean previous outputs, disable Typedoc for debugging, and configure the TypeScript config used for type resolution.
www/utils/packages/react-docs-generator · high confidence
New region detail components for country and general settings
The region detail page now uses dedicated \RegionCountrySection\ and \RegionGeneralSection\ components. The country section provides a paginated, sortable table for managing region countries with bulk removal capabilities, while the general section displays region metadata (currency, tax settings, payment providers) and actions (edit, delete).
packages/admin/dashboard/src/routes/regions/region-detail/components · high confidence
New region editing form with tax and payment provider controls
The region-edit section now uses a dedicated EditRegionForm component that allows users to update a region's name, currency, payment providers, and tax settings. The form includes switches to enable automatic taxes and tax-inclusive pricing, and a combobox to select enabled payment providers, with validation and toast notifications for success or error feedback.
packages/admin/dashboard/src/routes/regions/region-edit/components · high confidence
New release-banner utility for generating Medusa release and Cloud changelog images
A new \release-banner\ package has been added to \www/utils/packages/release-banner\ to automate the generation of banner images for Medusa releases and the Cloud changelog. The tool supports two banner types—\release\ (for GitHub release notes) and \cloud-changelog\ (for Cloud changelog entries)—rendering them as PNG or SVG using satori and resvg without requiring a browser. It includes a CLI for rendering, previewing, and uploading banners to Cloudinary, along with a programmatic API for integration into other workflows.
www/utils/packages/release-banner · high confidence
New remark-rehype plugin package for documentation processing
The \www/packages/remark-rehype-plugins\ package has been introduced to centralize and standardize the processing of documentation content. This package provides a suite of remark and rehype plugins that handle critical documentation behaviors: it fixes local and cross-project links (including support for \Card\, \CardList\, and \WorkflowDiagram\ components), validates code block highlights, resolves admonitions, and manages table of contents generation. Additionally, it supports Cloudinary image transformations, injects MDX data (such as frontmatter and TOC) into the rendered output, and checks for broken links during the build process. This modularizes the previous ad-hoc link-fixing and content-injection logic, ensuring consistent URL resolution and content structure across the documentation site.
www/packages/remark-rehype-plugins · high confidence
New reservation detail view and edit form
The reservation detail page now displays a dedicated section showing inventory item details, stock location, and quantity breakdowns (in stock, available, reserved), and includes an action to edit the reservation. This edit capability is implemented via a new modal form that allows administrators to update the reserved quantity, change the stock location, and add a description, with validation and success/error feedback.
packages/admin/dashboard/src/routes/reservations/reservation-detail/components · high confidence
New return creation flow with item selection table
The order-create-return route now uses a dedicated AddReturnItemsTable component that allows administrators to search, filter, and select items for return via a data table with row selection. The form validates input using a Zod schema and supports adding return reasons and notes per item, while handling shipping method selection and inventory location assignment.
packages/admin/dashboard/src/routes/orders/order-create-return · high confidence
New reusable form components for address, email, and metadata editing
The dashboard now includes dedicated form components for managing contact details and metadata. The new AddressForm handles contact and location fields (name, company, phone, address, city, province, country) with support for grid or stack layouts and RTL direction. The EmailForm provides a simple single-field input for email addresses. The MetadataForm allows users to edit key-value pairs within a drawer interface, supporting the addition, removal, and reordering of rows, with validation via Zod and toast notifications for success or error states.
packages/admin/dashboard/src/components/forms · high confidence
New reusable tiered price form component in the admin dashboard
Added a new \TieredPriceForm\ component and its supporting sub-components (\TieredPriceItem\, \TieredPriceList\, \TieredPriceInput\, \AmountDisplay\) to the admin dashboard's common library. This component provides a reusable, validated form interface for managing tiered pricing rules, featuring dynamic row addition/removal, conditional input toggling, and keyboard shortcuts (Ctrl+Enter) for submission. The implementation includes comprehensive unit tests to verify rendering, validation error handling, and form submission behavior.
packages/admin/dashboard/src/common · high confidence
New sales channel assignment interface for stock locations
The stock location settings now include a dedicated route for managing sales channel assignments. This change introduces a new modal-based form that allows users to view, filter, and select sales channels associated with a specific stock location. The interface uses a new DataTable component to display available channels, enabling users to add or remove channels via row selection and save the updated configuration.
packages/admin/dashboard/src/routes/locations/location-sales-channels · high confidence
New shipping option creation form for service zones
The dashboard now includes a new route and UI component for creating shipping options within a specific service zone. This feature adds a dedicated form (\CreateShippingOptionsForm\) accessible via a modal, which fetches the necessary stock location and service zone data using a specific GraphQL field selection to ensure all required details are available for configuration.
packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-create · high confidence
New shipping option creation form with conditional pricing and type association
The dashboard now provides a new multi-step form for creating shipping options within a service zone, supporting both standard shipping and pickup/return flows. Users can define option details (name, profile, provider, and type), select pricing strategies (flat rate or calculated), and configure complex pricing rules including conditional region and currency prices. The form also enforces validation via Zod schemas and integrates with the fulfillment provider options for the selected location.
packages/admin/dashboard/src/routes/locations/location-service-zone-shipping-option-create/components · high confidence
New standalone integration test environment for Medusa modules
A new standalone integration test setup has been added to the \integration-tests/modules\ directory, allowing developers to run module-specific tests in isolation. This includes a dedicated Jest configuration, a Medusa application configuration (\medusa-config.ts\) that registers core modules (such as cart, order, payment, and fulfillment) along with specific providers and plugins like the loyalty plugin, and standard TypeScript and Git ignore files. This change enables testing individual modules against a realistic Medusa runtime without requiring the full application stack.
integration-tests/modules · high confidence
New store add-currencies form with tax-inclusive support
The dashboard now includes a new form at the store add-currencies route that allows merchants to select additional currencies and configure tax-inclusive pricing for each. The form uses a data table to display available currencies, pre-selects the store's existing supported currencies, and submits the selected currencies along with their tax-inclusive status to the store settings API, invalidating related price preference queries to reflect changes immediately.
packages/admin/dashboard/src/routes/store/store-add-currencies · high confidence
New table filter hooks for admin dashboard entities
The admin dashboard now includes a new set of React hooks in \packages/admin/dashboard/src/hooks/table/filters\ that define the available filter options for various data tables. These hooks—such as \useCustomerTableFilters\, \useOrderTableFilters\, and \useProductTableFilters\—standardize how users can filter lists of customers, orders, products, and other entities by exposing specific criteria like date ranges, status, regions, sales channels, and associated groups. This centralizes the filter configuration logic for the admin interface.
packages/admin/dashboard/src/hooks/table/filters · high confidence
New tags package for documentation navigation
A new \www/packages/tags\ package has been added to the documentation site. It includes a \generate-tags\ script and utility functions to produce structured tag data (e.g., \admin\, \auth\, \cart\, \customer\, \event-bus\, \fulfillment\, \how-to\). This data maps documentation topics to specific URLs, enabling improved navigation and search capabilities within the docs.
www/packages/tags · high confidence
New tax inclusion indicator badge
A new \IncludesTaxTooltip\ component has been added to the common components library. This badge displays an icon indicating whether prices are tax-inclusive or tax-exclusive and provides a tooltip with localized text to clarify the tax status to users.
packages/admin/dashboard/src/components/common/tax-badge · high confidence
New user edit form with keyboard submission support
The user-edit route now uses a new EditUserForm component that allows administrators to update a user's first and last name. This form is wrapped in a KeyboundForm, enabling submission via Cmd + Enter, and is displayed within a RouteDrawer modal alongside cancel and save actions.
packages/admin/dashboard/src/routes/users/user-edit · high confidence
New user invitation form with role assignment support
The admin dashboard now includes a dedicated user invitation interface that allows administrators to invite new users via email. When RBAC is enabled, the form includes a role selector, enabling admins to assign specific roles to the invited user at the time of invitation. The interface also displays a table of existing invites with options to resend or delete them, and supports pagination for managing large lists of pending invitations.
packages/admin/dashboard/src/routes/users/user-invite · high confidence
New user menu component with RTL support and theme switching
The dashboard now includes a new UserMenu component located in the layout directory. This component provides a dropdown menu for user profile settings, documentation links, changelog access, and global keyboard shortcuts. It introduces a built-in theme toggle allowing users to switch between system, light, and dark modes. Additionally, the menu respects the document's text direction (RTL/LTR) for proper alignment of icons and text.
packages/admin/dashboard/src/components/layout/user-menu · high confidence
New validation schemas and utility functions for price list bulk editing
The price-lists module now includes dedicated Zod schemas and utility functions to support robust validation and data transformation for bulk price list updates. New files in the common directory define schemas for creating and updating currency and region prices, including support for tiered pricing (min/max quantities) and conditional prices. Utility functions handle the extraction of price details from product variants, conversion of amounts, and determination of price list status (active, draft, scheduled, expired). This infrastructure enables more reliable handling of empty or complex price rule updates in the dashboard interface.
packages/admin/dashboard/src/routes/price-lists/common · high confidence
New variant configuration section for product creation
The product creation flow now includes a dedicated UI section for managing variants. This component allows users to enable or disable variants, select existing or define new product options (such as Size or Color), and automatically generates the corresponding variant permutations based on the selected option values. It integrates with the form state to handle option selection, value management, and validation feedback.
packages/admin/dashboard/src/routes/products/product-create/components/product-create-details-form/components/product-create-details-variant-section · high confidence
New variant media editing form in product variant detail route
The product variant detail route now includes a dedicated media management section. A new \ProductVariantMedia\ component renders a focus modal containing an \EditProductVariantMediaForm\, which allows users to associate or disassociate product images with a specific variant and set a thumbnail. The form uses \react-hook-form\ and Zod for validation, leveraging \useBatchVariantImages\ and \useUpdateProductVariant\ hooks to persist changes to the variant's image list and thumbnail URL.
packages/admin/dashboard/src/routes/product-variants/product-variant-media · high confidence
New virtual module constants for admin extensions
The admin-shared package now exports a standardized set of virtual module identifiers (e.g., links, forms, displays, routes, menu items, widgets, i18n, cell renderers, layouts, and search entities). This provides a central registry of module names used by the admin system's extension architecture, ensuring consistent naming across different parts of the admin interface.
packages/admin/admin-shared/src/virtual-modules · high confidence
New workflow execution detail view in the admin dashboard
The admin dashboard now includes a dedicated detail view for workflow executions, featuring a general section that displays the execution ID, workflow ID, transaction ID, and a visual progress bar, a history section that lists individual steps with their states (including skipped, dormant, and timeout states) and allows expanding to view step definitions, a payload section that renders the execution input as JSON, and an interactive timeline canvas that supports zooming and panning to visualize the workflow structure and step execution order.
packages/admin/dashboard/src/routes/inventory/inventory-detail/components/reservations-table, packages/admin/dashboard/src/routes/sales-channels/sales-channel-detail/components, packages/admin/dashboard/src/routes/workflow-executions/workflow-execution-detail/components · high confidence
Notification module initialization with Medusa Cloud Email provider support
The notification module is now initialized with a built-in Medusa Cloud Email provider that activates automatically when no other email provider is configured and cloud credentials are present. The module introduces a \NotificationProvider\ model to track enabled providers and channels, and a \Notification\ model that now supports a \from\ field, nullable templates, and a \status\ field (pending/success/failure). Provider configuration is loaded via a loader that syncs enabled providers to the database and validates that no two providers claim the same channel. Integration tests verify sending notifications, idempotency, event emission, and the conditional activation of the Medusa Cloud Email provider.
packages/modules/notification · high confidence
Open-source the Loyalty plugin with admin UI components
The Loyalty plugin is now open-source, making it available as a standalone package for merchants to install and configure. This release includes a suite of reusable React components for the Medusa Admin dashboard, such as a combobox with search and pagination, a chip input for managing lists, and a data grid with cell validation, enabling richer loyalty program management directly within the admin interface.
packages/plugins/loyalty · high confidence
Payment module initialization and provider loading logic
The payment module is initialized with a new provider loading mechanism that registers the system default provider and conditionally loads Medusa Payments providers based on cloud configuration options. The module also includes database migrations to establish the payment schema, including tables for payment collections, sessions, payments, captures, refunds, and refund reasons, along with integration tests to verify provider loading behavior.
packages/modules/payment · high confidence
Product detail page now displays material and supports custom extensions
The product general section now renders the product's material field alongside existing details like description and handle. Additionally, the component integrates with the custom fields API, allowing any registered extension displays for the 'product' and 'general' context to be rendered dynamically within this section.
packages/admin/dashboard/src/routes/products/product-detail/components/product-general-section · high confidence
Product image reordering and thumbnail selection in the admin dashboard
The product creation form now allows users to reorder uploaded images via drag-and-drop and designate a specific image as the product thumbnail. This change introduces a new media section component that integrates drag-and-drop sorting capabilities, enabling users to change the display order of product images and select which image serves as the primary thumbnail directly within the product details form.
packages/admin/dashboard/src/routes/products/product-create/components/product-create-details-form/components/product-create-details-media-section · high confidence
Product list page now supports configurable views
The product list page in the admin dashboard has been updated to support configurable views. When the 'view\_configurations' feature flag is enabled, the page renders a \ConfigurableProductListTable\ instead of the standard \ProductListTable\, allowing users to customize the layout and columns of the product list. This change is part of the broader implementation of the LayoutComposer and custom fields API across the admin dashboard.
packages/admin/dashboard/src/routes/products/product-list · high confidence
Product tags management is restructured with configurable data tables and metadata support
The Product Tags section in the admin dashboard has been rebuilt to support configurable data tables and metadata management. The list view now uses a new \ConfigurableDataTable\ component (controlled by the \view\_configurations\ feature flag) which allows for customizable column views, while the detail view similarly offers a configurable product association table. Additionally, a new metadata form has been added to the product tag detail page, allowing users to view and edit metadata directly. The entire flow—including creation, editing, and deletion—has been refactored into new modular components and hooks, with the list loader now correctly stripping table-specific query prefixes to ensure accurate data retrieval.
packages/admin/dashboard/src/routes/product-tags · high confidence
Property labels management UI in admin dashboard
Admin users can now manage custom labels and descriptions for entity properties via a new Property Labels section in the dashboard. This includes a list view that displays existing property labels with client-side pagination and sorting, and an edit view that opens in a modal to allow batch updates. The edit form uses a data grid to let users modify labels and descriptions for nested fields, with validation ensuring that a label is provided if a description is entered.
packages/admin/dashboard/src/routes/property-labels · high confidence
Redesigned AI Assistant with chat window, search integration, and deep thinking
The documentation AI assistant has been completely redesigned and re-integrated into the v2 docs experience. This change introduces a dedicated chat window (\AiAssistantChatWindow\) featuring a header, input area, footer, and callout components, along with a new search window (\AiAssistantSearchWindow\) for command-based interactions. Users can now utilize a 'deep thinking' mode for complex queries, view conversation history with thread items, and see contextual suggestions. The implementation includes a new PostCSS configuration to support the updated styling and a script to generate Mermaid diagram icons. Additionally, comprehensive test coverage has been added for the new assistant components.
www/packages/docs-ui · high confidence
Redesigned store detail page with currency and locale management
The store detail page in the admin dashboard has been restructured to provide a more comprehensive view and management of store settings. The new layout includes a general section displaying the store's name, default region, sales channel, and stock location. Additionally, a new currency section allows administrators to view, add, and remove supported currencies, including managing tax inclusivity preferences. If the translation feature flag is enabled, a locale section is also added, enabling the management of supported locales. These changes enhance the ability to configure and maintain store-specific settings directly from the detail view.
packages/admin/dashboard/src/routes/store/store-detail · high confidence
Regions list now supports configurable data tables
The Regions list page in the admin dashboard has been updated to use the new configurable data table system. When the 'view\_configurations' feature flag is enabled, the page renders a ConfigurableRegionListTable that leverages a new table adapter and cell renderers, allowing for dynamic column and filter configuration. If the flag is disabled, it falls back to the previous static RegionListTable implementation, ensuring backward compatibility while introducing the new extensible table architecture for this specific route.
packages/admin/dashboard/src/routes/regions/region-list · high confidence
Reservation detail page now displays inventory item information
The reservation detail view has been updated to include a dedicated section for the associated inventory item. Users can now see general inventory details alongside the reservation data, providing a more comprehensive view of the stock context for each reservation.
packages/admin/dashboard/src/routes/reservations/reservation-detail · high confidence
Shipment form now supports tracking and label URLs
The order create shipment form now includes input fields for tracking URLs and label URLs alongside tracking numbers. This allows users to attach specific URLs for tracking packages and downloading shipping labels when creating a shipment, with these values being sent to the API as part of the shipment labels data.
packages/admin/dashboard/src/routes/orders/order-create-shipment/components · high confidence
Shipping option type management in the admin dashboard
The admin dashboard now supports full management of shipping option types. Users can create new types with a label, code, and optional description, edit existing types, and delete them with a confirmation prompt. A list view displays all types with filtering, sorting, and pagination, while a detail view shows type information and provides quick access to edit or delete actions.
packages/admin/dashboard/src/routes/shipping-option-types · high confidence
Support for dynamic form extensions in the admin dashboard
The admin dashboard now supports extending forms with additional dynamic fields via the new \useExtendableForm\ hook and \FormExtensionZone\ component. This allows configuration fields to be rendered alongside standard form inputs, with automatic type inference (text, number, boolean) from Zod schemas and proper validation error display. Custom components can also be provided for specific field types, enabling more flexible and extensible form structures in the admin interface.
packages/admin/dashboard/src/dashboard-app/forms · high confidence
Support for nesting admin routes under existing sections
The admin SDK now allows new routes to be located under existing admin sections. This is enabled by new constants and types in the routes extension module, which define a set of valid nested route positions including /orders, /products, /inventory, /customers, /promotions, and /price-lists. Developers can now use these predefined positions to structure custom admin UI components within the main navigation hierarchy.
packages/admin/admin-shared/src/extensions/routes · high confidence
Tax module initialization with hierarchical region support and provider loading
The tax module is initialized with a new data model supporting hierarchical tax regions (country and province levels linked via parent\_id) and a dedicated TaxProvider entity to manage enabled/disabled states. A provider loader automatically registers local and external tax providers in the dependency container and persists their enabled status in the database. The module includes a built-in SystemTaxProvider that calculates tax lines based on configured rates, and the database schema enforces unique constraints on country/province combinations to prevent duplicate regions.
packages/modules/tax · high confidence
Translation management dashboard with completion tracking
The admin dashboard now includes a dedicated translation list page that displays translatable entities sorted alphabetically, showing translation progress metrics (translated vs. total counts) for each entity type. The interface features an active locales section that lists configured languages with a tooltip for full details, and a completion section that visualizes overall translation progress with a percentage bar and per-locale statistics. Users can navigate to edit translations for specific entities or manage locales and translation settings through provided action buttons.
packages/admin/dashboard/src/routes/translations/translation-list · high confidence
User Guide app scaffolding and initial content modules
The user-guide application is initialized with a Next.js structure, including configuration files (\.content.eslintrc.mjs\, \.env.example\, \.gitignore\), global styles, and font definitions. It introduces new documentation content for the Customers module (overview, management, and groups) and the Inventory module (items, reservations, and CSV export). Additionally, it adds a new Loyalty section covering Gift Cards and Gift Card Products, and implements an API route to capture agent feedback via PostHog.
www/apps/user-guide · high confidence
User detail page now supports copying reset password links
The user detail view in the admin dashboard now includes a 'Copy Reset Password Link' action within the user's action menu. This feature is available for users authenticated via the 'emailpass' provider; clicking the action generates a secure token and copies a direct reset password URL to the clipboard, allowing administrators to facilitate password resets for users who have forgotten their credentials.
packages/admin/dashboard/src/routes/users/user-detail/components · high confidence
Architecture
Restructure admin-sdk and admin-shared packages
The \@medusajs/admin-sdk\ and \@medusajs/admin-shared\ packages have been restructured to standardize their build and development configuration. Both packages now include explicit \tsconfig.json\ files targeting ES2020 with strict mode enabled, and \tsup.config.cjs\ files that configure the build output to generate CommonJS, ESM, and declaration files. This change ensures consistent compilation and bundling behavior for these core admin libraries.
packages/admin/admin-sdk, packages/admin/admin-shared · high confidence
Behavioural changes
1963 commits (770 fixes) modifying packages/core
A change to existing behaviour in packages/core — 1963 commits (770 fixs), 2512 files.
packages/core · medium confidence · unverified
API Key module now enforces revocation before deletion
The API Key module has been updated to prevent the deletion of active API keys. The service now checks if any keys in a deletion request are still active (not revoked or scheduled for future revocation) and throws an error if so. Users must now revoke an API key before it can be permanently deleted from the system.
packages/modules/api-key · high confidence
API Reference app restructured with Next.js App Router and real-path navigation
The API Reference application has been re-architected to use the Next.js App Router, replacing the previous hash-based navigation with real page paths (e.g., \/api/store/carts/get-a-cart\). This change introduces a new layout structure where tag pages and their operations share a mounted layout to preserve state and enable smooth client-side scrolling between operations. The app now includes dedicated routes for serving base specs, tag paths, schemas, and full OpenAPI spec downloads, along with a new versions endpoint that lists the latest and archived API versions. A new 404 error page has been added to guide users to v1 documentation or similar pages, and the entire app is configured to deploy under the \/api\ base path on Cloudflare.
www/apps/api-reference · high confidence
API key management list table is rebuilt on the configurable DataTable block
The API key management list view in the admin dashboard now uses the new configurable DataTable block. This replaces the previous implementation with a unified table component that supports pagination, search, and date-based filtering (created, updated, revoked). The table displays secret and publishable keys separately, showing the redacted token, type, status, and last-used date, and includes row actions for editing, copying (publishable keys only), revoking, and deleting keys. The delete action is now disabled until a key is revoked, enforcing a revoke-before-delete workflow.
packages/admin/dashboard/src/routes/api-key-management/api-key-management-list/components · high confidence
Add breadcrumbs and dynamic titles to Sales Channel and User detail pages
The Sales Channel and User detail pages in the admin dashboard now include breadcrumb components and dynamic document titles. For Sales Channels, the breadcrumb displays the channel name, and the browser tab title is set to the channel name. For Users, the breadcrumb displays the user's full name (or email if the name is missing), and the browser tab title is similarly set to the name or email. These changes improve navigation context and page identification within the admin interface.
packages/admin/dashboard/src/routes/sales-channels/sales-channel-detail, packages/admin/dashboard/src/routes/users/user-detail · high confidence
Add locales feature gated by translation feature flag
The Store Add Locales route now requires the 'translation' feature flag to be enabled; if the flag is disabled, the user is automatically navigated away. When enabled, the interface allows administrators to select and add supported locales for a store via a modal form that updates the store's supported\_locales configuration.
packages/admin/dashboard/src/routes/store/store-add-locales · high confidence
Add readable validation messages to the create region form
The create region form now displays clear, user-friendly validation messages for required fields. Specifically, users will see prompts to 'Enter a name for the region', 'Select a currency', and 'Select at least one payment provider' when these fields are left empty or invalid, improving the form-filling experience.
packages/admin/dashboard/src/routes/regions/region-create/components · high confidence
Add tooltips for truncated variant names in pricing grids
The variant pricing form now displays a tooltip when a product or variant title is truncated in the data grid, allowing users to view the full name without needing to expand the column. This change improves usability in the product creation flow by ensuring long names remain readable.
packages/admin/dashboard/src/routes/products/common · high confidence
Admin bundler now blocks Vite's launch-editor endpoint and introduces new build/serve commands
The admin bundler's development server now blocks Vite's \/\_\_open-in-editor\ endpoint (returning 403) to address security concerns, while new commands have been added to handle building (\build.ts\), serving (\serve.ts\), and plugin compilation (\plugin.ts\) using Vite. The development command (\develop.ts\) now integrates Vite's middleware with Express, handling HTML template transformation and ensuring the admin UI is served correctly in development mode.
packages/admin/admin-bundler/src/commands · high confidence
Admin bundler now generates static HTML/CSS/JS entry files and configures Vite with deduplication and HMR controls
The admin bundler has been refactored to generate the admin application's static entry files (index.html, index.css, entry.jsx) directly into the .medusa/client directory, ensuring the React app is properly bootstrapped with Tailwind CSS and plugin support. The Vite configuration now explicitly deduplicates react and react-dom to prevent duplicate instance errors, pins the build target to baseline-widely-available for stable browser support, and exposes environment variables (including plugin-specific env vars) to the bundled code. Additionally, Hot Module Replacement (HMR) behavior is now configurable via environment variables (HMR\_PORT, HMR\_HOST, HMR\_CLIENT\_PORT, HMR\_PROTOCOL, HMR\_BIND\_HOST), allowing developers to control the HMR server host and port during development.
packages/admin/admin-bundler/src/utils · high confidence
Admin component guides archived in favor of @medusajs/dashboard exports
The documentation for several Medusa Admin customization components (ActionMenu, JsonViewSection, SectionRow, SingleColumnLayout, TwoColumnLayout) has been moved to an archive section. As of Medusa v2.21.0, these components are now exported directly from the \@medusajs/dashboard\ package, so users should import them from there rather than building them manually. The archive pages provide a mapping table showing which new exported component or layout (e.g., \LayoutComposer\ with \core:single-column\) replaces each archived guide.
www/apps/resources · high confidence
Admin dashboard adds hydration fallback and ESM import validation
The admin dashboard now includes a HydrateFallback component that displays a loading spinner while React Router resolves initial data loaders, ensuring a consistent user experience during startup and complying with React Router 7's partial hydration requirements. Additionally, the admin bundler introduces a build-time check to prevent esbuild from incorrectly rewriting dynamic ESM imports of dependencies like Vite into CommonJS requires, which would otherwise cause runtime errors.
packages/admin/admin-bundler/scripts, packages/admin/dashboard/src/components/utilities/hydrate-fallback · high confidence
Admin dashboard upgrades to Vite 7 and React Router 7
The admin dashboard and its bundler have been upgraded to Vite 7.3.6, which narrows the supported browser versions to Chrome ≥107, Edge ≥107, Firefox ≥104, and Safari ≥16. Additionally, the dashboard now uses React Router 7, requiring projects to update their own \react-router-dom\ dependency to version 7.x to avoid conflicts with extension authors. The Vite configuration hook now receives a Vite 7 \InlineConfig\, and the \splitVendorChunkPlugin\ has been removed.
packages/admin/dashboard · high confidence
Animated SVG logo and avatar components in the dashboard
The dashboard now uses new SVG-based LogoBox and AvatarBox components that replace previous static assets. These components render the Medusa logo and user avatars with animated checkmark indicators (using motion/react) when a 'checked' state is provided, offering a more dynamic visual experience in the admin interface.
packages/admin/dashboard/src/components/common/logo-box · high confidence
Campaign detail page components restructured
The campaign detail view in the admin dashboard has been reorganized into distinct, reusable sections: general information, budget, spend, configuration, and promotions. This change introduces dedicated components for displaying campaign metadata (name, identifier, description, status), budget limits and usage (including attribute-based tracking), and date ranges, while the promotions section now utilizes a configurable data table to manage associated promotions with add/remove capabilities.
packages/admin/dashboard/src/routes/campaigns/campaign-detail/components · high confidence
Campaign list table now uses configurable data table with row actions
The Campaigns list view in the admin dashboard has been updated to use the new configurable data table system. This change introduces a dedicated table adapter that manages data fetching, pagination, and filtering (specifically allowing filters on campaign identifier and budget currency code). The list now supports configurable columns, search, and sorting, and includes a new action menu for each row that allows users to edit or delete a campaign with a confirmation prompt.
packages/admin/dashboard/src/routes/campaigns/campaign-list/components · high confidence
Cart module schema and service layer migration to Medusa Framework
The \@medusajs/cart\ module has been migrated to the new Medusa Framework architecture, replacing the legacy implementation with a new service layer (\CartModuleService\) and Data Model Layer (DML) entity definitions. This update introduces several schema changes to support advanced cart features: a \credit\_line\ table and model have been added to track cart credits, a \locale\ field has been added to the \cart\ entity, and \product\_type\_id\, \is\_custom\_price\, and \is\_giftcard\ fields have been added to \cart\_line\_item\. Additionally, \is\_tax\_inclusive\ flags have been added to line items and adjustments, and \data\ fields have been added to tax lines. The module now exposes linkable configurations for all cart entities (cart, credit line, address, line item, shipping method, and their respective adjustments and tax lines) and includes integration tests to verify the new service behavior.
packages/modules/cart · high confidence
Categories management is rebuilt with a new modular UI and layout system
The product category management interface in the admin dashboard has been completely rewritten to use the new LayoutComposer architecture and configurable data tables. The category list now uses a single-column layout, while the detail view is structured into a two-column layout with distinct sections for general information, organization (path and children), and associated products. The create and edit flows have been redesigned: creating a category now uses a multi-step modal with 'Details' and 'Organize' tabs, allowing users to set up nesting and rank via a drag-and-drop tree, while editing is handled in a drawer. The product association section supports a configurable data table when the 'view\_configurations' feature flag is enabled, and the detail view now includes breadcrumbs and dynamic document titles.
packages/admin/dashboard/src/routes/categories · high confidence
Configurable admin search with shortcut-only navigation entries
The admin global search is now configurable via a registry that allows apps and plugins to add, override, or remove search entities. A key behavioral change is the support for 'shortcut-only' entries (such as Reservations) that provide keyboard navigation shortcuts without appearing in search results, addressing cases where entities are navigable but have no searchable content. Users can now customize the search palette by defining custom entities with specific transforms and group labels, or clear the default set entirely.
packages/admin/dashboard/src/lib/search · high confidence
Configurable data tables now automatically fetch required currency and unit of measure fields
The dashboard's configurable data tables now intelligently request additional data fields from the API based on the columns currently visible to the user. Specifically, if a currency column is displayed, the system automatically includes the \currency\_code\ in the API request to ensure accurate formatting, even if the user hasn't explicitly added a currency code column. Similarly, quantity columns now automatically fetch the necessary unit of measure data (including nested paths like \inventory\_item.unit\_of\_measure\) to display correct units. This ensures that configurable views render complete and accurate information without requiring manual field configuration for these dependencies.
packages/admin/dashboard/src/lib/table · high confidence
Configurable order list views and new display ID support
The Orders list now supports configurable views, allowing users to customize the displayed columns and data relations via a new \ConfigurableOrderListTable\ component when the \view\_configurations\ feature flag is enabled. Additionally, the order list query now explicitly includes the \shipping\_address\ relation, ensuring the country column renders correctly, and supports a new \custom\_display\_id\ field for flexible order identification.
packages/admin/dashboard/src/routes/orders/order-list · high confidence
Currency module now normalizes currency codes to lowercase
The currency module now automatically normalizes currency codes to lowercase when filtering or retrieving currencies. This ensures that lookups are case-insensitive, so queries for 'USD', 'Usd', or 'usd' will all correctly resolve to the same currency record.
packages/modules/currency · high confidence
Customer Groups list now uses the new DataTable component
The Customer Groups list page in the admin dashboard has been migrated to use the new DataTable block. This change updates the list view to support the new configurable data table architecture, providing consistent sorting, filtering, and pagination behavior across the admin interface.
packages/admin/dashboard/src/routes/customer-groups/customer-group-list/components · high confidence
Customer group detail page components restructured with configurable data table support
The customer group detail page in the admin dashboard has been refactored to support a new configurable data table architecture. The \customer-group-customer-section\ now includes a \ConfigurableCustomerGroupCustomerSection\ component that utilizes the \ConfigurableDataTable\ and \createTableAdapter\ to manage customer lists, allowing for specific filter configurations (email, name, dates) and row selection commands (remove customers). The legacy \CustomerGroupCustomerSection\ remains available, providing a standard data table with manual column and filter definitions. Additionally, the \customer-group-general-section\ has been updated to display group metadata and action menus for editing or deleting the group, ensuring the UI aligns with the new modular component structure.
packages/admin/dashboard/src/routes/customer-groups/customer-group-detail/components, packages/admin/dashboard/src/routes/price-lists/price-list-detail/components · high confidence
Customer module migrated to the Data Model Layer (DML)
The customer module has been rebuilt using the new Data Model Layer, replacing the previous implementation with MikroORM-based models and services. This migration introduces a unique constraint on the combination of email and has\_account to prevent duplicate guest or account-holding customers, enforces a unique constraint on customer group names, and adds soft-delete support (deleted\_at columns and indexes) to the customer, address, group, and group-customer tables. The module now exposes linkable configurations for customer, customer\_address, customer\_group, and customer\_group\_customer, and provides a unified service interface for managing these entities.
packages/modules/customer, packages/modules/sales-channel · high confidence
Dashboard application entry point and theme persistence
The dashboard application entry point (app.tsx) has been restructured to initialize the DashboardApp with local plugin modules (routes, displays, forms, etc.) and expose utilities for defining cell renderers and search entities. A new theme provider has been added that persists the user's light/dark/system preference to localStorage and applies it to the HTML element, ensuring the UI respects the chosen theme across sessions.
packages/admin/dashboard/src · high confidence
Dashboard i18n provider now sets HTML lang/dir attributes and normalizes locale codes
The new I18nProvider component in the admin dashboard automatically synchronizes the active language with the document element by setting the 'lang' and 'dir' attributes on the HTML root. It normalizes locale codes (e.g., converting 'ptBR' to 'pt-BR') to ensure valid HTML attributes, supports Right-to-Left (RTL) layouts based on language configuration, and falls back to the first configured language if the active one is unrecognized. This improves accessibility and ensures correct text direction and language declaration for screen readers and browsers.
packages/admin/dashboard/src/providers/i18n-provider · high confidence
Data grid cell interaction and validation logic refactored into dedicated hooks
The data grid's cell handling logic has been restructured into a set of specialized React hooks (e.g., \use-data-grid-cell\, \use-data-grid-cell-handlers\, \use-data-grid-cell-error\) to improve modularity and maintainability. This change centralizes the implementation of cell editing, keyboard navigation, drag-to-fill, clipboard operations, and error highlighting within the dashboard's data grid component, ensuring consistent behavior for user interactions like typing, selecting ranges, and handling validation errors.
packages/admin/dashboard/src/components/data-grid/hooks · high confidence
Detail pages now display dynamic breadcrumbs and use the new LayoutComposer
The API Key, Collection, and Customer Group detail pages have been updated to include dynamic breadcrumbs that display the resource's title or name in the navigation header. Additionally, these pages now utilize the new LayoutComposer component for rendering, which supports a configurable view mode (controlled by the 'view\_configurations' feature flag) to allow for more flexible layout customization of sections like sales channels, products, and customers.
packages/admin/dashboard/src/routes/api-key-management/api-key-management-detail, packages/admin/dashboard/src/routes/collections/collection-detail, packages/admin/dashboard/src/routes/customer-groups/customer-group-detail · high confidence
Form submission now requires Cmd/Ctrl + Enter
The KeyboundForm component in the admin dashboard now prevents accidental form submission via the Enter key alone. Users must now press Cmd + Enter (or Ctrl + Enter) to submit the form, while still allowing the Enter key to create new lines within textarea elements.
packages/admin/dashboard/src/components/utilities/keybound-form · high confidence
Front-end validation for conditional shipping prices
The dashboard now validates conditional shipping price rules directly in the UI. A new Zod schema enforces that price ranges (defined by gte/lte bounds) do not overlap, allowing the same amount for non-overlapping conditions but rejecting conflicting ranges. This prevents users from saving invalid configurations that would cause backend errors.
packages/admin/dashboard/src/routes/locations/common · high confidence
Inventory detail page now displays breadcrumbs and dynamic titles
The inventory detail view now includes a breadcrumb component that displays the inventory item's title, SKU, or ID, and provides dynamic document titles for browser tabs based on the same data. This change also introduces a new layout structure using the LayoutComposer to organize sections like general info, location levels, reservations, and variants, ensuring the page loads with the necessary variant and product data.
packages/admin/dashboard/src/routes/inventory/inventory-detail · high confidence
Inventory list page now supports configurable layouts and widget zones
The inventory list page has been refactored to use the new LayoutComposer system, enabling dynamic layout configuration and widget zone integration. Users with the 'view\_configurations' feature flag enabled will see the new ConfigurableInventoryListTable, while others continue to use the standard InventoryListTable. This change introduces support for extending the inventory list UI via widget zones prefixed with 'inventory\_item.list'.
packages/admin/dashboard/src/routes/inventory/inventory-list · high confidence
Inventory list table now supports configurable filtering and row selection
The inventory list view in the admin dashboard has been updated to use a configurable data table component. This change introduces the ability to filter inventory items by location, material, SKU, dimensions (height, width, length, weight), and shipping requirements, as well as sort by title, SKU, stocked quantity, and reserved quantity. Users can now select multiple inventory items to perform bulk actions, such as navigating to the stock management screen, and the table includes dedicated components for row-level edit and delete actions.
packages/admin/dashboard/src/routes/inventory/inventory-list/components · high confidence
Local event bus now supports event grouping and internal event logging
The local event bus module now supports grouping events by an \eventGroupId\, allowing applications to defer emission until a transaction completes via \releaseGroupedEvents\ or discard them with \clearGroupedEvents\. Additionally, events marked as \internal\ are no longer logged to the console, reducing noise during processing.
packages/modules/event-bus-local · high confidence
New API key details section with revocation-based deletion
The API key management interface now includes a dedicated general section that displays key status, type, last used date, and creator. A key behavioral change is that the Delete action is now disabled until the API key has been revoked, enforcing a two-step process (revoke then delete) for permanent removal. Additionally, the display logic for secret keys has been updated to show a redacted badge without a copy button, while public keys retain the copy functionality.
packages/admin/dashboard/src/routes/api-key-management/api-key-management-detail/components/api-key-general-section · high confidence
New NavItem component with drag-and-drop and active-link detection
The dashboard now uses a new NavItem component for sidebar navigation items, introducing drag-and-drop reordering capabilities via @dnd-kit and improved active link highlighting that correctly distinguishes between sibling routes sharing a path prefix. The component also supports nested sub-items, keyboard shortcut tooltips, and i18n labels for menu extensions.
packages/admin/dashboard/src/components/layout/nav-item · high confidence
New campaign detail page with breadcrumb and layout composition
The campaign detail view now includes a dedicated breadcrumb component that displays the campaign name in the navigation path, improving context for users. The main detail page has been restructured to use the LayoutComposer system, organizing content into main sections (general info, promotions) and a sidebar (configuration, spend, budget), with support for a configurable promotion section when the relevant feature flag is enabled.
packages/admin/dashboard/src/routes/campaigns/campaign-detail · high confidence
New collection detail UI components with configurable data tables
The collection detail page now uses new \CollectionGeneralSection\ and \CollectionProductSection\ components. The general section displays collection metadata and provides action menu options for editing, deleting, and managing translations (when the translation feature flag is enabled). The product section replaces the previous implementation with a configurable data table that allows users to view, search, filter, and sort products within the collection, as well as remove selected products via a bulk action or individual row actions.
packages/admin/dashboard/src/routes/collections/collection-detail/components · high confidence
New location editing interface with improved country selection
The location edit page now uses a new form component that replaces the native select element for country selection with a custom Medusa UI Select component, providing a more consistent user experience. The form supports editing stock location details including name, address, and country, with validation and toast notifications for success or error states.
packages/admin/dashboard/src/routes/locations/location-edit · high confidence
New product option section with sorted, truncated value badges
The product detail page now renders a dedicated ProductOptionSection component that lists each product option and its values as small badges. These badges are sorted by their rank (values with a rank appear first, sorted ascending, followed by unranked values) and are styled to truncate long text and prevent overlap, ensuring the layout remains clean even with lengthy option values. Each option also includes an action menu to navigate to its specific management page.
packages/admin/dashboard/src/routes/products/product-detail/components/product-option-section · high confidence
New product variant edit form with validation and keyboard shortcuts
The product variant editing interface now uses a dedicated form component that enforces data validation via Zod schemas and supports submitting changes with Cmd + Enter. Users can edit variant details such as title, SKU, dimensions, and options within a drawer, with clear success and error feedback provided via toast notifications.
packages/admin/dashboard/src/routes/product-variants/product-variant-edit/components · high confidence
New promotion edit details form with status and allocation options
The promotion edit interface now includes a dedicated form for editing promotion details, allowing users to change the promotion status (draft, active, or inactive), toggle automatic application, and modify allocation methods (each, across, or once). The form also supports editing fixed or percentage values, tax inclusivity settings, and target types (order, shipping methods, or items), with validation for numeric values and currency handling.
packages/admin/dashboard/src/routes/promotions/promotion-edit-details · high confidence
New store editing interface with default sales channel and location support
The store edit page has been replaced with a new implementation that allows administrators to update the store's name, default currency, default region, default sales channel, and default stock location. This change introduces a new form component that utilizes a drawer layout and supports keyboard submission (Cmd/Ctrl + Enter), ensuring that key operational settings like sales channels and stock locations can now be modified directly from the store settings.
packages/admin/dashboard/src/routes/store/store-edit · high confidence
Optimized product data loading in attribute and organization drawers
The Product Attributes and Product Organization drawers now request a more specific set of product fields, excluding unnecessary relations like variants, images, and sales channels by default. This change improves performance by reducing the amount of data fetched from the API when editing these specific product sections.
packages/admin/dashboard/src/routes/products/product-attributes, packages/admin/dashboard/src/routes/products/product-organization · high confidence
Order detail page now uses LayoutComposer for modular section rendering
The Order detail page has been refactored to use the LayoutComposer component, which allows the main and sidebar sections (such as Order General, Summary, Payment, Fulfillment, Customer, and Activity) to be rendered as distinct, composable entries. This change introduces a new breadcrumb component that displays the order's display ID and updates the route loader to fetch order data using a standardized set of fields and relations defined in constants, ensuring consistent data retrieval across the admin dashboard.
packages/admin/dashboard/src/routes/orders/order-detail · high confidence
Price lists list now uses the configurable data table
The price lists list in the admin dashboard has been migrated to use the new configurable data table system. This change introduces a new \ConfigurablePriceListListTable\ component that leverages a dedicated \usePriceListTableAdapter\ to define the table's behavior, including data fetching, column definitions, and row actions. The table now supports filtering by status and date ranges, displays a live count of price overrides per list, and provides edit and delete actions for each price list. This migration aligns the price lists view with the broader configurable data table architecture introduced in the admin dashboard.
packages/admin/dashboard/src/routes/collections/collection-list/components, packages/admin/dashboard/src/routes/price-lists/price-list-list/components, packages/admin/dashboard/src/routes/promotions/promotion-list/components · high confidence
Product detail page restructured with new sections and optimized data loading
The product detail page in the admin dashboard has been refactored to improve performance and modularity. Data loading is now optimized by explicitly excluding unnecessary relations (such as variants, images, and sales channels) by default, reducing the payload size. The UI has been reorganized into distinct, reusable components for general info, media, options, variants, attributes, sales channels, shipping profiles, and organization, all managed via the LayoutComposer system. A new breadcrumb component provides better navigation context, and the page now supports dynamic document titles for browser tabs.
packages/admin/dashboard/src/routes/products/product-detail · high confidence
Product edit form now excludes unnecessary relations by default
The product edit page now fetches only the essential product data by explicitly excluding relations such as type, collection, options, tags, images, variants, and sales channels from the default query. This change improves performance and reduces payload size by preventing the server from returning unnecessary product relations that are not required for the edit form.
packages/admin/dashboard/src/routes/products/product-edit · high confidence
Product list table now supports configurable views and dynamic filtering
The product list table in the admin dashboard has been refactored to support configurable data views. This change introduces a new \ConfigurableProductListTable\ component that integrates with the system's configurable data table infrastructure, allowing for dynamic filter and sort resolution. Users benefit from enhanced filtering capabilities, including multi-select filters for product types, tags, sales channels, and status, as well as standardized date filtering. The table also now supports custom cell renderers and property labels, providing a more flexible and consistent experience for managing product data.
packages/admin/dashboard/src/routes/products/product-list/components · high confidence
Product types management is rewritten with new UI components and configurable data tables
The Product Types section in the admin dashboard has been completely rebuilt. The list view now supports a new Configurable DataTable (controlled by the 'view\_configurations' feature flag) alongside the existing standard table, offering consistent filtering and column management. The detail view has been restructured using the LayoutComposer, featuring a dedicated General section with an ActionMenu for editing and deleting, and a Products section that also switches between the configurable and standard data tables based on the feature flag. Creation and editing workflows now utilize RouteFocusModal and RouteDrawer respectively, providing a more integrated modal experience. Additionally, a new Breadcrumb component and loader have been added to the detail route to improve navigation context and data loading.
packages/admin/dashboard/src/routes/product-types · high confidence
Product variants now display in a new DataTable component
The product variant section on the product detail page has been refactored to use the new DataTable block. This change replaces the previous table implementation, providing consistent filtering, sorting, and pagination capabilities for managing variants. Users can now view variant details, including inventory status and thumbnails, within a unified data grid that supports actions like editing prices, managing stock, and deleting variants.
packages/admin/dashboard/src/routes/products/product-detail/components/product-variant-section · high confidence
Promotion detail page restructured with campaign integration and metadata support
The promotion detail view in the admin dashboard has been rebuilt to use the new LayoutComposer architecture, organizing content into a two-column layout with general details, conditions, and a dedicated sidebar section for campaign association. Users can now view and manage a promotion's campaign membership, including navigating to the campaign or adding the promotion to one. Additionally, a new metadata management drawer has been introduced, allowing users to edit promotion metadata directly from the detail view.
packages/admin/dashboard/src/routes/promotions/promotion-detail · high confidence
ProvinceSelect component now uses Medusa UI Select
The ProvinceSelect input component has been replaced with a new implementation that uses the Select component from @medusajs/ui instead of the native HTML select element. This change provides consistent styling with the rest of the Medusa admin dashboard and supports features like RTL layout. The component maintains the same API for selecting provinces by ISO code or name, and includes proper accessibility attributes through the Medusa UI wrapper.
packages/admin/dashboard/src/components/inputs/province-select · high confidence
Redesigned invite acceptance flow with animated UI and conditional prefilling
The invite acceptance page has been redesigned to feature a new animated interface that transitions between the account creation form and a success state. The form now pre-fills the email address from the invite token to streamline registration, but specifically excludes this pre-filling when the user is onboarding via a 'first\_run' flag, ensuring a clean experience for new app setups. Additionally, the view includes an invalid token state and a link back to login, improving the overall user guidance during the invite process.
packages/admin/dashboard/src/routes/invite · high confidence
Redesigned login page with multi-provider support and MFA
The login interface has been updated to support multiple authentication methods, including email/password, SSO, and Medusa Cloud OAuth, with a new layout that dynamically renders available providers. The flow now includes a dedicated Multi-Factor Authentication (MFA) challenge step and a link to the password reset page, while also supporting extension widgets for custom login enhancements.
packages/admin/dashboard/src/routes/login · high confidence
Redesigned tax region management interface with new UI components
The tax regions section in the admin dashboard has been rebuilt using a new set of shared UI components. This change introduces dedicated components for displaying tax regions (\TaxRegionCard\, \TaxRegionTable\), tax rates (\TaxRateLine\), and tax overrides (\TaxOverrideCard\, \TaxOverrideTable\), along with a new \TargetForm\ for selecting rule references like products or shipping options. The update also includes new hooks for table pagination and deletion actions, and a new form for creating tax regions that requires selecting a tax provider.
packages/admin/dashboard/src/routes/tax-regions · high confidence
Redis Event Bus module initializes with BullMQ and supports event grouping with TTL
The \@medusajs/event-bus-redis\ module now initializes a BullMQ queue and worker to handle asynchronous event processing. It supports grouping events via an \eventGroupId\, allowing subscribers to be held until \releaseGroupedEvents\ is called, and ensures that these grouped staging keys expire via a pipelined \EXPIRE\ command to preserve the Time-To-Live (TTL). Additionally, the module now includes \created\_at\ and \published\_at\ timestamps in event metadata and enforces a default priority of 100 for normal events.
packages/modules/event-bus-redis · high confidence
Region detail page now uses LayoutComposer and includes breadcrumbs
The region detail page has been refactored to use the new LayoutComposer approach, replacing the previous layout structure with a single-column layout that renders general and country sections via defined entries. A new breadcrumb component has been added to display the region name in the navigation path, and dynamic SEO titles are now generated based on the region's name. The page also loads price preferences to support region-specific pricing configurations.
packages/admin/dashboard/src/routes/regions/region-detail · high confidence
Region module migration to Medusa Framework v2
The region module has been migrated to the new Medusa Framework v2 architecture, introducing a new \RegionModuleService\ and a DML-based data model (MikroORM) with \region\ and \country\ tables. This update includes a loader that automatically seeds default countries on application start, enforces currency code normalization, and implements soft-delete behavior that correctly unsets the region association on countries. The module now exposes linkable configurations for regions and countries and includes integration tests to verify these behaviors.
packages/modules/region · high confidence
Reservation list table now uses configurable data table component
The reservation list table in the admin dashboard has been refactored to use the new ConfigurableDataTable component. This change introduces a more flexible and configurable table structure for managing reservations, allowing for easier customization of columns, filters, and actions. The update includes a new adapter pattern for reservation data, enabling better separation of concerns and improved maintainability of the reservation list interface.
packages/admin/dashboard/src/routes/reservations/reservation-list/components · high confidence
Return reasons management UI is restructured with new forms and configurable data tables
The Return Reasons section in the admin dashboard has been rebuilt to use new, dedicated form components for creating and editing return reasons, replacing the previous implementation. The create flow now uses a modal-based form, while the edit flow utilizes a drawer-based form, both featuring improved validation and user feedback. Additionally, the return reasons list view has been migrated to support a new configurable data table component, allowing for more flexible column and filter configurations, while maintaining backward compatibility with the existing table for users without the new feature flag enabled.
packages/admin/dashboard/src/routes/return-reasons · high confidence
Reworked product variant creation flow with multi-step form
The product variant creation interface has been redesigned into a multi-step wizard with distinct tabs for Details, Pricing, and Inventory. The form now uses Zod for schema validation and React Hook Form for state management, allowing users to configure variant titles, SKUs, and option values in the Details tab, set prices per region/currency in the Pricing tab, and manage inventory kits with specific item quantities in the Inventory tab. The flow dynamically adjusts the tab order, showing the Inventory tab only when inventory management and inventory kits are enabled, and validates each step before allowing progression to the next.
packages/admin/dashboard/src/routes/products/product-create-variant/components · high confidence
Sales channel list now supports configurable views
The Sales Channel List page in the admin dashboard now renders a configurable data table when the 'view\_configurations' feature flag is enabled, allowing users to customize column visibility and layout. When the flag is disabled, the page falls back to the standard sales channel list table, ensuring backward compatibility for existing users.
packages/admin/dashboard/src/routes/sales-channels/sales-channel-list · high confidence
Sales channel list table migrated to configurable data table
The sales channel list in the admin dashboard now uses the new configurable data table component, replacing the previous implementation. This change standardizes the table's behavior and appearance with other admin tables, including consistent pagination, filtering, and action menus. The table now supports configurable columns and filters, allowing for easier maintenance and future enhancements. Users will notice a more consistent experience when managing sales channels, with improved performance and a cleaner interface.
packages/admin/dashboard/src/routes/sales-channels/sales-channel-list/components · high confidence
Sales channel management in API key details now uses configurable data tables
The Sales Channel section within the API Key detail view has been migrated to use the new Configurable DataTable component. This change allows users to manage sales channels associated with an API key through a table that supports row selection, batch removal, and inline actions (edit/delete), while leveraging the system's configurable table infrastructure for consistent filtering and rendering.
packages/admin/dashboard/src/routes/api-key-management/api-key-management-detail/components/api-key-sales-channel-section · high confidence
Sales channel selection in product creation now uses a DataTable
The product creation form's sales channel selection interface has been replaced with a DataTable component. This change introduces pagination, filtering, and row selection capabilities to the sales channel modal, allowing users to more easily browse and select channels from a larger list. The selection state is now managed via row selection within the table and persisted to the form upon saving.
packages/admin/dashboard/src/routes/products/product-create/components/product-create-organize-form/components/product-create-sales-channel-stacked-modal · high confidence
Sales channel table helper logic migrated to new DataTable system
The Sales Channels list in the admin dashboard now uses the new DataTable component infrastructure. This change introduces helper hooks that define the table's columns (name, description, status, and dates), filters (status toggle and date ranges), empty states, and query parameters, replacing the previous table implementation with a consistent, reusable data-table pattern.
packages/admin/dashboard/src/components/data-table/helpers · high confidence
Settings sidebar now uses collapsible groups and feature-gated navigation
The Settings sidebar has been restructured to organize navigation items into collapsible sections (General, Developer, My Account, and Extensions) using Radix UI. Navigation entries are now conditionally rendered based on feature flags and permissions: Roles and Policies appear only when RBAC is enabled, Property Labels only when view\_configurations is active, Translations only when the translation flag is on, and Search Indexes only when search is enabled. This ensures users only see relevant settings and prevents navigation loops by redirecting from settings routes to /orders.
packages/admin/dashboard/src/components/layout/settings-layout · high confidence
Shipping profiles list now uses configurable data tables
The shipping profiles list in the admin dashboard has been updated to use the new configurable data table system. This change introduces a new \ConfigurableShippingProfileListTable\ component that leverages a table adapter for data fetching and row actions, replacing the previous implementation. Users will see the same list of shipping profiles with support for pagination, searching, and filtering by name, type, and dates, but the underlying UI component structure is now standardized across the admin dashboard.
packages/admin/dashboard/src/routes/shipping-profiles/shipping-profiles-list/components · high confidence
Standardize repository linting and formatting configuration
The repository now enforces a unified code style and linting strategy across the monorepo. A new \@medusajs/eslint-plugin\ provides Medusa-specific convention rules, while a centralized \.eslintrc.js\ and \.eslintignore\ define exactly which packages are subject to style checks (e.g., \packages/medusa\, \packages/admin-ui\) versus those excluded. Formatting is standardized via a root \.prettierrc\ (no semicolons, double quotes, 2-space indent) and a \.nvmrc\ pins the Node version to 22. Additionally, documentation linting is enabled via \.vale.ini\ to ensure consistency in markdown and MDX files.
(repo-wide) · high confidence
Standardized injection zone definitions and validation for admin widgets
The admin-shared package now provides a centralized registry of injection zones for core resources (orders, customers, products, etc.), replacing the legacy \.before\/\.after\ suffixes with a simplified structure that relies on the layout composer for ordering. This change introduces a new \InjectionZoneRegistry\ interface that allows plugins to declare custom zones via declaration merging, and exports a \isValidInjectionZone\ utility to validate zone names at runtime, ensuring widgets are placed in supported locations within the dashboard.
packages/admin/admin-shared/src/extensions/widgets · high confidence
Standardized table query hooks for the Admin Dashboard
The dashboard now uses a dedicated set of hooks in \packages/admin/dashboard/src/hooks/table/query\ to construct API requests for every table (campaigns, collections, customers, orders, products, promotions, regions, shipping options, taxes, and more). Each hook reads URL parameters (offset, search, sort, date ranges, and domain-specific filters) and converts them into typed search params, ensuring consistent pagination, sorting, and filtering across all list views. The product table query now explicitly requests a limited set of fields (id, title, handle, status, collections, sales channels, and variant thumbnails) to reduce overfetching, and a shared \parseFilterParam\ helper prevents empty default filter values from blanking out tables before the user enters a value.
packages/admin/dashboard/src/hooks/table/query · high confidence
Stock location module migration enforces unique, cascading address relationships
The stock-location module's database schema has been updated to ensure that each stock location is linked to exactly one address. A new migration changes the foreign key constraint on the address relationship to cascade deletes (previously it set the reference to null) and adds a unique constraint on the address ID, preventing a location from having multiple addresses. This ensures data integrity for the address association within the stock location module.
packages/modules/stock-location · high confidence
Stock locations list now uses a configurable data table
The Stock Locations list in the admin dashboard has been refactored to use the new configurable data table system. This change introduces a new \ConfigurableLocationListTable\ component that leverages a table adapter and custom cell renderers for fields like shipping/pickup fulfillment status and sales channels. The list now supports search, pagination, and specific column filtering (ID, name, dates, sales channels, address). A feature flag (\view\_configurations\) controls whether the new configurable table or the legacy table is displayed, ensuring a gradual rollout of this UI improvement.
packages/admin/dashboard/src/routes/locations/location-list · high confidence
Unsaved changes protection for route modal forms
The dashboard now prevents accidental navigation away from modal forms containing unsaved changes. When a user attempts to change the route while a form is dirty, a confirmation prompt appears asking them to either cancel (stay on the form) or continue (discard changes and navigate). This behavior respects the \blockSearchParams\ prop to optionally block search parameter changes as well, and correctly handles submission states to avoid blocking navigation after a successful save.
packages/admin/dashboard/src/components/modals/route-modal-form · high confidence
Updated country, state, and currency reference data in the admin dashboard
The admin dashboard's local data layer has been refreshed with updated reference lists for countries, states/provinces, and currencies. This includes adding missing US states, correcting Spain's provinces, renaming Macedonia to North Macedonia, and adding Iran's 31 provinces. Additionally, several currencies have been added or corrected, including the Angolan Kwanza (AOA), Gambian Dalasi (GMD), and Iranian Toman (IRT), ensuring the region editor and currency selectors reflect current geopolitical and monetary standards.
packages/admin/dashboard/src/lib/data · high confidence
Users list table now supports configurable data table features
The Users list table in the admin dashboard has been refactored to use the new configurable DataTable block. This change introduces a new \ConfigurableUserListTable\ component that leverages a \user-table-adapter\ to manage data fetching, column definitions, and filtering logic. Users will benefit from consistent table behavior across the admin interface, including improved sorting, filtering capabilities (specifically for email, names, and date fields), and a standardized empty/filtered state display. The underlying implementation now uses the shared \DataTable\ component from the UI library, ensuring alignment with other configurable tables in the system.
packages/admin/dashboard/src/routes/users/user-list/components · high confidence
Workarounds for changesets peer-dependency bumps and GitHub API limits
The release tooling now prevents major version bumps for peer dependencies, ensuring that updates to peer dependencies do not trigger major version increments for dependent packages. Additionally, the changesets GitHub info integration now fetches a limited number of commits (capped at 100) to avoid errors from the GitHub GraphQL API and includes safer null checks for API responses.
.yarn · high confidence
Workflow execution list page adopts new LayoutComposer architecture
The workflow execution list page in the admin dashboard has been refactored to use the new LayoutComposer component. This change replaces the previous layout implementation with a structured approach that defines a single-column layout and integrates the workflow execution list table as a specific entry point, aligning this route with the broader dashboard layout system updates.
packages/admin/dashboard/src/routes/workflow-executions/workflow-execution-list · high confidence
Fixes
Add region table cell components for countries, fulfillment, and payment providers
The regions table in the admin dashboard now includes dedicated display cells for countries, fulfillment providers, and payment providers. The countries cell displays country names by prioritizing the API's \display\_name\ and falling back to a local ISO code lookup, while the fulfillment and payment provider cells format and summarize their respective lists using shared formatting utilities. These components ensure that the region overview table correctly renders detailed provider and country information instead of leaving these fields blank or generic.
packages/admin/dashboard/src/components/table/table-cells/region · high confidence
Add useStateAwareTo hook for preserving URL state in modals
A new \useStateAwareTo\ hook has been introduced in the dashboard modals to ensure that when a modal closes, the navigation returns to the original path while preserving any search parameters or specific restore parameters that were present when the modal was opened. This improves the user experience by preventing the loss of context (such as filters or query strings) after interacting with dashboard modals.
packages/admin/dashboard/src/components/modals/hooks · high confidence
Allow clearing optional product type and collection fields
The product organization form now supports clearing the optional Type and Collection fields. This is achieved by adding the \allowClear\ prop to the respective Combobox inputs and updating the form submission logic to send \null\ for these fields when they are empty, ensuring that unselecting a type or collection correctly updates the product record.
packages/admin/dashboard/src/routes/products/product-organization/components · high confidence
Fix broken plugin dependencies in development server
This change resolves issues with plugin dependencies during development by introducing new Vite plugins for the admin bundler and updating dashboard link utilities. The bundler now includes a plugin to clear previous build artifacts before starting, a plugin to correctly inject Tailwind CSS configuration by scanning content sources from the dashboard, UI package, and custom plugins, and a plugin to write static files. Additionally, the dashboard's link utilities have been updated to dynamically resolve and append linkable fields for custom field models, ensuring that related data links are correctly identified and included in the development environment.
packages/admin/admin-bundler/src/plugins, packages/admin/dashboard/src/dashboard-app/links · high confidence
Fix country sorting in region management
The country list within the region management interface no longer throws an error when sorting by name or code. This change introduces a new \useCountries\ hook that handles client-side sorting and filtering of the static country list, ensuring that users can reliably sort countries by name or ISO code without encountering runtime exceptions.
packages/admin/dashboard/src/routes/regions/common · high confidence
Fix for ignored variants in the product creation datagrid
The product creation flow now correctly handles variants within the datagrid component. Previously, variants marked for creation were being ignored; the updated \ProductCreateVariantsForm\ component now filters the variant data to include only those with \should\_create\ set to true, ensuring that user-defined variants are properly captured and displayed in the creation interface.
packages/admin/dashboard/src/routes/products/product-create/components/product-create-variants-form · high confidence
Fix missing fulfillment labels on the create shipment page
The order create shipment page now correctly requests and displays fulfillment labels by including \\*fulfillments.labels\ in the API query fields, ensuring users can see label information when creating a shipment.
packages/admin/dashboard/src/routes/orders/order-create-shipment · high confidence
Fix plugin:db:generate crash with enum exports
The \plugin:db:generate\ command no longer crashes when a module's model files export enums. This fix is validated by a new integration test fixture (\plugins-1-with-enum\) that includes a module exporting an enum (\MyStatus\) alongside a standard model, ensuring the database generation process handles these exports correctly.
packages/medusa/src/commands/plugin/db/integration-tests/\\fixtures\\/plugins-1-with-enum/src/modules/module-1 · high confidence
Fix product metadata form errors by excluding unnecessary relations
The product metadata form no longer throws errors when loading. This is achieved by explicitly excluding unnecessary product relations (such as type, collection, options, tags, images, variants, and sales channels) from the default query configuration, ensuring only the required metadata is fetched.
packages/admin/dashboard/src/routes/products/product-metadata · high confidence
Fixes test runner environment restoration and database URL encoding
The test runner now correctly restores \process.env\ variables to their original state after tests complete or fail, preventing environment leakage between test suites. Additionally, database credentials (username and password) are now properly URL-encoded when constructing the connection string, ensuring that special characters like \\#\, \@\, \:\, and \/\ do not break database connectivity during integration tests.
packages/medusa-test-utils · high confidence
Handle null sales channel references in product detail view
The product detail view now safely filters out null or undefined entries from the product's sales channel list. This prevents potential rendering errors or crashes when a sales channel has been deleted but the association with the product remains, ensuring the UI displays only valid channel names or a 'no sales channels' message.
packages/admin/dashboard/src/routes/products/product-detail/components/product-sales-channel-section · high confidence
Introduce new product creation form with validation and data normalization
The product creation interface has been replaced with a new implementation that uses Zod schemas for input validation and dedicated utility functions to normalize form data before submission. This change ensures that product titles, handles, and descriptions are trimmed to prevent creation errors, allows float values for product prices and dimensions, and correctly persists variant ranks and inventory flags. The new form also enforces unique SKUs across variants and aligns volumetric attribute data types, providing a more robust experience when creating new products in the admin dashboard.
packages/admin/dashboard/src/routes/products/product-create · high confidence
Product export now respects applied table filters
The product export feature in the admin dashboard has been updated to ensure that exports respect the filters currently applied in the product table. A new \ExportFilters\ component displays the active filters, and the export logic explicitly removes the \fields\ parameter from the query before sending the request, preventing issues where specific field selections or filter contexts caused the export to fail or return incorrect data.
packages/admin/dashboard/src/routes/products/product-export · high confidence
Test coverage
Add integration test fixtures for multi-module and empty-module scenarios; Added CLI integration test scripts for server readiness, authentication, and data verification; Added custom module fixture with feature-flag-gated migration; Added integration test fixtures for new configuration and authentication capabilities; Added integration test fixtures for plugin database generation; Added integration test for RBAC policy coverage; Added integration tests for Admin Locale and Translation Settings APIs; Added integration tests for Cloud OAuth user creation and linking; Added integration tests for Customer Admin API endpoints; Added integration tests for EventBusModule event payload structure; Added integration tests for RBAC workflow role inheritance; Added integration tests for View Configurations API; Added integration tests for admin API key and publishable key management; Added integration tests for admin and store region endpoints; Added integration tests for admin authentication and MFA flows; Added integration tests for admin column introspection API; Added integration tests for admin invite lifecycle; Added integration tests for admin payment capture workflows; Added integration tests for admin price list operations; Added integration tests for admin product filtering by price lists; Added integration tests for admin reservation endpoints; Added integration tests for admin store management endpoints; Added integration tests for admin upload endpoints; Added integration tests for admin user management and deletion logic; Added integration tests for auth provider discovery and user provisioning; Added integration tests for claims and claims translations; Added integration tests for customer group management; Added integration tests for customer store endpoints; Added integration tests for default data initialization; Added integration tests for draft orders and order creation workflows; Added integration tests for email/password authentication; Added integration tests for event bus subscriber registration in server worker mode; Added integration tests for exchange translation and core exchange workflows; Added integration tests for feature flag resource loading; Added integration tests for fulfillment provider and set APIs; Added integration tests for fulfillment workflows and API endpoints; Added integration tests for global product options; Added integration tests for internal note support in order changes; Added integration tests for inventory item export and location-level management; Added integration tests for link workflow compensation; Added integration tests for loyalty plugin store credit workflows; Added integration tests for module link definitions and remote queries; Added integration tests for order admin workflows; Added integration tests for order edit tax data and translations; Added integration tests for order totals query behavior; Added integration tests for payment collection account holder and region validation; Added integration tests for payment providers and session workflows; Added integration tests for pending authorization payment flows; Added integration tests for product import, export, and SKU search; Added integration tests for product tags and types; Added integration tests for product variant store endpoints; Added integration tests for promotion limits and admin API behavior; Added integration tests for query graph translation resolution; Added integration tests for region management workflows and admin API; Added integration tests for shipping profile CRUD operations; Added integration tests for stock location management and fulfillment provider assignment; Added integration tests for store cart API behavior; Added integration tests for store order and return APIs; Added integration tests for store product price retrieval; Added integration tests for the Admin Index API; Added integration tests for the Refund Reasons API; Added integration tests for the Search module; Added integration tests for the Store Locales API; Added integration tests for the Store module's admin API; Added integration tests for the Tax admin API; Added integration tests for the admin currencies endpoint; Added integration tests for the admin price-preferences API; Added integration tests for the fulfillment providers list API; Added integration tests for the loyalty plugin's gift cards and store credit features; Added integration tests for user management endpoints; Added integration tests for workflow engine execution and filtering; Added integration tests for workflow engine retry intervals; Added search index fixtures for product and customer entities; Added tax region and rate fixture for integration tests; Added test fixture for the Translation module; Added test fixtures for fulfillment module integration tests; Added test fixtures for module context and translation links; Added test fixtures for order and shipping setup; Added test fixtures for tax and fulfillment modules; Added test infrastructure for calculated shipping in RMA flows; Added test utility providers for fulfillment, payment, and tax integration tests; Added tests for admin dashboard menu item ranking; Added tests for price-list utility functions; Added tests for the dynamic document title hook and its title resolution logic; Added unit tests for dashboard utility functions and library compatibility; Admin dashboard translation infrastructure and validation; Configurable search index middleware for integration tests; Fulfillment module integration tests and fixtures; In-memory workflow engine integration tests added; Index module integration tests and test infrastructure; Integration test fixture adds feature-flag-gated components; Integration tests added for RBAC admin API endpoints; Integration tests for cart promotions, workflows, and completion; Integration tests for order workflows; Integration tests for product workflow compensation, validation, and events; New HTTP integration test suite for Medusa; New integration test helpers for authenticated customers and variant pricing; New integration test helpers for v2 architecture and stability; Order module integration tests and module scaffolding; Pricing module integration tests and configuration scaffolding.
Dependencies
Bundled interactive tools plugin now includes React 16.13.1
The \@yarnpkg/plugin-interactive-tools\ plugin has been updated to bundle React version 16.13.1. This change integrates the React library directly into the plugin, enabling the interactive tools to utilize React's component model and hooks for their user interface.
.yarn/plugins/@yarnpkg · high confidence
Medusa v2.21.2 release with dependency updates
This release updates the Medusa framework and its packages to version 2.21.2. It includes dependency updates across the monorepo, such as upgrading \glob\ to 13.0.6 in the admin bundler and CLI tools, and \axios\ to ^1.13.1 in the design system toolbox. The release also enforces a minimum Node.js version of 22.22.0 for several core and admin packages.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 36.
Lenses
- Code Health 90
- Architecture 83
- Maturity 63
- Readiness 42
- Security 70
- Domain Modelling 17
- Accessibility 48
- Performance 100
Changes since last survey
- 300 commits — 184 feature/other, 116 fixes
By area
- www/apps — 81 commits
- packages/modules — 46 commits
- packages/core — 36 commits
- packages/admin — 28 commits
- .github/workflows — 17 commits
- packages/medusa — 14 commits
- (root) — 13 commits
- www/packages — 7 commits
- www/utils — 5 commits
- integration-tests/http — 4 commits
- packages/eslint-plugin — 4 commits
- packages/plugins — 4 commits
- packages/design-system — 3 commits
- packages/medusa-test-utils — 2 commits
- .changeset/admin-bundler-react-dedupe.md — 1 commit
- .changeset/collection-edit-error-toast.md — 1 commit
- .changeset/complete-turkish-translation.md — 1 commit
- .changeset/correlated-promotion-prefilter.md — 1 commit
- .changeset/cyan-apples-shake.md — 1 commit
- .changeset/draft-order-null-customer-guards.md — 1 commit
Notable commits
- fix: Fix span status (#16561)
- fix: Fix/another changeset mess (#16894)
- fix: Fix/search improvements (#16774)
- fix: Revert "docs: add Medusa ESLint plugin to the content linting"
- fix: chore(deps): bump figlet to 1.12.0 to fix [GHSA redacted] (#17145)
- fix: chore(deps): bump morgan to 1.12.1 to fix [GHSA redacted] (#17085)
- fix: chore(medusa): revert using cross-modules back to index module (#16787)
- fix: chore: add action + skill for fixing bugs in PRs (#17163)
- fix: chore: combine release actions + fix snapshot releases (#17041)
- fix: chore: fix bugs action (#17207)
- fix: chore: fix docs update version workflow
- fix: chore: fix handling of invalid translation json (#17002)
- fix: chore: fix notify action
- fix: chore: fix since version in tsdocs
- fix: fix(admin): update Croatian translation (#16675)
- fix: fix(admin): update Croatian translations (#16743)
- fix: fix(admin-bundler): dedupe react and react-dom in the admin vite config (#16620)
- fix: fix(auth-emailpass): require an actor-less identity to use the same password when re-registering (#16890)
- fix: fix(caching): reset the size accounting on a wildcard cache clear (#16607)
- fix: fix(core-flows): await the mutations performed in step compensations (#16573)
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
medusajs/medusa was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 12 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 146c46b0ad1146b40595c8ef586c4d5890982603 — the exact code this score is about.
- Scored under rubric-2026.10.5 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-fe8540b5da9b.