Plugin-first, TypeScript end to end: a Node.js, NestJS, and GraphQL backend with a React and TanStack admin dashboard.
Vendure is an open-source headless commerce platform for building catalog, order, pricing, promotion, customer, and channel workflows on a customizable TypeScript backend.
- Plugin-first architecture: Extend the platform with plugins, custom entities, service overrides, and API extensions without forking Vendure core.
- One backend, every channel: Serve storefronts, marketplaces, B2B flows, and operations tooling from the same GraphQL API.
- TypeScript end to end: Build on Node.js, NestJS, GraphQL, and the React and TanStack based Vendure Dashboard.
- Commerce primitives included: Products, variants, orders, customers, channels, tax, shipping, payments, promotions, stock, and assets are available out of the box.
This repository contains the project used as the basis for the public shared Vendure demo. It follows the Vendure 3.7 CLI project layout and includes the server, worker, Dashboard, static assets, email templates, seed data, and reset workflow needed to keep the demo instance fresh.
The reset flow is handled by src/prepare-server.ts and src/reset-server.ts. The npm run prepare:demo script populates the server with Vendure's populate helper, caches the pristine generated data, and restores that cached data when the demo needs to be reset.
Install dependencies first:
npm ciStart the server, worker, and Dashboard together:
npm run devnpm run dev runs npm run prepare:demo before starting Vendure, so the database and demo assets are prepared automatically.
The demo tenant modes are also available:
npm run dev:readonly
npm run dev:publicBuild and run the compiled project:
npm run build
npm run startnpm run start runs npm run prepare:demo:prod before starting the compiled server, worker, and Dashboard.
The project exposes the Vendure lifecycle commands through npm scripts:
npm run dev:server
npm run dev:worker
npm run dev:dashboard
npm run build:server
npm run build:worker
npm run build:dashboard
npm run start:server
npm run start:worker
npm run doctorRun npm run doctor -- --format json when changing project setup or dependencies.
Build the demo image:
docker build -t vendure-demo .Run the container:
docker run --name vendure -p 3000:3000 -d vendure-demoThe container runs npm run start, which prepares the demo data before starting Vendure.