open source · MIT · v0.3.0 on npm

The open-source e-commerce platform for the TypeScript era.

Storefront, admin, checkout and plugins on TanStack Start, React 19 and Supabase — not on 2008-era PHP. Your store is a thin assembly of ~8 files; the core ships as versioned npm packages, so pnpm update delivers new pages and fixes to stores already in production.

View on GitHub

No signup. No license key. MIT — your checkout, your data, your infra.

The core promise

Core updates that actually arrive

Every open-source cart makes you fork the codebase — and every fork starts drifting the day you deploy it. SimplyCMS mounts canonical pages straight from node_modules via TanStack Router virtual routes, so the framework of your store lives in versioned packages, not in your repo. Read how it works →

upgrade-store.shthe fork way
- git merge upstream/main- # CONFLICT in 214 template files- # re-apply your customisations by hand- # …or stay on the old version forever # every store, every release

“Do not use git merge…”— a real storefront upgrade guide from a leading JS commerce framework. The next major dropped the update channel entirely.

upgrade-store.shthe SimplyCMS way
+ pnpm update "@simplycms/*"+ pnpm build # new canonical pages mount from node_modules # host files in your repo: ~8 — `simplycms update` # migrates them on the rare release that needs it

Your repo never merges upstream.— the skeleton-update problem the industry left open, solved as the founding requirement of this architecture.

How it works

A real store in three moves

01

Scaffold the thin host

One command creates a working store: SSR storefront, admin panel, cart, checkout, default theme. The repo you own stays tiny.

 pnpm create simplycms-store
my-store/
├─ simplycms.config.ts # the source of truth
├─ routes.ts # mounts core route packages
├─ src/routes/my/ # your own pages
├─ supabase/migrations/
└─ themes/ · plugins/
02

Make it yours

Install themes and plugins as npm packages with simplycms add; switch and configure them from the admin — no rebuild. Add custom pages in src/routes/my/.

 simplycms add acme-theme --theme
 simplycms add acme-plugin-faq
 simplycms db:diff --write # reviewed SQL
03

Stay current, effortlessly

The core evolves as one synchronized release train. Updating is a dependency bump — new pages, fixes and SEO improvements included.

 pnpm update "@simplycms/*"
 pnpm simplycms doctor # config ↔ DB ↔ build sanity
 pnpm simplycms update # migrates the ~8 host files

Batteries included

A full store, engineered — not assembled from 40 plugins

Everything a production shop needs ships in the core packages and is tested as one system — including a packaging pilot that builds a real store from published tarballs before every release.

SEO-first SSR storefront

Canonical pages — catalog, product, cart, checkout — stream full HTML for crawlers and AI agents. sitemap.xml and robots.txt are generated by the server entry, not an afterthought plugin.

Admin panel included

Products, orders, reviews, users, discounts, themes and plugins under /admin — a client-side SPA guarded by server middleware. Owners activate and configure; nothing rebuilds.

Plugin SDK with a trust boundary

Plugins use ports from @simplycms/plugin-sdk — never a raw database client. Own tables live under a plg_* namespace; migrations ship inside the package and land as reviewed SQL.

Typed database pipeline

The schema — 40 tables and 93 row-level-security policies — is Drizzle TypeScript. simplycms db:diff emits SQL migrations for human review; generated types keep every query compile-checked.

Themes without lock-in

A theme is tokens + brand components — it never owns pages, so core updates can’t break it. Install from npm for upstream fixes, or --copy it into your repo and own every line.

i18n from day one

1,100+ message keys in mirrored uk/en catalogs, typed against a closed union. Themes and plugins carry their own catalogs — coverage is proven by AST-scanning tests, not promises.

The stack

Built on the stack you’d choose anyway

No legacy PHP, no jQuery admin, no template engine from 2008. One language across storefront, server functions, database schema and plugins — strict TypeScript, end to end.

Compare

The receipt, itemized

OpenCart pioneered the model we admire — install, extend, update. WooCommerce bolted a shop onto a blog engine. Shopify rents you a great one. SimplyCMS is that OpenCart promise, rebuilt on a modern stack you own.

SimplyCMSOpenCartWooCommerceShopify
Built as a store first✓ commerce-native core✓ but 2010s architecture✗ plugin on a blog engine✓ SaaS
Language & renderingTypeScript · React 19 SSRPHP · Twig templatesPHP · WP themesLiquid · closed runtime
Your store repothin assembly, ~8 filesfull source you patchWP install + plugin souprented, no repo
Core updatespnpm update — pages arrivemanual, mind the OCMODspray plugins surviveautomatic (their roadmap)
Extensionstyped npm packages, reviewed SQLzip uploads, file patches60k plugins, quality lotteryapp store + revenue share
Own your data & infrayour Postgres + RLS, self-hostyours (your hosting)yours (your hosting)theirs — export CSVs
Price of the platformMIT, $0 foreverfree + paid modulesfree + hosting + plugins$/mo + per-transaction fees

Honest footnote: Shopify is excellent if renting works for you. SimplyCMS is for teams that want the OpenCart ownership model on a modern, typed stack.

Ecosystem

Extensions with a contract, not a wild west

Everything installable is an npm package with declared core compatibility. Plugins live behind a ports-only SDK boundary — enforced by lint rules and tests, not by trust.

Write a plugin

Scaffold on the Plugin SDK: admin pages under /admin/<slug>, storefront slots, Zod-validated settings, your own plg_* tables with migrations and an i18n catalog — all inside one npm package.

pnpm simplycms create plugin my-plugin
Plugin mechanism docs

Design a theme

A theme is design tokens plus brand components — Header, Footer, hero sections. It never owns pages, so a core update can’t break it. Ship it as npm or let stores copy it in and own it.

pnpm simplycms create theme aurora
Theme author guide

Publish under your scope

Name it simplycms-plugin-* or simplycms-theme-*, publish to npm under your own scope, then open a PR to the marketplace index — a JSON catalog that points at packages, never stores code.

npm publish --access public
Marketplace contract

Roadmap

Five phases shipped. One to go.

The platform is built in public — every phase has a written spec, an execution plan and a verifiable definition of done. Follow the roadmap on GitHub →

Foundation

Routes and pages moved into core packages; theme contract v2

shipped · Jul 2026

Packaging pilot

Store built from real tarballs; production server preset

shipped · Aug 2026

Scaffolder + CLI

create-simplycms-store, owner bootstrap, simplycms CLI

shipped · Aug 2026

Plugin SDK

definePlugin, ports, trust boundary, reference FAQ plugin

shipped · Aug 2026

Themes as packages

npm or copy-in install, admin sync, marketplace contract

shipped · Aug 2026

Your next store is one command away.

Scaffold it, run it, own it. If it saves you a fork — leave a star so other builders find it.

Star on GitHubRead the docs