Autumn is a free, open source finance & accounting project written in TypeScript and released under Apache-2.0. It has 2,679 GitHub stars, 246 forks and 149 open issues, and was last pushed 5 hours ago. On this registry it ranks #17 of 34 tracked projects in Finance & Accounting, with 5 head-to-head comparisons available. It gained 2 stars over the last 6 tracked days.

What is Autumn?

What it is

Autumn is an open-source pricing and billing platform written in TypeScript under the Apache-2.0 license, and it lives in the Stripe payments ecosystem. It is a layer between Stripe and an application, letting teams create subscriptions, credit systems and top-ups, usage-based models with overages, and custom plans without directly handling webhooks, upgrades, downgrades, cancellations, or failed payments.

The project addresses billing infrastructure becoming complex once a product moves beyond simple payment collection. Teams must manage permission checks, metering, usage limits, resets, plan changes, and failed-payment states, while pricing models often change as companies experiment with credits, usage charges, seats, or custom plans. Autumn places those rules outside application logic so teams can iterate on pricing without rebuilding in-app flows or database migrations.

Key capabilities

  • Teams can create products and plans in the dashboard for subscriptions, credit systems and top-ups, usage-based models with overages, seat-based billing, upfront feature purchases, and custom plans.
  • The platform exposes three application functions: /attach for purchase flows, /check for access and remaining usage, and /track for recording usage events.
  • /attach can return a Stripe Checkout URL or handle upgrades and downgrades, while /check can gate actions and /track can record numeric usage against features.
  • Autumn supports real-time limits, reset periods, overages, credits, seats, and custom plans for large customers.
  • It can be hosted through app.useautumn.com or self-hosted with bun, with optional Postgres, Resend, and Google OAuth configuration in server/.env.

Who uses it and how

  • Product teams that need subscription, credit, usage, seat, or custom-plan flows can define rules in the dashboard and call the functions from code.
  • Developers can start a purchase or upgrade with /attach, receive a Stripe Checkout URL, and let Autumn manage billing state changes.
  • Metered features can use /check before an action, such as spending AI tokens, and /track afterward to record usage against limits.
  • Self-hosters can run bun install and bun dev locally, open the dashboard at http://localhost:3000, and contact the team on Discord for help.

Getting started

The quickest way is the hosted cloud service at app.useautumn.com. For self-hosting, install bun, run bun install and bun dev, then open the dashboard at http://localhost:3000, with server/.env settings for Postgres, Resend, or Google OAuth.

When to use it — and when not to

Use Autumn when you want an open-source TypeScript layer between Stripe and your application to centralize pricing, metering, and paywall checks without writing webhook and plan-change logic. Do not choose it for a self-hosted deployment if you cannot operate supporting services, because the README says Autumn depends on a bunch of services and directs self-hosters to Discord for help, while the repository shows 149 open issues and 0 listed contributors. If you need billing without managing Postgres, Resend, Google OAuth, or other integrations, use the hosted cloud option.

project readme (upstream, from github) — read inline

Autumn

image

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 Autumn:
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_URL env variable at server/.env

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 [email protected] too!

Contributors

Thanks to all our contributors for helping make autumn a better product!

Frequently asked questions

Is Autumn free to use?

Autumn is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does Autumn do?

Stripe payments, usage tracking, and paywalls in 3 functions

What is Autumn written in?

Autumn is primarily written in TypeScript. Its source is publicly available at https://github.com/useautumn/autumn, and it has 2,679 GitHub stars.