- Cart
- Quote
- Order
- Standardversand (DHL)
- €4.95
- Incl. 19% VAT
- €15.14
- Total
- €94.85
Pre-release · Apache-2.0
OrbCart is the open transaction layer for brands that already own their product data. Products, prices and inventory stay in your systems. One transaction core, built for your storefront and for AI agents.
Why OrbCart
OrbCart is the transaction layer, from cart to order. It is deliberately no catalog, no PIM and no shop system: brands that own their product data already run those.
Only sell what lives in their catalog, so your products move in.
Expect your SKUs in their catalog. Live price and stock take custom glue.
Collect the money, some even tax. Cart, stock and orders stay yours.
Gives you full control. Idempotency, payment failure cases, tax, order snapshots and agent protocols, all built and run in-house.
Asks your systems through one function, so nothing moves in and nothing syncs. The whole transaction, from cart to order, comes built in.
How it works
Your integration is an offers function: given the lines of a cart, it answers from the systems you already run. Tax, shipping, payment and the order are OrbCart’s job.
import { defineCommerce } from "@orbcart/runtime";
import { channels } from "./channels";
import { erp } from "./erp";
export * from "@orbcart/runtime/objects";
export default defineCommerce({
channels,
offers: async (lines, { currency }) => {
const articles = await erp.articles(lines);
return articles.map((article) => ({
reference: article.sku,
title: article.name,
price: { amount: article.cents, currency },
taxCategory: "standard",
shipping: { weightInGrams: article.grams },
tags: article.promotions,
}));
},
});
Deploys as a Worker into your own Cloudflare account. Carts, quotes and orders live in storage you own.
OrbCart asks for the lines in a cart the moment it needs a price. No copy exists that could fall behind.
An offer is a reference, a title, a price and a tax category. Variants, sets and configurations stay the way your ERP knows them.
Tag an offer, and one call voids it in every open cart. More on that below.
When your sale ends, one call voids its offers in every open cart. From the moment it returns, no quote takes the old price: each buyer’s next click gets the regular one. Carts without the tag stay as they are.
Runs on the edge
OrbCart deploys as a Worker into your own Cloudflare account. No server to patch, no cluster to scale, no Kubernetes: every cart is its own Durable Object, so a busy day adds objects, not load on one database.
The Worker and every cart run in your Cloudflare account; carts and orders are stored in the EU jurisdiction by default. No OrbCart server sits between you and your orders.
An object per cart, created when a buyer starts one. Capacity grows with the number of buyers, not with servers you size before the sale.
No servers, no database cluster, no queue or cache to run. An update is a deploy; the platform does the rest.
Built for the bad day
Retries, timeouts and double clicks are normal on the internet. OrbCart gives each of them an answer: no double charge, no lost order, no guessed state.
Stripe sandbox · 25 September 2026
Every call that moves money carries a key. A retry gets the first answer, never a second charge.
Idempotency-Key
A timeout is neither failed nor paid. OrbCart asks the provider until it knows.
payment: unknown
Every total a buyer accepts is signed, and anyone can check it against your public keys.
ES256 · jwks.json
The handover to your ERP runs after the order is saved, and waits while your ERP is down.
outbox
Partial refunds per line, from the amounts frozen in the order, not from today’s prices.
orders.refund()
Two front doors
AI agents are starting to buy, and they need a checkout they can verify. An agent gets the same core as your storefront: the same prices, the same rules and the same signed quote.
@orbcart/client.
Today
verifyQuote.
Today
For developers
The parts every brand rebuilds come with OrbCart: a checkout kit, payments, VAT, shipping, refunds and a local runtime. Your code is the part only you can write.
import { Checkout } from "@orbcart/react";
export function CheckoutPage({ cart }: Props) {
return (
<Checkout
cart={cart}
locale="de-DE"
labels={labels}
onOrdered={(order) => showReceipt(order)}
/>
);
}
const admin = createAdmin({ url, key });
const refund = await admin.orders.refund(orderId, {
lines: [{ line: "l_1", quantity: 1 }],
reason: "return",
});
Built in today
orbcart dev on your machineOn the roadmap PayPal, Adyen, discount codes, signed-in buyers. Project status
Keep your catalog where it is. Write the offers function, and OrbCart runs everything after “Add to cart”.