Skip to main content
A bound offline license file (.authforge) is locked to one or more hardware ids. The operator cannot mint that file until they have the id from the same app (2.0+ SDK) that will later call loginFromFile. Do not ask the customer to type the HWID into an email. Email truncates, line-wraps, autocorrects and adds trailing whitespace; every one of those fails later as hwid_mismatch and looks like a product bug. Prefer an activation request file (.authforge-request) that the SDK writes and the dashboard checksums.

Surface it in the product

Recommend a copy-to-clipboard control on an About, Settings or Support screen (or a --hwid CLI flag). The getter is already public in every official SDK; you do not need a network call or an app secret.
An offline-only client constructed with just appId and publicKey can do this. No login(), no app secret, no network.

It is per app, not per SDK

Since SDK 2.0.0, every SDK reports the same HWID for the same app id and machine: a Node getHwid() equals a C# GetHwid(). The app id is part of the hash, so a different app on the same machine reports a different value. Collect it from the app that will load the file. HWIDs from pre-2.0 SDKs do not match; see HWID locking.

When it changes

HWID is derived from the operating system’s machine id (macOS IOPlatformUUID, Linux /etc/machine-id, Windows MachineGuid). Network changes, renaming the computer, disk usage and USB devices do not change it. Reinstalling the OS (Linux, Windows) or replacing a Mac’s logic board does. The customer should expect to send a new request (and receive a new .authforge file) after that. Cloned VMs and disk images can share one id; containers should use hwidOverride. See HWID locking.

If they already pasted a string

Before you mint:
  1. Strip whitespace.
  2. Check for a line-wrap in the middle of the hex.
  3. Ask for a .authforge-request instead.
A bound file minted to a damaged string is a wasted credit and another support ticket.