Catalog as code
Declare products, prices, and feature entitlements in stripe.config.ts. `plan` shows a terraform-style diff; `push` reconciles your account to match.
Declare your catalog. Reconcile your own Stripe account. Own the code — no hosted layer, no revenue share.
price_1Qx… IDs into your code # 1. Scaffold config + billing code into your Next.js app
npx stripekit init
# 2. Preview what will change on your Stripe account
npx stripekit plan
# 3. Create the products, prices, webhook, and portal
npx stripekit push// stripe.config.ts
import { defineConfig } from 'stripekit'
export default defineConfig({
products: {
pro: {
name: 'Pro',
prices: {
monthly: { amount: 2000, currency: 'usd', interval: 'month' },
yearly: { amount: 19200, currency: 'usd', interval: 'year' },
},
features: { seats: 5, projects: 'unlimited' },
},
},
portal: { cancellations: true, planSwitching: true },
webhooks: { path: '/api/stripe/webhook' },
})Change an amount, run stripekit push, and stripekit creates the new price, moves the lookup key onto it, and archives the old one — your checkout code never changes because it references the stable lookup key, not a price ID.
Built on the ideas behind “How I Stay Sane Implementing Stripe” — turned into a tool.