{"id":13769696,"url":"https://adrien2p.github.io/medusa-extender/","last_synced_at":"2025-05-11T02:33:11.267Z","repository":{"id":37761650,"uuid":"451061211","full_name":"adrien2p/medusa-extender","owner":"adrien2p","description":":syringe: Medusa on steroid, take your medusa project to the next level with some badass features :rocket:","archived":false,"fork":false,"pushed_at":"2024-01-10T10:20:05.000Z","size":35173,"stargazers_count":331,"open_issues_count":5,"forks_count":40,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-05-04T12:08:38.748Z","etag":null,"topics":["architecture","cli","dynamic-module","e-commerce","ecommerce","extension","headless","javascript","medusa","medusa-plugin","medusa-plugins","medusajs","monitoring","multi-tenancy","nodejs","open-source","prometheus","typeorm","typescript"],"latest_commit_sha":null,"homepage":"https://adrien2p.github.io/medusa-extender/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adrien2p.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":["adrien2p"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2022-01-23T09:46:45.000Z","updated_at":"2025-03-31T21:26:22.000Z","dependencies_parsed_at":"2024-01-13T19:50:21.864Z","dependency_job_id":null,"html_url":"https://github.com/adrien2p/medusa-extender","commit_stats":{"total_commits":441,"total_committers":8,"mean_commits":55.125,"dds":0.03628117913832196,"last_synced_commit":"36fb7dd9a0cb7fd9355b4e8772c5580423dd096d"},"previous_names":[],"tags_count":69,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrien2p%2Fmedusa-extender","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrien2p%2Fmedusa-extender/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrien2p%2Fmedusa-extender/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrien2p%2Fmedusa-extender/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adrien2p","download_url":"https://codeload.github.com/adrien2p/medusa-extender/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253507193,"owners_count":21919169,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["architecture","cli","dynamic-module","e-commerce","ecommerce","extension","headless","javascript","medusa","medusa-plugin","medusa-plugins","medusajs","monitoring","multi-tenancy","nodejs","open-source","prometheus","typeorm","typescript"],"created_at":"2024-08-03T17:00:30.585Z","updated_at":"2025-05-11T02:33:10.782Z","avatar_url":"https://github.com/adrien2p.png","language":"TypeScript","funding_links":["https://github.com/sponsors/adrien2p"],"categories":["Showcase"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/adrien2p/medusa-extender/blob/assets/assets/logo.png?raw=true\" alt=\"Medusa-extender logo\" width=\"500\" height=\"auto\" /\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003emedusa-extender\u003c/h1\u003e\n\n\u003ch4 align=\"center\"\u003e\n    \u003ca href=\"https://adrien2p.github.io/medusa-extender/#/\" alt=\"Full documentation\"\u003eFull documentation website\u003c/a\u003e\n\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003e\n\t\u003ca href=\"https://npmcharts.com/compare/medusa-extender?minimal=true\"\u003e\u003cimg alt=\"Downloads per month\" src=\"https://img.shields.io/npm/dm/medusa-extender.svg\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://www.npmjs.com/package/medusa-extender\"\u003e\u003cimg alt=\"NPM Version\" src=\"https://img.shields.io/npm/v/medusa-extender.svg\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/adrien2p/medusa-extender/graphs/contributors\"\u003e\u003cimg alt=\"Contributors\" src=\"https://img.shields.io/github/contributors/adrien2p/medusa-extender.svg\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/adrien2p/awesome-medusajs\"\u003e\u003cimg alt=\"Awesome medusajs\" src=\"https://awesome.re/badge.svg\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://adrien2p.github.io/medusa-extender/#/\"\u003e\u003cimg alt=\"Documentation\" src=\"https://img.shields.io/badge/documentation-online-important\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://twitter.com/intent/tweet?text=Check%20this%20out!%20The%20new%20medusa%20headless%20e-commerce%20extender\u0026url=https://github.com/adrien2p/medusa-extender\"\u003e\u003cimg alt=\"Twitter\" src=\"https://badgen.net/badge/icon/twitter?icon=twitter\u0026label=Share%20it%20on\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://discord.gg/xpCwq3Kfn8\"\u003e\u003cimg alt=\"Discord\" src=\"https://img.shields.io/badge/chat-on%20discord-7289DA.svg\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://www.npmjs.com/package/medusa-extender\"\u003e\u003cimg alt=\"Npm download\" src=\"https://img.shields.io/npm/dt/medusa-extender\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/adrien2p/medusa-extender/commits/main\"\u003e\u003cimg alt=\"Activity\" src=\"https://img.shields.io/github/commit-activity/m/adrien2p/medusa-extender?style=flat\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/adrien2p/medusa-extender/issues\"\u003e\u003cimg alt=\"Issues\" src=\"https://img.shields.io/github/issues/adrien2p/medusa-extender?style=flat\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/adrien2p/medusa-extender/blob/main/LICENSE\"\u003e\u003cimg alt=\"Licence\" src=\"https://img.shields.io/github/license/adrien2p/medusa-extender?style=flat\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/adrien2p/medusa-extender/blob/main/CONTRIBUTING.md\"\u003e\u003cimg alt=\"Contributing\" src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/adrien2p/medusa-extender/actions/workflows/action.yml\"\u003e\u003cimg alt=\"Test pipeline status\" src=\"https://github.com/adrien2p/medusa-extender/actions/workflows/action.yml/badge.svg\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/adrien2p/medusa-extender/actions/workflows/pages/pages-build-deployment\"\u003e\u003cimg alt=\"Page build deployment status\" src=\"https://github.com/adrien2p/medusa-extender/actions/workflows/pages/pages-build-deployment/badge.svg\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://github.com/adrien2p/medusa-extender/actions/workflows/codeql-analysis.yml\"\u003e\u003cimg alt=\"CodeQL security analysis status\" src=\"https://github.com/adrien2p/medusa-extender/actions/workflows/codeql-analysis.yml/badge.svg\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://www.codacy.com/gh/adrien2p/medusa-extender/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=adrien2p/medusa-extender\u0026amp;utm_campaign=Badge_Grade\"\u003e\u003cimg alt=\"Codacy code quality\" src=\"https://app.codacy.com/project/badge/Grade/379a920025324868a7445d39ae586c39\" height=\"20\"/\u003e\u003c/a\u003e\n\t\u003ca href=\"https://www.producthunt.com/posts/medusa-extender?utm_source=badge-featured\u0026utm_medium=badge\u0026utm_souce=badge-medusa-extender\"\u003e\u003cimg alt=\"Product hunt\" src=\"https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=333482\u0026theme=dark\" height=\"20\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/sponsors/adrien2p\"\u003e\u003cimg alt=\"sponsor\" src=\"https://img.shields.io/static/v1?label=Sponsor\u0026message=%E2%9D%A4\u0026logo=GitHub\u0026color=%23fe8e86\" height=\"20\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eMedusa on steroid, take your medusa project to the next level with some badass features :rocket:\u003c/b\u003e\u003c/br\u003e\n  \u003csub\u003eThe extender provides an out-of-the-box application architecture which allows developers and teams to create highly testable, scalable, loosely coupled, and easily maintainable applications.\nIn also increase medusa extensibility and customisation for special use cases. It comes with handy\ndecorators approach to increase the DX and full typings support for easier development. It is a complement to medusa but not a replacement :rocket:\u003csub\u003e\n\u003c/p\u003e\n\t\n\u003e **[Warning](https://www.google.com)**: This repository is deprecated since medusa \u003e1.8, as extensions can now be made using only Medusa Core. See [this guide](https://medusajs.com/blog/extending-medusa-usecase-marketplace/) for more info.\n\n\u003cbr /\u003e\n\n\n[![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/cloudy.png)](#table-of-contents)\n\n## Table of Contents\n\n* [Introduction](#introduction)\n* [Getting started :rocket:](#getting-started-rocket)\n    * [Existing medusa project](#existing-medusa-project)\n    * [From server starter](#from-server-starter)\n* [Application Architecture](#application-architecture)\n* [CLI `medex`](#cli-medex)\n    * [Commands references](https://adrien2p.github.io/medusa-extender/#/?id=commands-references)\n        * [Command `generate` reference](https://adrien2p.github.io/medusa-extender/#/?id=command-generate-reference)\n            * [Usage](https://adrien2p.github.io/medusa-extender/#/?id=usage)\n            * [Options](https://adrien2p.github.io/medusa-extender/#/?id=options)\n            * [Examples](https://adrien2p.github.io/medusa-extender/#/?id=examples)\n        * [Command `migrate` reference](https://adrien2p.github.io/medusa-extender/#/?id=command-migrate-reference)\n            * [Usage](https://adrien2p.github.io/medusa-extender/#/?id=usage-1)\n            * [Options](https://adrien2p.github.io/medusa-extender/#/?id=options-1)\n* [Full code API :mag:](https://adrien2p.github.io/medusa-extender/#/?id=full-code-api-mag)\n* [API documentation :bulb:](https://adrien2p.github.io/medusa-extender/#/?id=api-documentation-bulb)\n    * [Decorators](https://adrien2p.github.io/medusa-extender/#/?id=decorators)\n        * [@Entity](https://adrien2p.github.io/medusa-extender/#/?id=entity)\n        * [@Repository](https://adrien2p.github.io/medusa-extender/#/?id=repository)\n        * [@Migration](https://adrien2p.github.io/medusa-extender/#/?id=migration)\n        * [@Service](https://adrien2p.github.io/medusa-extender/#/?id=service)\n        * [@Middleware](https://adrien2p.github.io/medusa-extender/#/?id=middleware)\n        * [@Router](https://adrien2p.github.io/medusa-extender/#/?id=router)\n        * [@Validator](https://adrien2p.github.io/medusa-extender/#/?id=validator)\n        * [@Subscriber](https://adrien2p.github.io/medusa-extender/#/?id=subscriber)\n        * [Providers](https://adrien2p.github.io/medusa-extender/#/?id=providers)\n\t\t\t* [@PaymentProvider](https://adrien2p.github.io/medusa-extender/#/?id=paymentprovider)\n\t\t\t* [@NotificationProvider](https://adrien2p.github.io/medusa-extender/#/?id=notificationprovider)\n\t\t\t* [@FulfillmentProvider](https://adrien2p.github.io/medusa-extender/#/?id=fulfillmentprovider)\n\t\t\t* [@TaxProvider](https://adrien2p.github.io/medusa-extender/#/?id=taxprovider)\n        * [@Module](https://adrien2p.github.io/medusa-extender/#/?id=module)\n        * [@Module (Dynamic module)](https://adrien2p.github.io/medusa-extender/#/?id=module-dynamic-module)\n        * [@OnMedusaEntityEvent](https://adrien2p.github.io/medusa-extender/#/?id=onmedusaentityevent)\n    * [Utilities :wrench:](https://adrien2p.github.io/medusa-extender/#/?id=utilities-wrench)\n        * [attachOrReplaceEntitySubscriber](https://adrien2p.github.io/medusa-extender/#/?id=attachorreplaceentitysubscriber)\n\t\t* [repositoryMixin (@deprecated)](https://adrien2p.github.io/medusa-extender/#/?id=repositorymixin-deprecated)\n\t\t* [Omit (@deprecated)](https://adrien2p.github.io/medusa-extender/#/?id=omit-deprecated)\n* [Starters](https://adrien2p.github.io/medusa-extender/#/?id=starters)\n* [Internal modules (Optional)](https://adrien2p.github.io/medusa-extender/#/?id=internal-modules-optional)\n    * [Monitoring](https://adrien2p.github.io/medusa-extender/#/?id=monitoring)\n    * [Multi-tenancy](https://adrien2p.github.io/medusa-extender/#/?id=multi-tenancy)\n      * [Cli migrate command](https://adrien2p.github.io/medusa-extender/#/?id=cli-migrate-command)\n* [Resources](#resources)\n    * [Marketplace tutorial](#marketplace-tutorial)\n* [troubleshooting](https://adrien2p.github.io/medusa-extender/#/?id=troubleshooting)\n* [Discussions](#discussions)\n* [Like my work? :heartbeat:](#like-my-work-heartbeat)\n* [Contribute](#contribute)\n\n[![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/cloudy.png)](#introduction)\n\n# Introduction\n\n[Medusa](https://github.com/medusajs/medusa) is an open source headless commerce platform that allows you to create your own store in a matter of minutes. Part of what makes Medusa a good choice for your ecommerce store is its extensibility. Now, it is also possible to create multi-vendor marketplaces using Medusa.\n\n:point_right: __And here is why I've done that package for medusa__\n\n\u003e \"I've been looking for an e-commerce solution that could provide me with some core features while being fully customisable... After some research, where I found that none of the present solutions could provide what I needed, I chose Medusa as it provided me with many of the needed features while being easy to extend. I ended up loving the community atmosphere, especially the proximity with the team, and have been helping those in the community looking for a similar fully-customisable solution by sharing a part of my private project. This is how the medusa-extender was born.\" — Adrien de Peretti\n\n\n[![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/cloudy.png)](#getting-started-rocket)\n\n# Getting started :rocket:\n\nDepending on your situation, pick the right getting started section.\n\n## Existing medusa project\n\nIn that case, you must already have scaffold a new medusa store project. If that's not the case you can [follow the tutorial here](https://docs.medusajs.com/quickstart/quick-start).\n\nRun the following command in your terminal\n\n```bash\nnpm install medusa-extender\n./node_modules/.bin/medex init\n```\n\nThat's it, you are now ready to run your server :rocket:\n\nNote: The default port is `9000`, if you want to run the server on a custom port update `medusa-config.js` as follows:\n\n```\nmodule.exports = {\n  /* ... */\n  serverConfig:{\n    port: \u003cPORT_NUMBER\u003e\n  }\n  /* ... */\n};\n```\n\n## From server starter\n\nYou can directly clone the `starters/server` to get started quickly.\n\nFirst, update your `medusa-config.js` accordingly to your needs.\n\nThen, follow the next command to be ready in minutes\n\n```bash\nnpx degit github:adrien2p/medusa-extender/starters/server#main server\ncd server\nnpm i\nnpm run build\nnpm run start\n```\n\nThat's it, your server is now up and running :rocket:\n\n[![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/cloudy.png)](#cli-medex)\n\n# CLI `medex`\n\nTo install the cli globally instead of using the local one, you can run the\nfollowing command\n\n```bash\nnpm i -g medusa-extender\n```\n\nTo make things easier for you, the project comes with a CLI that allow\nyou to generate any component with minimum code implementation and also\nto be able to run the migrations and show the list of applied and to be applied migrations.\n\nTo see more about the usage and references, [click here to see the documentation](https://adrien2p.github.io/medusa-extender/#/?id=cli-medex)\n\n# Application Architecture\n\nUsing this package help you organise your code in a module approach.\nThat means that you can go for a modular architecture and decoupled\nyour code depending on your domains.\n\nHere is the proposed folder structure that you can add to your medusa project\n\n```text\n.\n├── ...\n├── src                                 # Here are located all the files that make your application\n│   ├── modules                         # Where you can put all your modules using the medusa-extender\n|       ├── Module1\n|           ├── module1.entity.ts\n|           ├── module1.migration.ts\n|           ├── module1.service.ts\n|           ├── module1.repository.ts\n|           ├── module1.middleware.ts\n|           ├── module1.module.ts       # This is where the above components are referenced\n|           ├── ...\n|       ├── Module2\n|           ├── ...\n|       ├── Module3\n|           ├── ...\n│   ├── main.ts                         # this is where the magic happen and your modules will be passed to the load method\n└── ...\n```\n\n[![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/cloudy.png)](#discussions)\n\n# Discussions\n\nIf you are interesting to participate in any discussions you can follow that [links](https://github.com/adrien2p/medusa-extender/discussions)\n\n[![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/cloudy.png)](#resources)\n\n# Resources\n\nHere are some resources that are using the medusa-extender, more of them\nwill come in time :rocket:.\n\n## Marketplace tutorial\n\nHere is a tutorial repository that will be followed by a series of article to guide you\nthrough the process of creating your marketplace using `@medusajs` and the `medusa-extender`.\n\nHere is the link to the [Marketplace tutorial repo](https://github.com/shahednasser/medusa-marketplace-tutorial)\nand Here is the link to the [Marketplace tutorial plugin](https://github.com/shahednasser/medusa-marketplace)\n\nHere is the first tutorial using the medusa-extender package, [Open source ecommerce platform for multi-vendor marketplaces](https://dev.to/medusajs/create-an-open-source-commerce-marketplace-part-1-3m5k)\n\n[![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/cloudy.png)](#like-my-work-heartbeat)\n\n# Like my work? :heartbeat:\n\nThis project needs a :star: from you.\nIf you found the package helpful consider becoming a sponsor [here](https://github.com/sponsors/adrien2p) :rocket:\n\n[![-----------------------------------------------------](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/cloudy.png)](#contribute)\n\n# Contribute\n\nContributions are welcome! You can look at the contribution [guidelines](./CONTRIBUTING.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/adrien2p.github.io%2Fmedusa-extender%2F","html_url":"https://awesome.ecosyste.ms/projects/adrien2p.github.io%2Fmedusa-extender%2F","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/adrien2p.github.io%2Fmedusa-extender%2F/lists"}