Ship your SaaS. Own the stack.

ReadyKit is the open-source Python starter. Auth, billing and workspaces come ready-cut.

Bill with Stripe.Chargebee.

Pick a provider in .env. Hosted checkout, subscriptions, webhooks and a customer portal work the same either way.

BILLING_PROVIDER=stripe
STRIPE_SECRET_KEY=your_secret_key
STRIPE_PRO_PRICE_ID=your_price_id
BILLING_PROVIDER=chargebee
CHARGEBEE_SITE=your-site
CHARGEBEE_API_KEY=your_api_key
BILLING_PROVIDER

What you start with.

Screens from a fresh install, not mock-ups. Sign in to the live demo; it resets every hour.

ReadyKit workspace settings: the workspace name, your role, the plan, member count, and an Upgrade to Pro button at $29 a month
Workspace settings, with the plan and the Stripe upgrade.
Users dashboard listing a Super Admin user with email, workspaces and active status
Users, roles and workspaces in the admin.
Two-factor authentication panel: not enabled, with a Setup button
Two-factor setup for every user.
Activity log with a Login from new IP entry, its user and date
An activity log with user context.

Tested in CI on Python 3.11 to 3.14, with Stripe and Chargebee test suites. Checkout, failed renewals and cancellations run against a Stripe sandbox.

From repo to running.

  1. Clone

    First, clone it and run the setup script. It generates your app secrets.

    git clone https://github.com/level09/readykit.git
    cd readykit && ./setup.sh
  2. Configure

    Then add your OAuth credentials and billing keys to .env.

  3. Run

    Next, create the database and start it on localhost:5050.

    uv run flask create-db
    uv run flask install
    uv run flask run
  4. Build yours

    Finally, add your own routes. Membership checks and scoped queries are already there.

    @app.get("/workspace/<int:workspace_id>/invoices/")
    @require_workspace_access("member")
    def invoices(workspace_id):
        invoices = Invoice.for_current_workspace()
        return render_template(
            "invoices.html", invoices=invoices
        )

Python 3.11+, uv and Git. Prefer containers? docker compose up --build. Full setup guide

Already in the box.

Sign-in

Google and GitHub login, TOTP two-factor and passkeys, run by Flask-Security-Too inside your own app.

Workspaces

Every signup gets a personal workspace and goes straight to your app. Switching and team controls appear when they are needed.

Billing

Stripe or Chargebee: hosted checkout, subscriptions, webhooks and a customer billing portal.

Teams

Manage members, assign roles, and issue workspace API keys.

Activity log

Who did what, with user and workspace context, and an admin view to review it.

Admin screens

Vue and Vuetify screens for dashboards, users, profiles and settings, ready to restyle.

Background jobs

Redis and Celery wired in, with Alembic migrations as your schema grows.

ReadyKit

For anyone building a SaaS, commercial products included.

The complete source, commercial use, self-hosting on your own infrastructure and community support on GitHub. Keep the MIT copyright and license notice.

$0,

MIT license

Get the code

Running it

Hosting and your billing provider’s fees are paid to them, never to us.

Good questions.

More to ask? Join the discussion

How does workspace scoping work?

Use the WorkspaceScoped helpers for model queries and require_workspace_access on workspace routes. They check membership and scope data to the current workspace.

Can I sell what I build?

Yes. ReadyKit uses the MIT license, which permits commercial use and modification. Keep the copyright and license notice with copies of the software.

What about solo users?

They get a workspace automatically and go straight to your app. The workspace switcher and team controls appear when they are needed.

Which billing providers are supported?

Stripe and Chargebee. Set BILLING_PROVIDER in your .env, add your credentials and plan IDs, then configure the provider’s webhooks. Pick one before launch: switching after customers subscribe means migrating their data by hand.

Who controls authentication?

You do. Authentication runs in your application with Flask-Security-Too. OAuth connects Google or GitHub; two-factor and passkeys are handled by your app.

Can I run it in containers?

Yes. docker compose up --build starts the whole stack locally.