TypeScript headless commerce

Commerce you own.
Running in one prompt.

Porulle is a REST-only, security-hardened headless commerce framework. It owns the hard parts — orders, payments, refunds, inventory, price-at-sale — in your database. Scaffold a runnable store in one prompt, with zero infrastructure to start.

paste into your coding agent
Read https://porulle.asyncdot.com/start.md then follow it to scaffold a Porulle headless store.

One prompt to a running store

The starter gives you the 80% — server, config, an embedded Postgres, mock checkout — all done. It runs instantly; no database to install.

mkdir my-store && cd my-store
curl -fsSL https://porulle.asyncdot.com/start.md | your-agent   # or follow it yourself
pnpm install && pnpm dev

# → REST commerce API on http://localhost:4000/api
#   real Postgres (embedded PGlite) — no database to install

Then it's one config

Your catalog, payments, and plugins in a single typed file — the single source of truth.

import { defineConfig } from "@porulle/core";
import { pgliteAdapter } from "@porulle/adapter-pglite";

export default defineConfig({
  storeName: "My Store",
  databaseAdapter: await pgliteAdapter({ path: "./.data" }),
  entities: { product: { variants: { enabled: true }, fulfillment: "physical" } },
  payments: [stripeAdapter({ secretKey: process.env.STRIPE_SECRET_KEY! })],
  plugins: [loyaltyPlugin(), reviewsPlugin()],
});

What you get

Own the commerce truth

Orders, payments, refunds, inventory, and price-at-sale live in your database — not a vendor's. Money-conservation invariants enforced in the core.

REST-only, typed

One clean REST surface with an OpenAPI spec and a typed SDK client. No GraphQL to learn, no bespoke query language.

Plugins & adapters

Extend with plugins (POS, layaway, loyalty, channel connectors) and swap infrastructure through adapters — payments, storage, search, database.

Security-hardened

Tenant isolation enforced at the data layer, PIN/API-key auth, VAPT-driven hardening. Multi-tenant safe by construction.

Zero-infra dev

Ship the 80% before you own any infrastructure. Embedded PGlite runs a real Postgres in-process — no server, no connection string, no migrations.

Agent-native

An MCP endpoint and llms.txt out of the box. Coding agents scaffold, read, and operate a store without hand-holding.

Zero to shipped

01

Scaffold

One prompt (curl start.md) drops a runnable store — config, server, embedded database, mock checkout — all done.

02

Make it yours

Edit one config: your catalog shape, branding, and the plugins you want. The config is the single source of truth.

03

Ship

Swap one line to real Postgres and Stripe. Same PostgreSQL, same code, production-ready.