A user signs in
A personal workspace is created automatically.
The open-source Python SaaS starter
Auth, billing, and workspaces are ready.
Start with the part only you can build.
Free to use. MIT licensed. Yours to build on.
@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 settings included in ReadyKit
SECURITY_TWO_FACTOR = True
SECURITY_TWO_FACTOR_ENABLED_METHODS = [
"authenticator"
]
SECURITY_WEBAUTHN = True
OAuth, authenticator apps, and passkeys. Self-hosted.
# 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.
Python + FlaskFamiliar tools
MIT licensedFree to build on
Self-hostedYour infrastructure
Read the docsOne 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 workA personal workspace is created automatically.
Manage members, switch workspaces, assign roles.
Use scoped queries and explicit access checks.
The parts every SaaS needs, connected in one codebase.
Google and GitHub login, TOTP multi-factor authentication, and passkeys. User security settings are included.
Explore authenticationStripe or Chargebee for subscriptions, hosted checkout, webhooks, and customer billing portals.
Vue and Vuetify screens for dashboards, profiles, workspaces, and team management.
Includes workspace API key managementActivity logs with user and workspace context, plus an admin interface to review them.
Built-in activity historyStart locally with Python 3.11+, uv, Git, and Redis. Configure your keys, then make it yours.
Full setup guidePrefer containers?docker compose up --build
git clone https://github.com/level09/readykit.git
cd readykit
./setup.sh
Edit .env with your OAuth credentials and billing provider keys. The setup
script generates your app secrets.
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.
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 guideOPEN SOURCE. MIT LICENSED.
Use it, change it, build a commercial product with it.
No starter-kit subscription. No per-user license fee.
Keep the MIT copyright and license notice.
Hosting and service provider costs are
separate.
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.