C++ Client Library Changelog
Every change to the KEYZY C++ Client Library, newest first. The latest version is on the C++ Static Library download page. What to change in your code when you upgrade is in the Upgrade Guide.
1.10.2
Released 2026-11-11.
- Added: KeyzyLicenseActivator::migrateHostIdV1toV2(HostIdMigrationMode): moves a product released with HostIdScheme::V1 to HostIdScheme::V2 on the end user’s device, without user input. Construct the activator with HostIdScheme::V2 and call it on every start, in place of the first step of your start-up flow. It returns HostIdMigrationResult { status, state }; on HostIdMigrationState::StayedOnV1, use an activator constructed with HostIdScheme::V1 for the rest of that run. Semi-online and online activation are supported, offline activation is not. See “Moving a released product to V2” in the documentation.
- Added: HostIdMigrationMode, HostIdMigrationState and HostIdMigrationResult. They will be removed together with migrateHostIdV1toV2() in a later release, after it has been marked deprecated.
- Changed: Activations now show the SDK version and the host id scheme in the Device Tag column of the KEYZY dashboard, for example “Mac OSX 26.5__64bits__sdk-cpp-1.10.2__hostid-v2”. No code change needed.
- Changed: Recommended upgrade path for products released on an SDK before 1.10.0: keep HostIdScheme::V2 and call migrateHostIdV1toV2() on every start, instead of staying on HostIdScheme::V1. This needs a change in your start-up flow. Products sold with offline licenses still stay on V1.
1.10.1
Released 2026-10-26.
- BREAKING: KeyzyLicenseValidator::getHostIdHash() no longer throws CannotReadHostIdError; it returns an empty string when the device identifier cannot be read. If you catch the exception around this call, check for an empty string instead.
- Fixed: Creating KeyzyLicenseActivator no longer throws CannotReadHostIdError when the device identifier cannot be read; validateOffline() and activateOffline() return LicenseStatus::CANNOT_READ_HOST_ID instead. An existing try/catch around the constructor keeps compiling but is no longer needed.
- Fixed: End users no longer have to re-enter their serial number after starting the application without network access, or after a temporary server-side error.
- Changed: When a license stops for a reason that can be undone (for example an expired subscription, or a product or SKU switched off), the end user no longer has to re-enter the serial number once the cause is fixed. To benefit, call activateSemiOnline() without a serial number before asking the user for one (see the updated semi-online activation tutorial).
1.10.0
Released 2026-09-24.
- BREAKING: Host ID scheme V2 is now the default. For a product released on an SDK version before 1.10.0, set ProductData::_hostIdScheme = HostIdScheme::V1 when upgrading unless you have decided to move to V2; otherwise device host ids change and all existing activations require re-activation.
- Added: Host ID scheme v2, selectable per product via the new ProductData::_hostIdScheme parameter (enum HostIdScheme: V1 / V2). V2 uses more stable hardware information: the host id survives network changes and OS reinstalls. On Linux, V2 is identical to V1.
- Fixed: LicenseStatus::NETWORK_PROXY_REQUIRED is now actually produced. It shipped in 1.9.0 but could never be returned: with HTTPS the proxy answers the CONNECT handshake, so its 407 never appears as the response status of the request itself. The SDK now reads the CONNECT result and reports NETWORK_PROXY_REQUIRED when a proxy refuses the tunnel until the client authenticates.
- Added: CANNOT_READ_HOST_ID error code to LicenseStatus, and the CannotReadHostIdError exception. Returned under scheme V2 when the device identifier cannot be read.
- Deprecated: Client-only trials: activateClientTrial(), deactivateClientTrial(), validateTrialLicense(), getDaysToExpireTrial(), KeyzyLicenseManager::setTrialLicense() / deleteTrialLicense(), KeyzyUtils::getTrialLicenseFile() / getRegistryPathToTrial(). They are validated purely against the local clock with no server-side protection and will be removed in a future release. Use server-side trials (LicenseDepositHandler::registerTrial()) instead.
1.9.0
Released 2026-06-03.
- Added: KeyzyLicenseValidator::getDealerName(). For dealer-distributed licenses the SDK now exposes the issuing dealer’s name, so the partner application can display it. Non-dealer licenses return an empty string.
- Added: Finer-grained network failure statuses on LicenseStatus: NETWORK_DNS_FAILED, NETWORK_REFUSED, NETWORK_TIMEOUT, NETWORK_TLS_FAILED, NETWORK_PROXY_REQUIRED, NETWORK_HOSTS_TAMPERED. Integrations can now tell connectivity problems apart and show a more specific message instead of a single CONNECTION_ERROR.
- Changed: CONNECTION_ERROR is now the fallback for network failures that do not match a specific NETWORK_* status. Existing switch(status) code keeps working unchanged; the new statuses are reached only when partner code adds explicit cases.
1.8.0
Released 2026-05-07.
- Changed: registerTrial() and registerOfflineDistributedLicense() now require a non-empty email parameter. Server-side hardening on 2026-04-20 made email mandatory; the client mirrors this and rejects empty-email calls early with LicenseStatus::EMAIL_VALIDATION (no network round-trip).
- Added: SERIAL_VALIDATION, CODE_VALIDATION error codes to LicenseStatus, mapped from per-field 422 server responses on register-trial and register-offline-distributed.
- Deprecated: LicenseStatus::NAME_OR_EMAIL_VALIDATION. The server no longer emits the underlying message after 2026-04-20 hardening. Kept for ABI compatibility.
1.7.1
Released 2026-04-16.
- Fixed: Windows dynamic runtime (MD) library configuration corrected for all build variants. Static runtime (MT) builds were not affected.
1.7.0
Released 2026-03-17.
- Added: Single-parameter upgradeLicense(targetSerial) in KeyzyLicenseActivator. Uses the stored serial as the source automatically.
- Changed: Improved HTTP networking layer.
- Added: Multiple security hardening improvements.
- Changed: Linux TLS backend switched from OpenSSL to mbedTLS (no system dependency needed).
- Changed: Platform TLS backends: Secure Transport (macOS), Schannel (Windows), mbedTLS (Linux).
1.6.1
Released 2026-02-18.
- Removed: Deprecated validateLicenseSerial() and validateLicenseFile() functions. Use validateOnline() and validateOffline() instead.
- Fixed: Security improvements.
1.6.0
Released 2023-09-29.
- Added: LicenseDepositHandler::registerOfflineDistributedLicense() function. Now, the client-side can register an offline license.
- Fixed: LicenseStatus::CONNECTION_ERROR bug. It was blocked in the 1.5.0 version and cannot be used.
- Added: New errors to the LicenseStatus Enum.
1.5.0
Released 2023-06-20.
- Added: LicenseDepositHandler class with registerTrial() function. Now, the client-side can request a trial license using the registerTrial() function.
- Added: std::uint64_t getDaysLeft() and std::uint64_t getDaysTotal() to the KeyzyLicenseValidator class. They are meaningful for Trial and Subscription licenses. getDaysLeft() also works for the Offline License Life parameter of Perpetual licenses.
- Added: std::uint64_t getDaysLeft() and std::uint64_t getDaysTotal() to the KeyzyLicenseValidator class.
- Added: A new constructor to the ProductData struct. It can now be created using the constructor.
- Added: LicenseType getLicenseTypeEnum() to the KeyzyLicenseValidator class.
- Added: LicenseInfo struct to the KeyzyTypes.h file.
- Added: LicenseType enum class to the KeyzyTypes.h file.
- Added: NO_FREE_LICENSES error code to the LicenseStatus enum class.
- Added: SKU_NUMBER_VALIDATION, PRODUCT_CODE_VALIDATION, NAME_VALIDATION, EMAIL_VALIDATION error codes to the LicenseStatus enum class.
- Added: ANOTHER_TRIAL_LICENSE_ALREADY_ACTIVATED error code to the LicenseStatus enum class.
1.4.0
Released 2022-10-10.
- Added: Info parameter (KeyzyLicenseValidator::getInfo())
1.3.0
Released 2022-06-03.
- Added: StartTime parameter (KeyzyLicenseValidator::getStartTime()) for Trial and Subscription licenses
- Added: EndTime parameter (KeyzyLicenseValidator::getEndTime()) for Trial and Subscription licenses
- Added: LicenseType parameter (KeyzyLicenseValidator::getLicenseType())
1.0.1
Released 2022-01-28.
- Fixed: Crash for some VirtualBox images.
1.0.0
Released 2021-12-03.
- Added: Upgrade license functionality (KeyzyLicenseActivator::upgradeLicense()).
- Removed: All asserts were removed. Those make problems in Windows Debug mode.