Skip to main content

The money-native web framework — payments, paywalls and metering as first-class primitives. Zero dependencies.

Project description

⚡ Larz

The money-native web framework.

Larz is a small, from-scratch, dependency-free Python web framework where payments, paywalls, subscriptions, trials, and usage-metering are first-class primitives — not something you bolt on with three libraries and a weekend.

Flask makes routes easy. Django makes data easy. Larz makes getting paid easy.

from larz import Larz
import larz.money as money

app = Larz(secret="change-me")
money.enable(app)                          # payments on. Zero keys in dev.

@app.paid("$9/mo", trial_days=7)           # subscription with a free trial
@app.get("/pro/report")
def report(req):
    return "<h1>Pro report for %s</h1>" % req.subject

@app.metered("$0.02/call")                 # per-call billing from prepaid credit
@app.post("/api/summarize")
def summarize(req):
    return {"summary": run(req.json()["text"])}

app.run()

A request to /pro/report from someone who hasn't paid is automatically sent through checkout (or given their free trial); when they come back, they're served. A request to /api/summarize with no credit gets a clean 402. You never write if user.is_paid.

Batteries included — all pure stdlib

Area What you get
Money @app.paid · @app.metered · @app.plan · subscriptions & renewals · free trials · coupons · credit packs · built-in /larz/pricing, /larz/credits, and a /larz/admin revenue dashboard (MRR, sales, usage)
Providers MockProvider (keyless dev) · StripeProvider · GemVaultProvider · DodoProvider · CryptoProvider — all via stdlib urllib, no SDKs. Add your own in ~40 lines.
Core WSGI engine · typed routing (/u/<id:int>/<slug>) · signed-cookie sessions · blueprints · static files · debug error pages
Templating A real {{ }} / {% for %} / {% if %} engine with autoescaping
Models A tiny active-record ORM over sqlite (Model / Field, queries, ordering)
Security Rate limiting · bot / invalid-traffic filter · CSRF · CORS
SEO Auto sitemap.xml + robots.txt · OpenGraph/Twitter meta_tags() · IndexNow ping
CLI larz new · larz run · larz routes

Why

Every other framework treats money as an afterthought — the thing you wire up last, badly, copy-pasted from a payments tutorial. But for indie hackers, solopreneurs, and anyone shipping a product to make a living, monetization isn't the afterthought — it's the point. Larz puts it in the core.

Use it for

  • Paid / metered APIs — AI wrappers, data APIs (@app.metered per call)
  • Content paywalls — reports, courses, paid newsletters (@app.paid)
  • Digital products — one-off unlocks and downloads
  • Micro-SaaS — a free tier + a Pro plan with a trial (@app.plan)

Design principles

  • Zero dependencies. Pure Python standard library — sqlite3, urllib, wsgiref. Runs anywhere python3 runs, including constrained boxes and phones.
  • Provider-agnostic. The framework never hard-codes a processor. Implement create_checkout + parse_webhook and any processor drops in.
  • Portable by default. No modern-SQLite assumptions, no C extensions.

Run the demos (no API keys)

python3 examples/paid_app.py     # the essentials: paid + metered routes
python3 examples/saas_app.py     # a full mini-SaaS: plans, trials, credits,
                                 # templates, ORM, dashboard, security

Then open http://127.0.0.1:8000/ and click through. Visit /larz/admin?token=admin123 on the SaaS demo to see the revenue dashboard.

Test

python3 tests/test_core.py       # 15 checks
python3 tests/test_features.py   # 32 checks — money, templating, models, security

47 checks, no pytest required.

Scaffold a new app

python3 -m larz new myapp
cd myapp && python3 -m larz run

Status

v0.2.0 — real and tested, but not yet production-hardened (WSGI dev server, in-memory rate limiting, MockProvider is dev-only). Roadmap: ASGI/async core, production server recipe, dunning/renewal reminders, richer analytics, a hosted docs site at larzos.com/larz.

License

MIT.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

larz-0.2.0.tar.gz (31.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

larz-0.2.0-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

File details

Details for the file larz-0.2.0.tar.gz.

File metadata

  • Download URL: larz-0.2.0.tar.gz
  • Upload date:
  • Size: 31.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for larz-0.2.0.tar.gz
Algorithm Hash digest
SHA256 70c1b9979a7228cb9a965cad6df4bee30775b583c4146d069bd1ccb3a5b06599
MD5 bc2546a0589d7c3161c54e7ddaf74a46
BLAKE2b-256 866c05367ab5a0b51c0b0469114fa94da1775d3d869bcf2eec2ca75625375cee

See more details on using hashes here.

Provenance

The following attestation bundles were made for larz-0.2.0.tar.gz:

Publisher: publish.yml on larz-scripter/larz

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file larz-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: larz-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 28.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for larz-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 51dc09c2f2e48389333fda38f1085ecf313c34588eabe6b28d9ec6a4db277df3
MD5 a091f5c5fb92dc439f84b0d2a4059798
BLAKE2b-256 ee30ac29657c4e2a0876eb18c4a510f8ec06e188c4a939b62f29148236e64389

See more details on using hashes here.

Provenance

The following attestation bundles were made for larz-0.2.0-py3-none-any.whl:

Publisher: publish.yml on larz-scripter/larz

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page