Skip to main content

License

The License page displays your GEM installation's license status, allows activating or upgrading a license key, and shows device and zone usage against your plan limits.

Open License

License Status

The status card shows:

  • Tier -- Your license tier (Trial, Opal, Sapphire, Diamond, Integrator, or Development)
  • Status -- Current license state (active, trial, expired, or suspended)
  • Trial Remaining -- Days left in trial period (trial licenses only)
  • Expires -- License expiration date (if applicable)
  • Devices -- Current device count vs. plan limit (or Unlimited)
  • Zones -- Current zone count vs. plan limit (or Unlimited)
  • License Key -- The activated license key (if present)

Click Refresh Status to re-check license status with the license server.

License States

StatusMeaning
ActiveLicense is valid and all features are available
TrialFree trial period is active with a countdown of remaining days
ExpiredLicense has expired -- existing devices and zones continue to work, but new ones cannot be added
SuspendedInstallation has been suspended -- contact support

License Tiers

TierPriceDevicesZonesMulti-siteNotes
Trialfreeunlimited during trialunlimited during trial
Opal$1,50025100no
Sapphire$3,00075500no
Diamond$5,000unlimitedunlimitedyes
Integrator$10,000unlimitedunlimitedyesMulti-tenant management, white-label
Developmentunrestricted in dev modeunrestricted in dev mode

Every paid license is perpetual and includes:

  • 1 year of Care — software updates + email support
  • 1 year of Cloud Services — cloud tunnel, push notifications, mobile app, remote access

After year 1, customers can renew Care (Basic $50/mo or Priority $175/mo) and/or Cloud Services ($20/mo or $200/yr) independently. Local-only deployments don't need Cloud Services. Without renewal, the license remains active indefinitely (perpetual) — only updates and cloud features stop.

Licenses stay active indefinitely once activated. GEM caches the license status and continues working even when the license server is unreachable — only the server can mark an installation suspended or expired (delivered on the next successful check).

Grandfathered Installations

Installations that existed before licensing was introduced are automatically granted the Diamond tier with the Grandfathered flag set. Grandfathered Diamond licenses:

  • Never show the trial/expiry banner.
  • Never display the Activate License form prominently (it's collapsed behind a disclosure).
  • Continue to work indefinitely even if the license server is unreachable.
  • Are visually marked with a "Grandfathered" badge on the License page.

If a new install predates licensing but hasn't yet contacted the license server, the server grandfathers it on first contact when it reports devices -- no manual intervention required.

License Enforcement

  • Device and zone limits are enforced when adding new devices or zones. Existing devices and zones are never disabled.
  • Expired licenses prevent adding new devices and zones but do not affect existing operation.
  • Update window — software updates are gated by the license's updates_included_until date. After it passes, existing devices/zones continue to work but new updates will not install until Care is renewed.
  • Cloud Services window — cloud tunnel, push notifications, mobile app, and remote access are gated by the license's cloud_services_until date. After it passes, local features keep working; cloud features require a Cloud Services subscription.
  • Fresh installations that have never contacted the license server are unrestricted until the first successful check lands.
  • GEM checks license status automatically every 6 hours.

Activate License

Enter a license key in the format GEM-XXXX-XXXX-XXXX-XXXX and click Activate. The key is verified with the license server and the license status updates immediately on success.

Activation requires an internet connection to reach the license server.

Installation Info

The Installation Info card displays:

  • Installation ID -- a unique identifier for this GEM installation. When purchasing a license, provide this ID to info@harnessautomation.com.
  • License Server Key -- the short identifier of the baked-in license server public key this controller trusts. A key change here indicates a controller update that rotated the trusted signing key.
  • Response Verification -- status of the last license response:
    • Signed & verified (green) -- response was wrapped in a signed envelope and the signature verified against the trusted server key.
    • Unverified (transition window) (orange) -- response arrived without a valid signature, but was accepted because the enforcement cutoff has not yet passed. After the cutoff, unverified responses are rejected and the controller falls back to the cached license.
    • Not yet checked (gray) -- no license check has completed since startup.
  • Client Auth -- status of this controller's outbound client-signing keypair:
    • Registered with license server (green) -- the controller's public key has been accepted by the license server (TOFU registration complete). Subsequent license requests are signed with the private key stored in .license_signing_key.
    • Pending first successful check (gray) -- registration will be attempted on the next license check or activation.
info

License responses are cryptographically signed. The private key that signs them lives on the license server; the corresponding public key is baked into each controller build. Controllers sign their outbound requests with a per-installation Ed25519 keypair and register the public key with the license server on first contact.

Information Collected

To support your installation and detect unauthorized cloning of licensed deployments, each license check includes a small hardware fingerprint:

  • hostname, machine_id (stable OS-level identifier), product_uuid (motherboard UUID)
  • cpu_model, cpu_count, total memory, architecture, OS platform/release
  • Primary MAC address, Node.js runtime version

This information never leaves the license server and is used only for support, inventory, and to alert administrators when the same installation ID appears on different hardware. No device, zone, or user data is transmitted as part of licensing.

Admin Banner

When the license requires attention, a banner appears at the top of the admin interface:

  • Info (blue) -- Trial with more than 7 days remaining, or active license nearing expiry
  • Warning (orange) -- Trial with 7 or fewer days remaining
  • Error (red) -- License expired or suspended

The banner includes a link to the License page for activation. Non-critical banners can be dismissed.

Support Bundle

The Support Bundle section provides a one-click diagnostic upload for support requests. Click Send Support Bundle and the controller assembles and uploads:

  • Recent system logs (journalctl -u gem, last ~1500 lines, when running under systemd)
  • A redacted copy of gem.json — passwords, API keys, and other secrets are stripped before sending
  • License status, installation ID, and version
  • Device, zone, subsystem, and UI page counts
  • Hardware fingerprint and a health snapshot (uptime, memory, load average, database size, tunnel state)

On success, the License page displays a reference number — quote it when emailing support so the team can locate the bundle.

info

Bundles are signed and uploaded to the update server. They never include device, zone, attribute, or user data — only configuration and operational telemetry.

  • Updates -- License status is checked alongside update checks
  • Devices -- Device limits are enforced by the license
  • Zones -- Zone limits are enforced by the license