Licensing
Loopwave is licensed per tenant: one deployment = one business = one license. The license is verified offline using a built-in public key, so your deployment never has to phone home to keep working — but a customer can never forge a longer expiry, because only the vendor holds the signing key.
How a license key works
A license key is a signed token of the form LW1.<payload>.<signature>. The payload
carries the tenant id, plan, add-ons, issue date, expiry, and an optional bound domain.
Loopwave ships only the public key and verifies the signature with it — the
private signing key stays with the vendor, off your server.
The state machine
A license moves through these states:
| State | Meaning |
|---|---|
active | Valid and within its term. |
grace | Expired, but inside the grace window — still fully working. |
expired | Past the grace window. Writes lock in enforce mode. |
revoked | Cancelled by the vendor (sticky until a new key is activated). |
invalid | Signature or format failed verification. |
unlicensed | No key activated. |
Monitor vs. enforce
LICENSE_MODE decides what happens when a license is invalid:
Loopwave reports the license state but never blocks anything. Useful during development.
When the license is expired, revoked, or invalid, writes are blocked (a write
returns HTTP 402) while reads always pass. Shipped tenant builds run in
enforce mode.
Loopwave follows an “antivirus” model: deactivate, never destroy. Even when locked, your data is fully readable and is never hidden or deleted — only new writes are paused until the license is renewed.
Grace period
When a license expires, Loopwave enters a grace state for LICENSE_GRACE_DAYS
(default 7). During grace the deployment keeps working normally, giving you time to
renew before any lock takes effect.
Domain binding & machine fingerprint
- A key may be domain-bound — valid only when served from a specific host. A mismatch
marks the license invalid with a
domain_mismatchreason. - Loopwave captures a machine fingerprint at activation and re-checks it on every state read, so a key issued for one machine isn’t silently reused on another.
Optional remote revocation
If LICENSE_SERVER_URL is set, Loopwave periodically checks it so the vendor can revoke
a key remotely. A network failure to that server never locks a working tenant — the
offline signature remains the source of truth.
Activating and refreshing
License management lives in Settings → Billing & License (admin-only), and a key can also be adopted automatically during the install wizard.
- Activate
Paste your key to activate or replace the current license.
- Refresh
Force an immediate re-check (and remote validation, if configured) to pull the latest state — for example, right after a renewal.
Any signed-in user can view the current license state (it powers the Settings panel); only admins can activate or refresh.
Configure license variables→Set mode, public key, and grace days.