I’m Badii Boutar, and I built The Merchant Engine, so this is not a neutral comparison. What I can do is quote each project’s own docs instead of my memory of them, and tell you where the other three are ahead. I read every page quoted here on 29 October 2026.
Two things to know about mine before you read further. Stripe is its only card provider so far, and it has no plugin system: you change it by editing the source. Medusa, Saleor and Vendure have a plugin system and more payment options. If either is a deal breaker for you, the rest of this page still helps you choose between them.
What each one says it is
Medusa’s README calls it “Building blocks for digital commerce.” In its own words, “A Medusa application is made up of a Node.js server and a Vite admin dashboard.” A Next.js starter storefront is optional.
Saleor’s repository describes it as a “GraphQL native, API-only platform for scalable composable commerce.” It is written in Python. The dashboard lives in a separate repository, and so does the Next.js storefront.
Vendure’s repository says “Open-source headless commerce platform built with TypeScript, NestJS, React, and GraphQL”, and its tagline is “The ecommerce platform for complex B2B.”
The Merchant Engine is a NestJS and Prisma API on PostgreSQL and Redis, with a REST API instead of GraphQL, an Angular admin and a server-rendered storefront built with Analog.js. It comes with an installer that puts all three on your server. What you get lists every part.
So Vendure and mine share NestJS. Medusa, Vendure and mine are TypeScript. Saleor is the only one in Python, and mine is the only one without GraphQL.
Getting it running
Medusa starts with npx create-medusa-app@latest my-medusa-store. The install page asks for Node.js v22.22.0 or later and PostgreSQL “installed and running” before you begin.
Vendure starts with npx @vendure/create my-shop. Its install page says “If you have Docker Desktop installed, it will create and configure a Postgres database for you. If not, it will use SQLite.” It then asks whether you want a storefront, with TanStack Start and Next.js as the choices. So you can try Vendure without setting up a database first.
Saleor’s Docker Compose page is seven commands: clone the saleor-platform repository, pull the images, run the migrations, load sample data, create a superuser, then docker compose up. It asks you to give Docker “at least 5 GB of memory”.
Mine is ./setup.sh --local on a laptop with Docker Desktop, or .\setup.ps1 on Windows. A first install took seven minutes on my Windows laptop. On a server, the same installer also checks your S3 bucket, Resend domain and Turnstile key live, gets the TLS certificates and creates the owner account. If it fails halfway, you run it again and it picks up where it stopped. The steps are on Install locally.
The other three give you a project. You turn it into a store and deploy it yourself. Mine puts a finished store on the server. That is less flexible, but there are fewer steps before the shop is live.
License and who pays
Medusa’s README says “The core is licensed under the MIT License.” Its Enterprise Edition materials, which include role-based access control, “require a commercial agreement with MedusaJS, Inc.”
Saleor’s core is under the BSD-3-Clause license. The storefront is not. It uses FSL-1.1-ALv2, and the storefront README says “The license converts to Apache 2.0 after two years.”
Vendure moved from MIT to GPLv3. Its licensing page says it has been “GPLv3 since v3.0, released in July 2024.” Running your own store is fine under that license, because, as the page puts it, “Shoppers use it over the network and receive no copy.” If you would rather not have the GPL conditions on your changes, “Every paid plan includes a commercial licence for Vendure Framework.”
Mine is MIT, all of it. There is no paid edition, no enterprise folder and no license key. That cuts both ways, though. A company with paid plans can afford to keep a project going for years, and I’m one person.
Cash on delivery
A lot of my client work is for shops in North Africa and the Gulf, and those shops take cash at the door. So this is the first thing I check on any platform.
Medusa ships a system payment provider. Its payment provider page says “It acts similarly to a cash-on-delivery (COD) payment method.” Stripe is the one provider on its official list.
Vendure has no cash on delivery method out of the box. Its payment guide describes how you would write one: “if providing a ‘payment on delivery’ option, the authorization step would occur on checkout”.
For Saleor, there is a GitHub discussion from April 2021 asking for cash on delivery, so that an order can be created with the payment status NOT_CHARGED. A maintainer answered “Such a feature will for sure land in Saleor, but not 3.0.” The answers in that thread are workarounds people wrote as custom plugins.
In mine, cash on delivery is a payment method the store owner turns on in the admin, with its name translated for each language. Manual bank transfer and gift cards work the same way. Card payments are where mine is behind all three: Stripe is the only provider so far, switched on in the admin with your keys, and there is a recipe for adding another.
Languages and Arabic
Medusa is ahead of me in one place here. Its admin language page says “Right-to-left (RTL) language support is available from Medusa Admin v2.11.0,” and Arabic is on its list of community translations. My admin is in English only. It has an Arabic tab on every text field that types right to left, but the dashboard itself is not translated or mirrored.
Medusa also has a Translation Module for store content. It needs Medusa v2.12.3 or later and, for now, is turned on with a feature flag.
Saleor and Vendure both support content in several languages through their APIs. With both, the storefront that shows it, right to left or not, is the one you build.
Mine ships English, French and Arabic. The storefront switches to right to left for Arabic, and the invoices and emails are in Arabic too. Money is formatted with the currency’s own symbol, separators and number of decimals, which is three for some Gulf and North African currencies. This is the reason I built it, so it is the part I would test hardest if I were you.
Extending it
All three of the others are built to be extended without touching their core. Medusa has modules, Saleor has apps and webhooks, and Vendure has plugins. You install someone else’s work, or write your own, and you keep upgrading the core underneath.
Mine has none of that. You fork it and change the code. The docs have recipes for the common changes, like adding a module or adding a page to the storefront, and Release your fork explains how to stay on top of new versions. That suits a developer or a small agency running its own client stores. It does not suit you if you want to buy features from a marketplace.
How active each one is
On 29 October 2026 the latest releases were Medusa v2.22.1 and Vendure v3.8.1, both from 23 October, and Saleor 3.23.45 from 28 October. All three ship often, and all three have been around for years. Mine reached 1.0.0 on 27 October 2026, two days before I wrote this.
Which one I would pick
These are my opinions, with the reason for each.
- Medusa, if you need card payments with Stripe now, your developers write TypeScript, and you want to assemble the store from its modules.
- Saleor, if your developers prefer Python, you want GraphQL, and you are happy to build on its Next.js storefront or write your own.
- Vendure, if you sell B2B with complex pricing or many channels, you like NestJS, and you are fine with GPLv3 or with paying for the commercial licence.
- The Merchant Engine, if your shops sell in Arabic next to French or English, take cash on delivery and need to be found on Google, and you want the whole store on your own server from one install. And only if you are fine with a young project run by one person.
Each one has its own page with the sources: Medusa, Saleor and Vendure. If I got something wrong about any of them, open an issue and I’ll fix it.