The billing framework for TypeScript. Products in code, handles Stripe, webhooks, and usage state, runs in your app.
npm install paykitThe billing framework for TypeScript
Define plans in code. Gate features. Track usage. Webhooks handled for you.
Website · Docs · Discord · Twitter
What is PayKit?
PayKit is an embedded billing framework for TypeScript apps. It sits inside your app, uses your database, and gives you a single API to manage products, subscriptions, entitlements, and usage billing without touching provider dashboards.
import { createPayKit, feature, plan } from "paykitjs";
const messages = feature({ id: "messages", type: "metered" });
const free = plan({
id: "free",
group: "base",
default: true,
includes: [messages({ limit: 100, reset: "month" })],
});
const pro = plan({
id: "pro",
group: "base",
price: { amount: 19, interval: "month" },
includes: [messages({ limit: 2_000, reset: "month" })],
});
export const paykit = createPayKit({
stripe: {
secretKey: process.env.STRIPE_SECRET_KEY!,
webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
},
database: process.env.DATABASE_URL!,
products: [free, pro],
});
Getting started
npx paykitjs init
Or follow the installation guide.
Why PayKit
Billing in the TypeScript ecosystem is either handled through low-level provider SDKs that require a lot of glue code, or through hosted platforms that own your billing data and sit between you and your customers. PayKit takes a different approach: it's an open-source framework that runs inside your app, keeps billing state in your own database, and handles the Stripe lifecycle so you don't have to.
Contribution
PayKit is free and open source project licensed under the MIT License. You are free to do whatever you want with it.
You can help continue its development by:
Security
If you discover a security vulnerability within PayKit, please send an email to security@paykit.sh.
All reports will be promptly addressed, and you'll be credited accordingly.