TypeScript · Self-hosted · Composable

E-commerce for the
next generation

A type-safe, plugin-first e-commerce engine — with native B2B, point of sale, and a truly headless API. Built for developers who are tired of fighting legacy platforms.

Star on GitHub See the features →
291/291
Tests passing
12 plugins
First-party
100+ procedures
tRPC, 22 routers
100%
TypeScript strict

Legacy platforms were built for
a world that no longer exists.

PHP monoliths, no types, override hell. Redbird is what e-commerce infrastructure looks like when you start from scratch in 2026.

The old way

  • PHP 7, server-rendered templates, override spaghetti
  • No types — runtime surprises in production
  • God-object architecture, zero separation of concerns
  • Frontend coupled to backend rendering
  • Module conflicts, hook soup
  • Upgrade path: manual SQL patches and prayer
  • No official API — scrape your own data

The Redbird way

  • TypeScript strict, end-to-end type safety
  • 20+ typed hooks, plugin-first architecture
  • tRPC — auto-inferred client from server types
  • Any frontend: Next.js, Vite, React Native
  • Plugins register, not override
  • Drizzle ORM + versioned SQL migrations
  • Public API is the product

Everything a store needs.
Nothing you don't.

🧩

Hot-swappable modules

Reviews, loyalty, gift cards, suppliers and more ship as free bundled modules. Install, reconfigure or uninstall live from the marketplace — no rebuild, no server restart, no core overrides.

🔒

Type-safe end-to-end

tRPC v11 + Drizzle ORM. Your IDE knows every field of every query. No more guessing what an API returns.

🛒

Full commerce engine

Catalog, variants, cart, orders, stock reservation, promos, reviews, returns, staff RBAC, CMS — all built in.

🇪🇺

EU compliance built-in

VAT for all 27 countries (B2B reverse charge, VIES), automatic PDF invoices, Factur-X e-invoicing and FEC export — plus native GDPR data export and right-to-erasure.

🎨

Custom themes & slots

No-code theming from the backoffice — colours, fonts, radius and homepage sections, applied live. Or own your frontend entirely: npx create-redbird-storefront scaffolds a type-safe React storefront you deploy anywhere.

🖥️

Modern backoffice

Dashboard, orders, product management with variants + stock, customers, promotions, CMS pages — all in one SPA.

💳

Stripe & PayPal

Both providers ship first-party with webhook auto-discovery, HMAC verification, and dryRun mode for testing.

🗄️

Postgres + PGlite

Production runs on Postgres 16. Tests run in-memory with PGlite — no Docker required, full isolation guaranteed.

🔑

Auth & accounts

JWT customer auth, password reset flows, guest checkout, staff RBAC with owner/admin/warehouse/support roles.

🤝

B2B, natively

Quote requests, Net-30 payment terms, purchase orders, and tiered group pricing — the flows legacy platforms bolt on with third-party modules, built into the core here.

🧾

Point of sale

Register sessions, in-person sales, real orders sharing the same stock and catalog as online. One engine, online and in-store.

🌐

Truly headless

A pure, type-only API surface — @redbirdshop/api-types — with zero runtime coupling to the core. Three production reference storefronts (Next.js) run on it, proving it's not just a promise.

Zero boilerplate.
Maximum type safety.

Configure once, extend with plugins. Your entire store in a few lines of TypeScript.

redbird.config.ts
import { createRedbird } from '@redbird/core'
import { stripe } from '@redbird/plugin-stripe'
import { vatEu } from '@redbird/plugin-vat-eu'
import { emailResend } from '@redbird/plugin-email-resend'
import { shippingFlat } from '@redbird/plugin-shipping-flat'

export const redbird = createRedbird({
  databaseUrl: process.env.DATABASE_URL,
  defaultCurrency: 'EUR',
  storeName: 'My Store',
  plugins: [
    stripe({ secretKey: process.env.STRIPE_SECRET_KEY }),
    vatEu({ homeCountry: 'FR' }),         // auto-wires to checkout
    emailResend({ apiKey: process.env.RESEND_KEY }),
    shippingFlat({
      zones: [
        { name: 'Europe', countries: ['FR', 'DE', 'ES'], rateAmount: 499, freeOver: 5000 },
        { name: 'World',  countries: ['*'],              rateAmount: 1299 },
      ],
    }),
  ],
})

12 first-party plugins.
Infinite extensibility.

Every plugin is a typed package. Payments, email, shipping, taxes — swap any provider with one line. Full features ship as installable modules.

@redbird/plugin-stripe
PaymentIntents + HMAC webhooks
@redbird/plugin-paypal
Orders API v2 + REST signature
@redbird/plugin-vat-eu
27 countries, reverse charge, VIES
@redbird/plugin-shipping-flat
Zone-based flat rates + free threshold
@redbird/plugin-email-resend
Transactional emails + templates
@redbird/plugin-email-smtp
Generic SMTP provider
@redbird/plugin-reviews
Full module: router, admin page, config & storefront widget
@redbird/plugin-analytics
Plausible, GA4, or console hooks
@redbird/plugin-shipping-zones
Country/region zones, weight-tiered rates
@redbird/plugin-shipping-mondial-relay
Real carrier API — relay-point search
@redbird/plugin-tax-rules
Custom tax rules engine beyond EU VAT
@redbird/plugin-email-local
Local dev inbox — no provider needed

Built on tools you
already know and love.

TypeScript 5
Node.js 22
tRPC v11
Drizzle ORM
PostgreSQL 16
PGlite
Next.js 15
React 19
Vite 6
Tailwind v4
Vitest
Biome
pnpm workspaces
pdfkit
Stripe SDK
Zod

Designed to update
without breaking shops.

Legacy platform merchants stop updating to avoid breaking their customisations. Redbird is architected so that trap can never happen.

⚠️

The legacy platform trap: overriding core classes works until it doesn't. One minor update rewrites the override target and your store breaks — so merchants never update, and security patches pile up. Redbird makes this structurally impossible.

🖥️

Fully self-hosted

Each merchant runs their own Node.js process and PostgreSQL database. No central Redbird cloud, no shared infrastructure, no vendor lock-in. Your data stays on your server.

your stack · your data
📦

Semver strict

Minor and patch releases never break exported TypeScript types. The compiler enforces this — if @redbird/core ships a breaking change in a minor, your build fails before you even deploy.

semver · TypeScript enforced
🗄️

Additive-only migrations

Every schema migration uses ADD COLUMN IF NOT EXISTS. No DROP, no RENAME in minor releases. Your database is forward-compatible across every upgrade.

zero data loss · rollback safe
🔌

Extend via modules, not forks

The SDK is the stable extension surface. Modules add backend hooks — order.paid, review.approved — plus admin pages and storefront slots, all typed end-to-end. They survive major version bumps without touching core code.

hooks · slots · no core overrides

Ready to build
without limits?

Type-safe, plugin-first, self-hosted. Start building your store today.