Skip to content

Licensing (Umbryx EE)

Applies to EE only — Core runs without any license. Operator-facing summary; the full lifecycle description lives in Umbryx EE.

Where things live

System → License (platform admin):

License activation

  • Current state: tier, lifecycle stage (active / grace / wind_down), expiry
  • Activation card (unlicensed): download the activation request (umbryx-activation-request.c2v.json), Check now, and .lic import for air-gapped installs
  • Channel toggle: online (24 h heartbeat renewal) / offline

Activation

One file in each direction — the machine identity (fingerprint, hwid, instance key, nonce) travels inside the activation request file, so nothing else needs copying back and forth.

  1. Download the activation request on the instance and send the .c2v.json to your vendor.
  2. The vendor binds it to a license in the License Server admin (license → Activate → upload the activation request file).
  3. Online: nothing to upload back — the instance polls the license server every few minutes while unlicensed and applies the token automatically the moment the binding exists (Check now pulls it immediately). Renewal afterwards is the normal 24 h heartbeat (LICENSE_SERVER_URL, default https://update.umbryx.pro).
  4. Air-gapped: the vendor also downloads the signed .lic and sends it back → Import .lic on the instance → switch the channel to offline. No outbound calls in that mode.

Renewal outcomes: renewed, or inactive (server reports no license → grace clock starts); an unreachable server changes nothing until contract expiry. Re-binding to new hardware is a vendor action — the admin presses Activate with a fresh activation request file (or resets the device binding first).

What the license controls

Tier limits (members, infrastructure instances, workstations, audit retention) and feature flags (cloud provider classes, SSO, plugin upload, multiple organizations, …) travel inside the signed token; GET /api/system/license/state reports them. Manual per-org plan overrides exist (PATCH /api/marketplace/plans/{org_id}) and are left alone by heartbeat.

Wind-down behavior

After expiry + grace (default 14 days):

  • Mutations return 402 (the UI shows a non-dismissible banner)
  • Viewing, export, and teardown keep working
  • Nothing is deleted; deployed infrastructure is never stopped by the platform

Troubleshooting

Symptom Diagnosis
402 on writes license in wind_down — upload a renewed token
Heartbeat unreachable in logs license server unreachable from the instance (network/proxy) — harmless until contract expiry
Token rejected on upload wrong instance: the token binds hardware hashes + the instance key (re-host requires re-activation)