The open-source Python SaaS starter

Ship your SaaS.
Own the stack.

Auth, billing, and workspaces are ready.
Start with the part only you can build.

Free to use. MIT licensed. Yours to build on.

Your data. The right workspace.

@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
    )

Check membership. Scope the query. Build your feature.

Authentication, under your control.

# Authentication settings included in ReadyKit
SECURITY_TWO_FACTOR = True
SECURITY_TWO_FACTOR_ENABLED_METHODS = [
    "authenticator"
]
SECURITY_WEBAUTHN = True

OAuth, authenticator apps, and passkeys. Self-hosted.

Choose your billing provider.

# Configure .env with your provider credentials
BILLING_PROVIDER=stripe
STRIPE_SECRET_KEY=your_secret_key
STRIPE_PRO_PRICE_ID=your_price_id

# Chargebee is also supported
# BILLING_PROVIDER=chargebee

Hosted checkout, subscriptions, and a customer portal.

Real helpers. Open source. Read the code

Python + FlaskFamiliar tools

MIT licensedFree to build on

Self-hostedYour infrastructure

Read the docs

Starts with one.
Ready for a team.

One workspace model, from the first signup to a growing team. Solo users go straight to your app. Team controls appear when they need them.

How workspaces work

A user signs in

A personal workspace is created automatically.

SOLO

The team joins

Manage members, switch workspaces, assign roles.

TEAM

Each workspace keeps its data

Use scoped queries and explicit access checks.

The foundation is already here.

The parts every SaaS needs, connected in one codebase.

Let your users in.
Keep control of auth.

Google and GitHub login, TOTP multi-factor authentication, and passkeys. User security settings are included.

OAuthMFAPasskeys
Explore authentication

Turn your product into a business.

Stripe or Chargebee for subscriptions, hosted checkout, webhooks, and customer billing portals.

stripe/chargebee

A UI you can make yours.

Vue and Vuetify screens for dashboards, profiles, workspaces, and team management.

Includes workspace API key management

Know what happened.

Activity logs with user and workspace context, plus an admin interface to review them.

Built-in activity history

From repo
to running.

Start locally with Python 3.11+, uv, Git, and Redis. Configure your keys, then make it yours.

Full setup guide

Prefer containers?
docker compose up --build

01 Clone and set up

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

02 Add your configuration

Edit .env with your OAuth credentials and billing provider keys. The setup script generates your app secrets.

03 Initialize and run

uv run flask create-db
uv run flask install
uv run flask run

Open localhost:5000 to start building.

from enferno.extensions import db
from enferno.services.workspace import WorkspaceScoped

class Invoice(db.Model, WorkspaceScoped):
    id = db.Column(db.Integer, primary_key=True)
    workspace_id = db.Column(
        db.Integer, db.ForeignKey("workspace.id")
    )
    number = db.Column(db.String(50))
    amount = db.Column(db.Numeric(10, 2))

Your model, using ReadyKit’s workspace mixin.

Less plumbing.
More product.

Add your models and routes. ReadyKit provides the workspace helpers, access checks, and billing services around them.

Use Alembic migrations as your schema grows. It is standard Python you can read and change.

Read the developer guide

Familiar tools.
One starting point.

Backend
Python + Flask
Interface
Vue + Vuetify
Data
PostgreSQL
Background jobs
Redis + Celery
Schema changes
Alembic
Deployment
Docker · Fly.io · Railway

OPEN SOURCE. MIT LICENSED.

Your code.
Your business.

Use it, change it, build a commercial product with it.
No starter-kit subscription. No per-user license fee.

Get ReadyKit
$0for the complete codebase
  • Commercial use
  • Full source code
  • Self-host on your infrastructure
  • Community support on GitHub

Keep the MIT copyright and license notice.
Hosting and service provider costs are separate.

Read the license

A few good
questions.

More to ask?
Join the discussion

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

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

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

Stripe and Chargebee. Choose BILLING_PROVIDER in your .env, add your credentials and plan IDs, then configure the provider’s webhooks.

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