A complete commercial software licensing framework — VPS-based license API, machine binding, plan enforcement, integrity protection, Python SDK, and a one-command installer — all running on $15/month infrastructure. Yours to own and deploy in an afternoon.
Most developers spend more time on licensing plumbing than on the product itself. It shouldn't be this hard.
Gumroad, Paddle, LemonSqueezy, Keygen — each takes 5–10% of every sale, plus monthly fees, just to validate a key your customer already paid for.
Costs scale with your successYour license logic lives in someone else's database, behind someone else's API. When they raise prices, change terms, or go down — your app goes with them.
You don't own the keysRolling your own means weeks of work: key generation, machine binding, plan limits, heartbeat threads, integrity checks, download gates, email sending.
Months of undifferentiated workFour moving parts. All yours. All on infrastructure that costs pennies a day.
One API call from your portal generates a license key, stores it in your SQLite database, and emails it to the customer automatically.
Customer runs one curl command. The installer validates the key, downloads the package from your CDN, verifies file integrity, and starts everything as a systemd service.
The app heartbeats every 10 minutes. If the license is revoked, expired, or the files tampered with — the app locks itself. No internet, no app.
Add a new product in minutes from the admin portal. Create a product, define plans and limits, issue keys. The entire API and portal are shared across all your products.
Every feature you'd eventually need, already wired together and battle-tested.
The license API is a Flask service on your own VPS — alongside your admin portal and CDN. SQLite database, no external dependencies, no third-party accounts required. Everything inside your own infrastructure.
⚙The first server to activate a key owns it. The machine ID is stored in your SQLite database on first activation. Every subsequent validation must match — making license sharing structurally impossible without contacting you first.
🔒Before a user can be added or a job started, the app checks /check/limits
— enforcing plan tiers against your VPS API. Not client-side. Not in a config file. On your server.
Register SHA-256 checksums for every release. The app sends its actual file hashes on every heartbeat. If anything has been modified — the app locks and you know which files. Works for cracked copies too.
∑Your customer runs a single curl command. No Docker, no config files, no reading docs. The installer validates their key, pulls the app from your CDN, creates the virtualenv, writes the systemd service, opens the firewall, and starts the app. Done.
⚡A Flask admin portal lets you manage all licenses across all products. Issue a key and it's emailed automatically via Resend. Reset a machine binding, revoke a key, or extend an expiry — all from the browser.
🛠Drop zlf_sdk.py
into your product. Call startup_validate()
on boot. Call start_heartbeat().
The SDK handles validation, limit checking, heartbeats, and app locking with zero boilerplate in your product
code.
Fixed infrastructure cost. Completely independent of how many customers you have, how many keys you issue, or how many products you ship. Keygen charges $39/month before your first sale. You pay $15, forever.
| Component | Service | Monthly |
|---|---|---|
| License API + Database | Flask + SQLite on VPS | included |
| Admin portal | Shares same VPS | $0 extra |
| Email delivery | Resend (3K/mo free) | $0 |
| CDN + download gate | Hetzner CX22 VPS | ~$5 |
| SSL certificate | Let's Encrypt (certbot) | $0 |
| Total — unlimited products & customers | ~$5–10 | |
Compare: Keygen $39+/mo · Paddle 5% + fees · Gumroad 10% · LemonSqueezy 5%+.
With Zenworks, $15 is your ceiling. Not your floor.
What you get with Zenworks versus the alternatives.
| Feature | Zenworks | Keygen | Gumroad | Roll your own |
|---|---|---|---|---|
| You own the infrastructure | ✓ | ✗ | ✗ | ✓ |
| Machine binding built-in | ✓ | ✓ | ✗ | Build it |
| Plan limit enforcement | ✓ | ✓ | ✗ | Build it |
| File integrity / tamper detection | ✓ | ✗ | ✗ | Build it |
| One-command customer installer | ✓ | ✗ | ✗ | Build it |
| Heartbeat-based enforcement | ✓ | ✓ | ✗ | Build it |
| No Cloudflare account needed | ✓ | ✗ | ✗ | ✓ |
| Python SDK included | ✓ | ✗ | ✗ | Build it |
| Fixed cost (not % of revenue) | ✓ | ✓ | ✗ | ✓ |
| Monthly cost at 100 customers | ~$15 | $39+ | 10% of sales | Your time |
| Time to deploy | ~2 hours | Minutes | Minutes | Weeks |
You built the product. You should own the business model too.
Most licensing tools treat you like a user of their platform. You sign up, you pay monthly, you follow their schema, and if they ever change their pricing — you have no leverage.
Zenworks flips that. The code is yours. The license API runs on your VPS. The database is a SQLite file you control. The CDN is a $5 server you own. Nobody can pull the rug.
When you get your first customer, you keep all of it. When you get your thousandth customer, you're still paying $15/month. The only thing that scales is your revenue.
And because it's a framework — not a product — every new thing you build runs on the same infrastructure. Deploy a second product in an afternoon. A third in an hour. The hard work is already done.
One command. Live in an afternoon. $15/month forever. Your infrastructure, your rules.