Why you actually need this
Selling a desktop app without any license check means anyone who gets a copy of the installer can run it forever, no payment required twice. A license key check doesn't need to be uncrackable — it just needs to raise the bar enough that casual sharing stops being the path of least resistance, while giving paying customers a smooth activation experience. That's the actual bar most indie developers need to clear: not military-grade DRM, just a real system where a key means something — bound to a machine, checkable, revocable — instead of a string nobody validates.
Why rolling your own turns into a real project
The temptation is to bang out a quick check: a hardcoded list of valid keys, or a simple hash function, ship it, done. That lasts until your first sale. Real licensing needs a database to track which keys exist and which machines they're activated on, an API your app can call from anywhere so keys are checked live and not just validated offline against a formula, a way to revoke a key when someone charges back or you get scammed, and trial support so people can try before buying. None of this can live only inside the app itself — a determined user can just patch out an offline check. Once you list it out, "just add a license check" turns into a small backend service you now have to build, host, and maintain forever, for a feature that isn't your actual product.
The alternative: a small hosted API instead of a backend project
This is exactly what SublimeKeys does — it's the licensing backend, so you don't have to build one. You get a REST API with the calls your app needs (activate, verify, deactivate, plus two for trials) and a dashboard to create products and issue keys manually or automatically on every sale. There's a free tier (1 product, 25 keys) so you can test the whole flow before committing to anything, and no infrastructure for you to run — the license server, the database, the uptime, all of that is someone else's problem now, not yours.
How to wire it up — 4 steps
What this actually gets you
In under an hour you have keys bound to a specific machine (not just a string anyone can share), a way to revoke access immediately if you need to — chargebacks, fraud, refunds — optional 7-day trials that can't be reset by reinstalling, and email delivery of keys automated on every sale if you want it. None of this required writing a database schema, hosting anything, or thinking about uptime — that part is handled.
Who this is actually for
Electron apps
Any Electron desktop app you sell once and want protected without shipping your own license server.
Python desktop tools
PyInstaller-packaged utilities, internal tools you're now selling, CLI-with-a-GUI products.
.NET / WinForms apps
Classic Windows software that predates modern licensing options — add real activation without a rewrite.
Indie tools & plugins
Small paid utilities, plugins, and add-ons where building a licensing backend isn't worth your time.
Migrating off Gumroad or Keygen
Bulk-import your existing customers and issue fresh keys without losing your install base.
About
Patrick Chen — indie developer behind Sublimearts.io. Built SublimeKeys after writing this exact license-check code for ReelNox Studio and realizing every other indie dev shipping desktop software was solving the same problem from scratch.
Did you find this helpful?