Skip to main content

License

The License page displays your GEM installation's license status, the features included in your license, and lets you activate or upgrade a license key.

Open License

License Status

The status card shows:

  • License -- GEM License, Trial, 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 / Zones -- Current counts. Devices and zones are unlimited on every license.
  • License Key -- The activated license key (if present)

The Licensed Features card lists the premium drivers and feature modules included in your license. During a trial — or in development mode — every feature is available.

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
UntrustedThe license signature could not be verified -- existing devices and zones keep running, but new ones cannot be added until the license is reactivated
UnverifiedThis installation has never completed a license check -- after a two-week grace window, new devices and zones cannot be added until the first check succeeds. Allow HTTPS access to updates.mygem.us and click Refresh Status; the state clears immediately on the first successful check

What a License Includes

GEM uses feature-based pricing: you buy the platform plus exactly the premium integrations and capabilities you need. Devices and zones are unlimited on every license — there are no count tiers.

ComponentWhat it unlocks
GEM PlatformAlways included — core drivers, automation engine, auto-generated site UIs, RBAC, mobile app, unlimited devices/zones/sites
Premium DriversIndividual integration products (e.g. Lutron, BACnet, Modbus, KNX). Each unlocks a whole driver family; core drivers are always free
Feature ModulesCross-cutting capability layers that work across drivers: AV System, Access Control & Visitor Management, Network Monitoring, Custom Driver Authoring, Web Services, and Custom UI & Widgets

Build your license — and see current pricing — on the purchase page. The Upgrade License button opens it pre-filled with your installation ID.

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 a paid installation suspended or expired (delivered on the next successful check).

Trials are the exception: a trial carries a signed, absolute expiry date and will lock once that date passes (plus a short grace window for clock skew) even with no network connection — so a trial can't be made perpetual by activating once and going offline. Paid and perpetual licenses are never expired locally.

Brand-new installs must check in once: an installation that has never completed a license check gets a two-week grace window, after which it shows Unverified and blocks adding new devices and zones (everything already configured keeps running). The first successful check clears it permanently — this only affects installs that can never reach the license server.

Grandfathered Installations

Installations that existed before licensing was introduced are automatically granted full access (all premium drivers and feature modules) with the Grandfathered flag set. Grandfathered 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

  • Premium drivers — adding a device that uses a premium driver requires that driver's product in your license. Core drivers are always available. Existing devices are never disabled, even if a license later changes.
  • Feature modules — creating items owned by a module (AV zones/sources, channels, access groups, holiday calendars, monitors, custom drivers, web services, custom UIs/pages/widgets/themes) and using module-only capabilities (inbound web-service API, the script console, network discovery) require the corresponding module. The auto-generated site UI and rendering of any already-built UI are always free. Trials and development builds unlock everything; existing data keeps working.
  • Devices and zones are unlimited — there are no count caps.
  • Expired licenses prevent adding new devices, zones, and module-owned items 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.
Tamper-evident enforcement

Enforcement is based on the signed license envelope, not on the cached status values stored in the database. The most recent verified envelope is persisted and re-verified against the trusted server key on every boot, so editing cached license values (status, tier, device/zone limits) in the database has no effect on what is enforced. If the stored envelope is missing or fails verification on a build that requires signing, the controller holds at a safe floor — every existing device, zone, macro, and automation keeps running, but adding new devices or zones is blocked until the license is reactivated. Recovery is automatic: the next successful activation or license check stores a fresh verified envelope and clears the safe floor.

During the signing rollout, grandfathered and diamond (unlimited) licenses are exempt from the safe floor through a transition window so a legitimate unlimited install that crosses the signing cutoff before capturing its first envelope — for example one that was powered off or offline during the rollout — keeps running normally instead of being flagged untrusted. Because an unlimited grant has no device/zone cap, there is nothing to evade by deleting the envelope, so flooring it would be pure downside. This carve-out is time-boxed: once the transition window closes, every tier — including diamond — floors uniformly when the envelope is missing after the signing cutoff, fully restoring anti-rollback. Capped tiers (trial, standard, term) always floor.

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.

If the upload fails, the message distinguishes the failure mode: the support server may reject an oversized bundle (HTTP 413), in which case the attempt is still logged locally and you should email support directly; any other rejection reports the server's status code; and a connection that never reaches the server prompts you to check your internet connection.

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 -- Premium drivers are enforced by the license when adding devices
  • Zones -- Zones are unlimited on every license