Autumn is an open-source pricing & billing platform
See the codeAutumn is an open-source layer between Stripe and your application, allowing you to create any pricing model and embed it with a couple lines of code. On Autumn you can build:
All this without having to handle webhooks, upgrades/downgrades, cancellations or payment fails.
Cloud: The quickest way to start using Autumn is through our cloud service.
Self Hosted: If you'd like to self-host Autumn:
bun installedbun install
bun dev
That's it! You should be able to see the Autumn dashboard on http://localhost:3000.
ℹ️ Autumn depends on a bunch of services. If you'd like help with self-hosting or running a local instance, contact the team on Discord.
⚠️ To log in, enter an email at the sign in page, and an OTP should appear in your console / terminal. Normally, we use Resend to email an OTP or Google OAuth -- these can be set up by providing your credentials in
server/.env
ℹ️ If you'd like to use your own Postgres instance, paste the connection string in the
DATABASE_URLenv variable atserver/.env
1️⃣ Billing infra gets complex fast
More than payments: it's building permission management, metering, usage limits with cron jobs, and connecting it to upgrade, downgrade, cancellation and failed payments states. Race conditions, edge cases, and other bugs will slow you down.
2️⃣ Billing and app logic should be decoupled
Growing companies iterate on pricing often: raising prices, experimenting with credits or charging for a new feature. DB migrations, rebuilding in-app flows, internal dashboards for custom pricing and grandfathering users on old pricing is a nightmare.
First, create your products and plans on the dashboard. We support any pricing model. Some popular ones we've seen include:
Next, all your billing logic can be implemented through just 3 functions:
/attach: One function call for all purchase flows. We return a Stripe Checkout URL, or handle an upgrade/downgrade.const { attach } = useAutumn();
<button
onClick={async () => {
await attach({ productId: "pro" });
}}
>
Upgrade to Pro
</button>
/check: Check whether a customer has access to a product, feature or remaining usage.const { check } = useAutumn();
const { data } = await check({ featureId: "ai_tokens" })
!data.allowed && alert("AI limit reached")
/track: When a customer uses a usage-based feature, record a usage event.const { track } = useAutumn();
await track({
featureId: "ai_tokens",
value: 1312
})
Contributing 🤝: If you're interested in contributing, you can check out our guide here. All types of help are appreciated :)
Support 💬: If you need any type of support, we're typically most responsive on our Discord channel, but feel free to email us hey@useautumn.com too!
Thanks to all our contributors for helping make autumn a better product!
(top 24 of 40)
44 followers · starred Jun 2025
3,918 followers · starred May 2025
1,689 followers · starred Jun 2025
361 followers · starred Aug 2025
Autumn is an open-source pricing & billing platform
See the codeAutumn is an open-source layer between Stripe and your application, allowing you to create any pricing model and embed it with a couple lines of code. On Autumn you can build:
All this without having to handle webhooks, upgrades/downgrades, cancellations or payment fails.
Cloud: The quickest way to start using Autumn is through our cloud service.
Self Hosted: If you'd like to self-host Autumn:
bun installedbun install
bun dev
That's it! You should be able to see the Autumn dashboard on http://localhost:3000.
ℹ️ Autumn depends on a bunch of services. If you'd like help with self-hosting or running a local instance, contact the team on Discord.
⚠️ To log in, enter an email at the sign in page, and an OTP should appear in your console / terminal. Normally, we use Resend to email an OTP or Google OAuth -- these can be set up by providing your credentials in
server/.env
ℹ️ If you'd like to use your own Postgres instance, paste the connection string in the
DATABASE_URLenv variable atserver/.env
1️⃣ Billing infra gets complex fast
More than payments: it's building permission management, metering, usage limits with cron jobs, and connecting it to upgrade, downgrade, cancellation and failed payments states. Race conditions, edge cases, and other bugs will slow you down.
2️⃣ Billing and app logic should be decoupled
Growing companies iterate on pricing often: raising prices, experimenting with credits or charging for a new feature. DB migrations, rebuilding in-app flows, internal dashboards for custom pricing and grandfathering users on old pricing is a nightmare.
First, create your products and plans on the dashboard. We support any pricing model. Some popular ones we've seen include:
Next, all your billing logic can be implemented through just 3 functions:
/attach: One function call for all purchase flows. We return a Stripe Checkout URL, or handle an upgrade/downgrade.const { attach } = useAutumn();
<button
onClick={async () => {
await attach({ productId: "pro" });
}}
>
Upgrade to Pro
</button>
/check: Check whether a customer has access to a product, feature or remaining usage.const { check } = useAutumn();
const { data } = await check({ featureId: "ai_tokens" })
!data.allowed && alert("AI limit reached")
/track: When a customer uses a usage-based feature, record a usage event.const { track } = useAutumn();
await track({
featureId: "ai_tokens",
value: 1312
})
Contributing 🤝: If you're interested in contributing, you can check out our guide here. All types of help are appreciated :)
Support 💬: If you need any type of support, we're typically most responsive on our Discord channel, but feel free to email us hey@useautumn.com too!
Thanks to all our contributors for helping make autumn a better product!
(top 24 of 40)
44 followers · starred Jun 2025
3,918 followers · starred May 2025
1,689 followers · starred Jun 2025
361 followers · starred Aug 2025