Fashion and Apparel

The fashion ecommerce platform built for flexibility
Power your brand with full
creative and operational control
Medusa is the open source, headless fashion ecommerce solution that gives you everything you need to launch, scale, and differentiate. Build unique storefronts, manage complex product variants, and support both D2C and B2B from one platform.
Modern infrastructure for modern brands
A platform that matches fashion’s pace
Fashion brands move fast, and your tech stack should too. With Medusa, you get the tools to build unique storefronts, manage international operations, and simplify returns.
It’s ecommerce for fashion brands that want to stay ahead of trends, not behind their platform.
- Headless platform with design freedom
- Powerful product variants
- Built-in workflows for returns
- Multi-channel support for D2C and B2B
- Multi-region commerce out of the box
- Scale performance with Medusa Cloud
Global storefronts, custom experiences
Design without limits, launch in any market
Medusa’s headless and open architecture gives fashion brands total design control, while supporting multi-currency, multi-language, and multi-region operations. Launch new collections quickly with custom logic and unique experiences.

Built for fashion product logic
Handle sizes, colors, and style variants with ease
Medusa’s product modeling system is made for fashion. Easily manage complex variants like size, color, material, or style. Thousands of SKUs? Medusa keeps your storefronts fast and your product data organized, no matter how large your catalog grows.

Streamlined post-purchase experience
Manage returns and exchanges at scale
Medusa gives fashion brands the tools to automate post-purchase workflows. Build efficient systems for handling returns and exchanges that reduce operational overhead and improve the customer experience. Easily connect with support tools, logistics providers, and CRMs to make every return flow smoother.

One platform, many channels
Serve both consumers and wholesale buyers
Use Medusa’s flexible sales channels to sell D2C and B2B from a single system. Customize pricing, discounts, and catalogs to fit your buyer - without duplicating your setup.

Cloud platform
Stay stable during high-traffic launches
Medusa Cloud helps you scale with confidence during sales events and collection drops. Enjoy fast, reliable performance with infrastructure designed to handle fashion’s biggest moments.

Framework for customizations
Faster time to market with our framework
Our developer-first framework makes it easy to build custom integrations and features: from data models and workflows to UI extensions and APIs.
No hacks, no workarounds - just clean, scalable customization.
store.medusajs.com
create-order-in-erp.ts
sync-order-to-erp.ts
A workflow step performs a query or action in a system. Steps can receive inputs from previous steps and return data to be used in subsequent steps. You can resolve services in your steps, allowing you to build business logic involving Medusa’s core commerce modules, third-party systems, or custom systems.
To connect multiple steps together you create a Workflow. Creating a Workflow is like writing any other function. Behind the scenes Medusa generates a representation of your workflow that enables automatic retries of steps if they fail.
If step retries don't succeed, Medusa will rollback previous steps. A rollback will call a step's compensation method, ensuring your data is kept consistent across systems.
You can trigger your workflows anywhere in Medusa. Use your workflows in Subscribers to start them in response to an event. Start them in response to requests with API Routes. Or have them run on a defined schedule with Scheduled Jobs.
src > workflows > steps > create-order-in-erp.ts
1
A workflow step performs a query or action in a system. Steps can receive inputs from previous steps and return data to be used in subsequent steps. You can resolve services in your steps, allowing you to build business logic involving Medusa’s core commerce modules, third-party systems, or custom systems.
create-order-in-erp.ts
sync-order-to-erp.ts
src > workflows > steps > create-order-in-erp.ts
123456789101112import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"export const createOrderInERP = createStep("create-order-in-erp"async (order: StepInput, { container }) => {const erpService = container.resolve("erp")const createdOrder = await erpService.createOrder(order)return new StepResponse(createdOrder)})
To connect multiple steps together you create a Workflow. Creating a Workflow is like writing any other function. Behind the scenes Medusa generates a representation of your workflow that enables automatic retries of steps if they fail.
create-order-in-erp.ts
sync-order-to-erp.ts
src > workflows > sync-order-to-erp.ts
1234567891011121314151617181920import { createWorkflow, WorkflowResponse } from "@medusajs/framework/workflows-sdk"import { createOrderInERP, transformOrder } from "./steps"export const syncOrderToERP = createWorkflow("sync-order-to-erp",(input: WorkflowInput, { container }) => {const medusaOrder = retrieveOrder(input.order_id)const createdOrder = when({ medusaOrder }, ({ medusaOrder }) => {return medusaOrder.status === "completed"}).then(() => {const preparedOrder = transformOrder(medusaOrder)return createOrderInERP(preparedOrder)})return new WorkflowResponse(createdOrder)})
If step retries don't succeed, Medusa will rollback previous steps. A rollback will call a step's compensation method, ensuring your data is kept consistent across systems.
create-order-in-erp.ts
sync-order-to-erp.ts
src > workflows > accept-quote.ts
123456789101112131415161718import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"export const createOrderInERP = createStep("create-order-in-erp"async (order: StepInput, { container }) => {const erpService = container.resolve("erp")const createdOrder = await erpService.createOrder(order)return new StepResponse(createdOrder, createdOrder)},// In the face of errors, we roll back and delete the orderasync (createdOrder, { container }) => {const erpService = container.resolve("erp")await erpService.deleteOrder(createdOrder)})
You can trigger your workflows anywhere in Medusa. Use your workflows in Subscribers to start them in response to an event. Start them in response to requests with API Routes. Or have them run on a defined schedule with Scheduled Jobs.
create-order-in-erp.ts
sync-order-to-erp.ts
src > subscribers > sync-order-to-erp.ts
123456789101112131415161718192021222324import {type SubscriberConfig,} from "@medusajs/framework"import syncOrderToErp from "../workflows/sync-order-to-erp"export default async function handleOrderPlaced({event: { data },container,}) {const orderService = container.resolve("order")const order = await orderService.retrieve(id)await syncOrderToErp(container).run({input: {order},})}export const config: SubscriberConfig = {event: "order.placed",}
Let’s talk
Ready to elevate your fashion brand?
Medusa is the fashion ecommerce platform that gives you control, speed, and flexibility. Book a demo to see how it can power your next stage of growth.
