Define products in code. Any provider. Gate features. Track usage.
Website · Docs · Discord · Twitter
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 plans, subscriptions, entitlements, and usage billing without touching provider dashboards.
import { stripe } from "@paykitjs/stripe";
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({
provider: stripe({
secretKey: process.env.STRIPE_SECRET_KEY!,
webhookSecret: process.env.STRIPE_WEBHOOK_SECRET!,
}),
database: process.env.DATABASE_URL!,
plans: [free, pro],
});npx paykitjs initOr follow the installation guide.
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.
PayKit is a 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:
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.