License the software you sell, in an afternoon.
One Docker container. Two minutes to deploy. Works offline. Keys, machines, seats — and webhooks when you need them.
$ docker run -d -p 8080:8080 \
-v ./data:/data \
-e MMK_ADMIN_TOKEN=... \
-e MMK_ADMIN_PASSWORD=... \
-e MMK_SECRET_KEY=... \
minmaxkey
$ curl -X POST localhost:8080/v1/products/1/licenses \
-H "X-MinMax-Admin-Token: ..." -H "Content-Type: application/json" \
-d '{"policy_id": 1}'
9TMC-5TS9-0MKQ-VS8A-87Q0
Deploy it, then run it your way
Deploy with Docker
One command, one volume, ~100 MB. SQLite included — no second container to feed.
02Use the dashboard
Point and click: create products, issue keys, revoke licenses, watch devices. Your first license in three steps.
03Automate with the CLI
Same operations, scripted: issue on payment webhook, revoke on refund, audit before releases.
Built for the way indie devs actually ship
One container, ~100 MB
SQLite inside, zero external services. No Rails, no Redis, no worker queues. Runs on the cheapest VPS and survives a reboot.
Works offline
Every activation returns an Ed25519-signed token. Your app verifies it locally — no network call on every launch, and customers aren't locked out when your server blinks.
Small by design
Keys, machines, seats, webhooks. That's the core feature list. If you need enterprise compliance, Keygen is a fine product — it's just not this one.
Hardware-bound activation
Bind a key to a machine fingerprint with per-policy seat limits. Re-activating the same machine reuses its seat.
Webhooks for the money loop
Signed events on license created, activated, revoked, expired. Connect your store, revoke on refunds, audit everything.
A dashboard, not a CLI-and-a-prayer
Issue keys, revoke licenses, watch devices — from a small web UI at /admin. First license in three steps.
A real SDK, not a docs page
Machine fingerprint, activation, offline verification, auto-revalidating token cache. Python for Python stacks, a pure-Go single binary for everyone else.
SQLite out of the box, Postgres when you grow
Zero config to start. One env var later if you outgrow it.
No monthly per-license fees
Self-hosted is free and open source. Your success shouldn't cost you per seat.
Why not just run Keygen?
| MinMaxKey | Keygen self-hosted | |
|---|---|---|
| runtime | one container, ~100 MB RAM | Rails + Postgres + Redis + workers |
| setup | docker run, 2 minutes | multi-service orchestration |
| offline | Ed25519 tokens, built in | yes (enterprise features) |
| complexity | products, policies, licenses, seats | full license management platform |
| pricing | free, MIT, self-hosted | SaaS per monthly active license |
Keygen is a genuinely good product and the inspiration for this one. We're not competing on features — we're competing on everything around the features: simplicity, footprint, and price.
Hosted MinMaxKey is on the way
The same software, run for you, with a flat price instead of per-license billing. Until then, the self-hosted version is free and takes two minutes to set up.
Deploy it yourself — free