Commercial-grade Brand Management plugin for Medusa v2 — full CRUD, Module Link-based product assignment, Admin and Store REST APIs, and an Admin dashboard UI.
A commercial-grade Brand Management plugin for Medusa v2 — full CRUD with soft delete/restore, a one-brand-to-many-products relationship built on Medusa's official Module Link system, Admin and Store REST APIs, an Admin dashboard UI, and events other plugins can subscribe to.
Built and tested against Medusa 2.18.0. Requires , , and the other packages listed under to already be present in the consuming application (they are, for any standard Medusa v2 project).
Register it in your Medusa application's :
Then run migrations to create the table and sync the product-brand link:
npx medusa db:migrate| Option | Type | Default | Effect |
|---|---|---|---|
| Governs whether / are exposed in the admin form/API surface. The columns always exist regardless, to avoid schema drift if you flip this later. | |||
| Governs whether the filter and are meaningfully used in your storefront. | |||
| When , brand creation is rejected () if isn't provided. |
All routes are under and require the standard Medusa admin authentication — nothing extra to configure.
| Method | Path | Description |
|---|---|---|
| List brands. Query: , , , , , | ||
| Create a brand | ||
| Get a brand | ||
| Update a brand | ||
| Soft delete (default); pass for a hard delete | ||
| Restore a soft-deleted brand | ||
| Bulk delete/restore: | ||
| List a brand's products (paginated) | ||
| Assign products: | ||
| Remove products: |
Brand fields: , (auto-derived from if omitted), , , , , , , , , , , (/), .
Public routes, gated by a publishable API key like any other store route.
| Method | Path | Description |
|---|---|---|
| List active brands. Query: , , , , | ||
| Convenience alias for | ||
| Get a brand by id or slug (same handler resolves either) | ||
| List a brand's products |
| Event | Payload |
|---|---|
Subscribe from any plugin:
Beyond events, and expose hooks for synchronous, transactional extensibility:
The Module Link itself is also queryable by any other plugin.
Proprietary — see the workspace root LICENSE. Free during the current evaluation period; see the workspace's for the licensing/pricing model.
npm install @mgtalabs/medusa-brand1module.exports = defineConfig({2 // ...3 plugins: [4 {5 resolve: "@mgtalabs/medusa-brand",6 options: {7 enableSEO: true,8 enableFeaturedBrands: true,9 logoRequired: false,10 },11 },12 ],13})1POST /admin/products2{3 "title": "...",4 ...5 "additional_data": { "brand_id": "brand_123" }6}1// src/subscribers/brand-created.ts2import type { SubscriberArgs, SubscriberConfig } from "@medusajs/framework"3
4export default async function brandCreatedHandler({5 event: { data },6}: SubscriberArgs<{ id: string }>) {7 // ...8}9
10export const config: SubscriberConfig = { event: "brand.created" }1import { createBrandWorkflow } from "@mgtalabs/medusa-brand/workflows/create-brand"2
3createBrandWorkflow.hooks.brandCreated(async ({ brand }, { container }) => {4 // runs inside the same workflow transaction5})