Custom Module

A module is a package of reusable functionalities. It can be integrated into your Medusa application without affecting the overall system. You can create a module as part of a plugin.

Learn more about modules in this documentation.

To create a module:

1. Create a Data Model

A data model represents a table in the database. You create a data model in a TypeScript or JavaScript file under the models directory of a module.

For example, create the file src/modules/blog/models/post.ts with the following content:

import { model } from "@medusajs/framework/utils"

const Post = model.define("post", {
  id: model.id().primaryKey(),
  title: model.text(),
})

export default Post

2. Create a Service

A module must define a service. A service is a TypeScript or JavaScript class holding methods related to a business logic or commerce functionality.

For example, create the file src/modules/blog/service.ts with the following content:

3. Export Module Definition

A module must have an index.ts file in its root directory that exports its definition. The definition specifies the main service of the module.

For example, create the file src/modules/blog/index.ts with the following content:

4. Add Module to Medusa's Configurations

To start using the module, add it to medusa-config.ts:

5. Generate and Run Migrations

To generate migrations for your module, run the following command:

Then, to run migrations, run the following command:

Use Module

You can use the module in customizations within the Medusa application, such as workflows and API routes.

For example, to use the module in an API route:

Last updated