What is a membership license?
A membership license is a product key tied to a live membership instead of a one-time purchase. The member's copy of your plugin, script or bot checks the key on a schedule: it works while the membership lasts, stops when the membership ends, and starts working again if they rejoin. The membership is the license. That is the sentence Nadi uses for it: your membership is the license.
Why this exists
Anyone who sells a product that runs — a plugin for a design app, a script, a bot, a small web tool — knows the imbalance. The sale happens once and the work never stops: an update after every release of the host app, questions, fixes, and a buyer from two years ago who still writes to you.
A subscription fixes the money side and leaves one question open: what makes the subscription worth renewing? If the product keeps working in the hands of somebody who stopped paying, renewing is a donation.
A membership license ties the two ends together. While the person is a member, their copy runs. When the membership ends, it stops. When they come back, it runs again. Large professional software has worked this way for years; what is newer is binding the key to a membership in a community rather than to a single purchase.
How it works: a key, a check, and a grace window
Three pieces, and each one solves an obvious problem.
- The key. A long random string belonging to one member and one product. A careful platform stores it scrambled rather than as written, so nobody reading the database can read the keys.
- The check. Your product sends the key to one address and gets a short answer back: valid or not valid. A few lines inside your product, and no server for you to run.
- The grace window. Every yes comes with a signed expiry. The product keeps the approval for that long and does not ask again until it goes stale, so it works offline. The signature stops anyone editing a file on their own machine to extend it.
The grace window is what makes the idea usable. Without it, an internet connection becomes a requirement to run the product, and your customer stops working on a plane. With it, the worst case is that somebody who left keeps working for a few more days — a very fair price for a product that does not break.
The question that matters most: what happens when the license server is down
This is what separates a design you can trust from one you cannot. Your product asks, and no answer comes: the connection dropped, the platform is down, the reply timed out. What should the product do?
It should keep working. Only an explicit refusal — an answer that clearly says this key is revoked or unknown — may stop a product. Silence, an error and a timeout are not refusals, and treating them as refusals means somebody else's outage breaks your product in front of your customer.
In one line: fail open on doubt, fail closed on certainty. Ask about this exact behaviour before you build on any platform, and read the code you are told to paste into your product. If it treats a network failure as a revocation, your reputation is the one that pays.
What can honestly be licensed, and what cannot
The boundary is simple: things that run can be licensed, things that do not, cannot. A check is the product phoning home, and a static file cannot phone anywhere.
- A plugin, a script, an app, a bot: it executes, so it can ask, and you can stop it running. Licensing here is real.
- An image, an audio file, a document, a pack of presets: downloaded once and kept. Nothing in it asks anybody anything, and there is no way to take it back afterwards.
So calling a static file licensed is a claim nobody can enforce. The honest mechanism for those is the door itself: membership is what allows the download, and someone who leaves does not get the next version. That is true and useful — it is simply not a license, and it should never be sold as one.
What to ask of any platform
Six questions are enough to judge any implementation of this idea:
- Does the key die at the same moment the membership does, or on a monthly cycle or a nightly job?
- If the member comes back, does their old key come back, or do they have to paste a new one into your product?
- How long is the grace window, who sets it, and is the answer signed so it cannot be forged?
- What does the endpoint say when the platform is down: "I cannot answer", or "not valid"?
- How many lines does integration take, and do you need a server or database of your own?
- Is the license switch offered on things that could never be enforced? A platform that lets you license a static file is selling you an appearance, not a mechanism.
A worked example: how Nadi does it
Nadi is a community platform, so this is the part where we describe our own product. Only what it does today.
- An owner marks an item in their community's library as licensed, and every member gets their own key, shown on the item card with a copy button.
- The key verifies while the membership lives, and reads REVOKED the moment it dies — whether the member left, was removed, or their subscription lapsed.
- When they rejoin, the same row revives, so nobody has to paste a new key into anything.
- Integration is roughly ten lines in your product. It checks the key once a week and keeps working offline in between.
- The grace window is seven days by default, and the answer is signed, so your product can tell our grace token from a file somebody edited on their own machine.
- The endpoint fails open. When we cannot answer, we say so, and we never say "not valid" instead. An outage on our side is never dressed up as a revocation.
- The owner sees who is using the item, each holder's state — working or stopped — and when their product last checked in.
- Publishing a new version of the item notifies the key holders only, not the whole community.
- The refusal message a lapsed member sees names the community and says what brings the product back: rejoining it.
The honest limits
Links are the only thing that can be licensed on Nadi today. Every file type the library accepts — pdf, zip, png, jpg, mp3, cube — is a file that runs nothing, so no license over it could ever be enforced after the download, and the switch is not offered on them at all. A file a member downloads and keeps is never called licensed anywhere in our product; its honest mechanism is the door, where membership is what allows the download. The list is forward-compatible: the day the library accepts a file type that runs code, licensing becomes available on it by itself.
Failing open is a commitment rather than a gap. The endpoint answers "unavailable" when it cannot ask the database, and the snippet we hand you treats anything that is not an explicit answer as permission to keep running. That means somebody who left may keep working until their grace window runs out, and we accept that on purpose: other people's products must not break because a deploy of ours hiccupped.
Two last limits. A key comes with membership, and there is no way to hold one today without joining. And a key that gets shared is still one key bound to one membership — it stops when that membership stops.