Sell YourSoftware.Own Everything.
A complete self-hosted licensing system — VPS-based license API, machine binding, plan enforcement, heartbeat locking, Python SDK, and a one-command installer — for under $10/month. Deploy in an afternoon. Own it forever.
The problem
with selling software
Most developers spend more time on licensing plumbing than on the product itself.
SaaS Tax
Gumroad, Paddle, Keygen, LemonSqueezy — each takes 5–10% of every sale, plus monthly fees, just to validate a key your customer already paid for.
Costs scale with your successVendor Lock-in
Your 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 keysBuild From Scratch
Rolling your own means weeks of work — key generation, machine binding, plan limits, heartbeat threads, integrity checks, download gating, email sending.
Months of undifferentiated workBuilt-in.
Not bolted on.
Every feature you'd eventually need, already wired together.
Your VPS. Your Rules.
The license API runs as a Flask service on your own VPS — same server as your admin portal. SQLite database, no external dependencies, no third-party accounts required. Everything lives inside your infrastructure.
⚙Machine Binding That Actually Works.
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 to reset the binding.
🔒Enforced Remotely. Before Every Action.
Before a user can be added or a job started, the app calls /check/limits on your Worker. Not client-side. Not in a config file. The plan tiers are enforced on your VPS, against your database, every time.
Revoke a License. App Locks in 10 Minutes.
The SDK runs a background thread that pings your API every 10 minutes. Revoke a license from the portal — on the next heartbeat, the app calls sys.exit(1). No valid license, no running app.
Know Immediately if Code Is Modified.
Register SHA-256 checksums for every release file. The SDK sends actual file hashes on every heartbeat. If anything is modified — the app locks and the Worker logs exactly which files changed. Works for cracked copies running on different servers.
∑One Command. Everything Installed.
Your customer runs a single curl command. The installer validates their license key, downloads the package from your CDN gate, creates the virtualenv, writes the systemd service, configures Apache, gets SSL, and starts the app. Zero manual steps.
⚡Issue. Revoke. Reset. Search.
A Flask admin portal lets you manage all licenses across all products from one place. Issue a key and it's emailed to your customer automatically via Resend. Reset a machine binding, revoke a key, or extend an expiry — all from the browser.
🖥Three Lines to Enforce a License.
Drop zlf_sdk.py into your product. Call startup_validate() on boot. Call start_heartbeat(). That's it. The SDK handles validation, limit checking, heartbeats, and app locking with zero boilerplate in your product code.
Install in
two steps
One command on your VPS. Everything else is automatic.
One Command.Everything.
Run this on your Ubuntu VPS — where a domain is pointed and SSH is ready. The installer validates your license, downloads ZLF from the CDN, and sets up the full stack automatically.
The script prompts for your license key, domain, and email password — then handles everything else. Flask API, admin portal, SQLite database, Apache vhost, SSL certificate, and systemd services all configured and started.
What gets installed: Flask license API on port 5001, admin portal on port 5002, SQLite database, Apache reverse proxy with SSL, and two systemd services — all running as a dedicated zlf user.
$ curl -sSL https://cdn.zenworks.co.za/zlf/install.sh | sudo bash
/opt/zlf/.env.zlf_sdk.py into your product and you're selling.✓ Portal live at https://zlf.yourdomain.com — ready to issue licenses
The whole
stack for$10/month.
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 $10, 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, $10 is your ceiling. Not your floor.
The honest
comparison
What you get with ZLF versus the alternatives.
| Feature | ZenWorks ZLF | Keygen | Gumroad | Roll Your Own |
|---|---|---|---|---|
| You own the infrastructure | ✓ | ✗ | ✗ | ✓ |
| No Cloudflare account needed | ✓ | ✗ | ✗ | ✓ |
| Machine binding built-in | ✓ | ✓ | ✗ | Build it |
| Plan limit enforcement | ✓ | ✓ | ✗ | Build it |
| Heartbeat-based app locking | ✓ | ✓ | ✗ | Build it |
| File integrity / tamper detection | ✓ | ✗ | ✗ | Build it |
| One-command customer installer | ✓ | ✗ | ✗ | Build it |
| Admin portal included | ✓ | ✓ | ✓ | Build it |
| Automated license emails | ✓ | ✓ | ✓ | Build it |
| Python SDK included | ✓ | ✗ | ✗ | Build it |
| Fixed cost (not % of revenue) | ✓ | ✓ | ✗ | ✓ |
| Monthly cost at 100 customers | ~$10 | $39+ | 10% of sales | Your time |
| Time to first deployment | ~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.
ZLF 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 $10/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.
Ready to ship
your first license?
Two commands. An afternoon. $10/month forever. Your infrastructure, your rules.