commitda2693567cAuthor: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 14:45:25 2025 +0100 chore: ran biome format commitdb19928ceaMerge:3005d452d5d285a2Author: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 13:25:11 2025 +0100 Merge branch 'staging' of https://github.com/useautumn/autumn into staging commit3005d45252Merge:5cb89756784f7f92Author: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 13:25:01 2025 +0100 Merge branch 'main' into staging commitd5d285a25bMerge:894f943fb3952a27Author: John Yeo <51376134+johnyeocx@users.noreply.github.com> Date: Mon Sep 22 13:19:48 2025 +0100 Merge pull request #224 from muhammadusmandev/fix/create-product-prevent-empty-name-submission Fix: Create product prevent API call if product name field is empty and invalid characters commit894f943f31Merge:5cb8975659aaf3c4Author: John Yeo <51376134+johnyeocx@users.noreply.github.com> Date: Mon Sep 22 13:19:15 2025 +0100 Merge pull request #223 from sidgaikwad/Fixes/Update-logic-reward-program Fixes/update logic reward program commit59aaf3c430Author: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 13:17:56 2025 +0100 Fixes/Update-logic-reward-program commit5f9eb4f02dMerge:7b1b2cd25cb89756Author: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 13:17:46 2025 +0100 Merge branch 'staging' into Fixes/Update-logic-reward-program commit7b1b2cd278Author: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 13:12:39 2025 +0100 fix: show error message for update reward program commit5cb897560dMerge:79cf0f5894dd5ba5Author: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 13:06:11 2025 +0100 Merge branch 'staging' of https://github.com/useautumn/autumn into staging commit79cf0f5839Author: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 13:06:09 2025 +0100 fix: update feature modal scrolls commit94dd5ba5b1Merge:9715e04e609bd24bAuthor: John Yeo <51376134+johnyeocx@users.noreply.github.com> Date: Mon Sep 22 12:58:51 2025 +0100 Merge pull request #215 from shreyash1231/fix/Disabled-Create-Customer-Button-Until-Id-Or-Email-is-Filled-To-Prevent-API-CALL Fix/disabled create customer button until id or email is filled to prevent api call commit9715e04eddMerge:97190711fe96c87aAuthor: John Yeo <51376134+johnyeocx@users.noreply.github.com> Date: Mon Sep 22 12:44:40 2025 +0100 Merge pull request #213 from SirTenzin/fix/event-timezone fix: 🐛 timezones not localised commit9719071149Merge:9c1862b47e201daeAuthor: John Yeo <51376134+johnyeocx@users.noreply.github.com> Date: Mon Sep 22 12:44:28 2025 +0100 Merge pull request #217 from SirTenzin/fix/trmnl-values fix: 🐛 only counted row instead of value commit9c1862b405Merge:6040c1034fd25cc1Author: John Yeo <51376134+johnyeocx@users.noreply.github.com> Date: Mon Sep 22 12:43:36 2025 +0100 Merge pull request #216 from SirTenzin/feat/reward-migrations fix: 🐛 reward price_ids migrations commit4fd25cc161Author: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 12:43:06 2025 +0100 fix: ent rollover null / undefined difference commit784f7f9290Merge:dd0e9f1f6040c103Author: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 10:40:49 2025 +0100 fix: referral program coupon reward, apply to redeemer commitdd0e9f1fd7Author: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 10:06:27 2025 +0100 fix: referral utils apply to both coupon commite40e5a06f9Author: John Yeo <johnyeocx@gmail.com> Date: Mon Sep 22 09:53:38 2025 +0100 chore: fixing reward migrations commite161cbec83Merge:e8ff791a6040c103Author: John Yeo <johnyeocx@gmail.com> Date: Sun Sep 21 18:24:24 2025 +0100 Merge branch 'staging' into feat/reward-migrations commitb3952a2702Author: Muhammad Usman <muhammadusmandev@yahoo.com> Date: Sat Sep 20 08:28:35 2025 -0700 Fix: Create product prevent API call if product name field is empty and not valid commit1f609eb592Author: sidgaikwad <gaikwadsiddharth039@gmail.com> Date: Sat Sep 20 00:53:46 2025 +0530 changes for the update logic for passing proper id commit86222adfa9Author: sidgaikwad <gaikwadsiddharth039@gmail.com> Date: Sat Sep 20 00:20:44 2025 +0530 `feat(rewardPrograms): Update RewardProgramService to support idOrInternalId and add update endpoint` commitab655107fcAuthor: sidgaikwad <gaikwadsiddharth039@gmail.com> Date: Fri Sep 19 23:21:05 2025 +0530 changes to have view for the updaterewardprogram and also the service for it commite8ff791aceAuthor: amianthus <49116958+SirTenzin@users.noreply.github.com> Date: Fri Sep 19 12:58:48 2025 +0100 fix: 🐛 dont use unmatched prices commite2528194fdAuthor: amianthus <49116958+SirTenzin@users.noreply.github.com> Date: Fri Sep 19 12:53:06 2025 +0100 feat: 🎸 toast to alert of any unmigrated prices commit7e201dae41Author: amianthus <49116958+SirTenzin@users.noreply.github.com> Date: Tue Sep 16 14:47:04 2025 +0100 fix: 🐛 only counted row instead of value commit590a2ae86fAuthor: amianthus <49116958+SirTenzin@users.noreply.github.com> Date: Tue Sep 16 14:23:26 2025 +0100 refactor: 💡 clean up commitd529d6adb7Author: amianthus <49116958+SirTenzin@users.noreply.github.com> Date: Tue Sep 16 13:52:35 2025 +0100 refactor: 💡 types commitd6e9802cdcAuthor: amianthus <49116958+SirTenzin@users.noreply.github.com> Date: Tue Sep 16 13:52:28 2025 +0100 feat: 🎸 reward migrations commit609bd24b60Author: shreyash1231 <chandwadkarshreyash@gmail.com> Date: Tue Sep 16 17:08:33 2025 +0530 fix/Disabled-Create-Customer-Button-Until-Id-Or-Email-is-Filled-To-Prevent-API-CALL commitd13505621cAuthor: shreyash1231 <chandwadkarshreyash@gmail.com> Date: Tue Sep 16 16:41:45 2025 +0530 Disabled-Create-Customer-Button-Until-Name-Id-Or-Email-isfilled-to-Prevent-API-CALL commitc26bd73627Author: amianthus <49116958+SirTenzin@users.noreply.github.com> Date: Mon Sep 15 15:25:47 2025 +0100 refactor: 💡 type sugar :) commit77790cb176Author: amianthus <49116958+SirTenzin@users.noreply.github.com> Date: Mon Sep 15 15:11:05 2025 +0100 fix: 🐛 applying to all commitfe96c87a7aAuthor: amianthus <49116958+SirTenzin@users.noreply.github.com> Date: Mon Sep 15 14:47:16 2025 +0100 fix: 🐛 timezones not localised
Autumn
Autumn 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:
- Subscriptions
- Credit systems & top ups
- Usage-based models & overages
- Custom plans for large customers
All this without having to handle webhooks, upgrades/downgrades, cancellations or payment fails.
Getting Started
Cloud: The quickest way to start using Autumn is through our cloud service.
Self Hosted: If you'd like to self-host Autumn:
- Make sure you have
buninstalled - Install the project dependencies
bun install
- Run our set up script:
bun setup
- Generate the relevant tables in your postgres DB
bun db:generate && bun db:migrate
- Run Autumn:
For Windows
docker compose -f docker-compose.dev.yml up
For mac/linux:
docker compose -f docker-compose.unix.yml up
That's it! You should be able to see the Autumn dashboard on http://localhost:3000.
⚠️ 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
ℹ️ Our set up script initializes the required env vars and (optionally) a Supabase instance. If you'd like to use your own Postgres instance, you can do so -- just paste the connection string in the
DATABASE_URLenv variable atserver/.env
Troubleshooting
If you encounter a SyntaxError: Unexpected end of JSON input error when running bun setup again after previously running it, you may need to clear your database tables first. This is a known issue that can occur when running database migrations multiple times.
To resolve this:
- Connect to your database
- Drop all existing tables
- Run the setup script again:
Why Autumn
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.
How it works
First, create your products and plans on the dashboard. We support any pricing model. Some popular ones we've seen include:
- Usage & Overage ⚡: set real-time usage limits and choose when they reset. Charge users if they go over.
- Credits 💰: users can access monetary or arbitrary credits that many features can draw from
- Seat-based with per-seat limits 👥:: bill customers for their users (or other entities)
- Pay upfront 💳: let users purchase a fixed quantity of a feature upfront, which is used over time
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
})
Others
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!
Contributors
Thanks to all our contributors for helping make autumn a better product!
