amianthus 5cb46bba96 Squashed commit of the following:
commit da2693567c
Author: John Yeo <johnyeocx@gmail.com>
Date:   Mon Sep 22 14:45:25 2025 +0100

    chore: ran biome format

commit db19928cea
Merge: 3005d452 d5d285a2
Author: 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

commit 3005d45252
Merge: 5cb89756 784f7f92
Author: John Yeo <johnyeocx@gmail.com>
Date:   Mon Sep 22 13:25:01 2025 +0100

    Merge branch 'main' into staging

commit d5d285a25b
Merge: 894f943f b3952a27
Author: 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

commit 894f943f31
Merge: 5cb89756 59aaf3c4
Author: 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

commit 59aaf3c430
Author: John Yeo <johnyeocx@gmail.com>
Date:   Mon Sep 22 13:17:56 2025 +0100

    Fixes/Update-logic-reward-program

commit 5f9eb4f02d
Merge: 7b1b2cd2 5cb89756
Author: John Yeo <johnyeocx@gmail.com>
Date:   Mon Sep 22 13:17:46 2025 +0100

    Merge branch 'staging' into Fixes/Update-logic-reward-program

commit 7b1b2cd278
Author: John Yeo <johnyeocx@gmail.com>
Date:   Mon Sep 22 13:12:39 2025 +0100

    fix: show error message for update reward program

commit 5cb897560d
Merge: 79cf0f58 94dd5ba5
Author: 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

commit 79cf0f5839
Author: John Yeo <johnyeocx@gmail.com>
Date:   Mon Sep 22 13:06:09 2025 +0100

    fix: update feature modal scrolls

commit 94dd5ba5b1
Merge: 9715e04e 609bd24b
Author: 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

commit 9715e04edd
Merge: 97190711 fe96c87a
Author: 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

commit 9719071149
Merge: 9c1862b4 7e201dae
Author: 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

commit 9c1862b405
Merge: 6040c103 4fd25cc1
Author: 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

commit 4fd25cc161
Author: John Yeo <johnyeocx@gmail.com>
Date:   Mon Sep 22 12:43:06 2025 +0100

    fix: ent rollover null / undefined difference

commit 784f7f9290
Merge: dd0e9f1f 6040c103
Author: John Yeo <johnyeocx@gmail.com>
Date:   Mon Sep 22 10:40:49 2025 +0100

    fix: referral program coupon reward, apply to redeemer

commit dd0e9f1fd7
Author: John Yeo <johnyeocx@gmail.com>
Date:   Mon Sep 22 10:06:27 2025 +0100

    fix: referral utils apply to both coupon

commit e40e5a06f9
Author: John Yeo <johnyeocx@gmail.com>
Date:   Mon Sep 22 09:53:38 2025 +0100

    chore: fixing reward migrations

commit e161cbec83
Merge: e8ff791a 6040c103
Author: John Yeo <johnyeocx@gmail.com>
Date:   Sun Sep 21 18:24:24 2025 +0100

    Merge branch 'staging' into feat/reward-migrations

commit b3952a2702
Author: 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

commit 1f609eb592
Author: sidgaikwad <gaikwadsiddharth039@gmail.com>
Date:   Sat Sep 20 00:53:46 2025 +0530

    changes for the update logic for passing proper id

commit 86222adfa9
Author: sidgaikwad <gaikwadsiddharth039@gmail.com>
Date:   Sat Sep 20 00:20:44 2025 +0530

    `feat(rewardPrograms): Update RewardProgramService to support idOrInternalId and add update endpoint`

commit ab655107fc
Author: 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

commit e8ff791ace
Author: amianthus <49116958+SirTenzin@users.noreply.github.com>
Date:   Fri Sep 19 12:58:48 2025 +0100

    fix: 🐛 dont use unmatched prices

commit e2528194fd
Author: amianthus <49116958+SirTenzin@users.noreply.github.com>
Date:   Fri Sep 19 12:53:06 2025 +0100

    feat: 🎸 toast to alert of any unmigrated prices

commit 7e201dae41
Author: amianthus <49116958+SirTenzin@users.noreply.github.com>
Date:   Tue Sep 16 14:47:04 2025 +0100

    fix: 🐛 only counted row instead of value

commit 590a2ae86f
Author: amianthus <49116958+SirTenzin@users.noreply.github.com>
Date:   Tue Sep 16 14:23:26 2025 +0100

    refactor: 💡 clean up

commit d529d6adb7
Author: amianthus <49116958+SirTenzin@users.noreply.github.com>
Date:   Tue Sep 16 13:52:35 2025 +0100

    refactor: 💡 types

commit d6e9802cdc
Author: amianthus <49116958+SirTenzin@users.noreply.github.com>
Date:   Tue Sep 16 13:52:28 2025 +0100

    feat: 🎸 reward migrations

commit 609bd24b60
Author: 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

commit d13505621c
Author: 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

commit c26bd73627
Author: amianthus <49116958+SirTenzin@users.noreply.github.com>
Date:   Mon Sep 15 15:25:47 2025 +0100

    refactor: 💡 type sugar :)

commit 77790cb176
Author: amianthus <49116958+SirTenzin@users.noreply.github.com>
Date:   Mon Sep 15 15:11:05 2025 +0100

    fix: 🐛 applying to all

commit fe96c87a7a
Author: amianthus <49116958+SirTenzin@users.noreply.github.com>
Date:   Mon Sep 15 14:47:16 2025 +0100

    fix: 🐛 timezones not localised
2025-09-22 13:49:19 +00:00
2025-09-22 13:49:19 +00:00
2025-09-15 12:52:03 +01:00
2025-07-22 18:55:35 +01:00
2025-09-22 13:49:19 +00:00
2025-09-22 13:49:19 +00:00
2025-09-22 13:49:19 +00:00
2025-09-22 13:49:19 +00:00
2025-08-01 11:03:47 -07:00
2025-07-12 11:35:54 +01:00
2025-09-22 13:49:19 +00:00
2025-09-04 12:44:46 -07:00
2025-07-22 18:55:35 +01:00
wip
2025-09-22 13:11:31 +00:00
wip
2025-09-22 13:11:31 +00:00
2025-09-22 13:49:19 +00:00
2025-09-22 13:49:19 +00:00

Autumn

Autumn

Discord Follow Y Combinator Cloud Documentation Ask DeepWiki

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:

  1. Make sure you have bun installed
  2. Install the project dependencies
bun install
  1. Run our set up script:
bun setup
  1. Generate the relevant tables in your postgres DB
bun db:generate && bun db:migrate
  1. 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_URL env variable at server/.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:

  1. Connect to your database
  2. Drop all existing tables
  3. 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:

  1. Usage & Overage : set real-time usage limits and choose when they reset. Charge users if they go over.
  2. Credits 💰: users can access monetary or arbitrary credits that many features can draw from
  3. Seat-based with per-seat limits 👥:: bill customers for their users (or other entities)
  4. 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:

  1. /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>
  1. /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")
  1. /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!

Description
No description provided
Readme Apache-2.0 155 MiB
Languages
TypeScript 86%
Python 7.6%
MDX 5.5%
PLpgSQL 0.3%
JavaScript 0.2%
Other 0.4%