Skip to content

Admin guideOperating

Licensing

What a license key is, what it gates, and why a lapse never takes a running app down.

View as Markdown

Enter the key in Admin → License. Admin → Features shows what this build offers, what the license covers, and what you have switched on.

A key looks like TOFT1-K7QN4-8XZR2-M3TWD-6BVHC. It names a customer, not an install, and carries no entitlements or signature — the install checks its shape and checksum locally and asks the vendor’s service what it covers. It is plain text, audited in the clear and readable back in full; there is nothing to rotate.

Four tiers, derived from the vendor’s answer and never stored: demo, free, trial, paid. The vendor’s plan maps to a tier on the vendor’s side; nothing here infers one from a plan name. An install with no key is on demo.

Gated by tier:

Entitlement
dependency_policy Dependency policy
identity_providers, groups Sign-in providers and groups
app_storage App storage
telemetry Telemetry
trusted_sources Trusted sources
integrations, slack Integrations
public_apps Public apps

Unlike an unconfigured optional capability, which is hidden, a capability your tier withholds is shown as locked.

A license gates configuration, never operation.

Behavior
Running apps Keep serving. Publishing is gated on the change, so an already-public app stays public
Switching things off Never gated — telemetry, exporters, source policy, uploads can all be turned off after a trial ends
License server unreachable Nothing changes; every failure resolves to the tier you already hold
Losing a tier Only on an explicit adverse verdict from the vendor, after weeks of warning
Counts No tier has a seat or install cap. Demo and free refuse creation past a count, nothing more

An install with no key never contacts the vendor. The endpoint is compiled in — there is no variable or setting to change it — and a private address is refused. An install whose egress is blocked never checks in; it keeps its last answer, and nothing is withdrawn.

The check-in payload contains no names — no apps, users or hostnames — and every value is type-checked before it is sent. Usage counts are sent by default; turn them off with license.send_usage (one count is always sent on a paid license).