> For the complete documentation index, see [llms.txt](https://docs.nalpeiron.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.nalpeiron.com/zentitle2-docs/developers/the-licensing-client-.net/release-notes.md).

# Release Notes

{% hint style="info" %}
Credentials to our package registry can be created in the Zentitle2 interface (Administration -> API Credentials -> Package Registry)
{% endhint %}

## 3.4.1

September 2, 2026

**Bug Fixes**

* Fixed C++ native library loading on 32-bit Windows

Download: [Zentitle.Licensing.Client.3.4.1.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/3.4.1/Zentitle.Licensing.Client.3.4.1.zip)

## 3.4.0

May 29, 2026

**Changes**

* Updated Zentitle2Core native library integration to support the new C++ status-code based contract (introduced in version [v3.0.0](https://docs.nalpeiron.com/zentitle2-docs/developers/the-licensing-client-.net/pages/2JsN9GIX1micixmxFYj4#v3.0.0)), including native status codes on `Zentitle2CoreException`.
* Increased the secure storage payload limit from 10,000 bytes to 1 MiB of UTF-8 encoded data.
* Improved secure storage reliability for concurrent reads.
* Changed secure storage behavior for empty values: empty strings are now rejected instead of being stored and later read as `null`.<br>

**Behavior Change:**\
Empty secure-storage values are no longer accepted. Attempts to save an empty string now throw `Zentitle2CoreException` instead of storing a value that is later read as null. The native error code is available through the `NativeStatusCode` property

Download: [Zentitle.Licensing.Client.3.4.0.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/3.4.0/Zentitle.Licensing.Client.3.4.0.zip)

## 3.3.0

November 7, 2025

**New Features**

* Added support for application events tracking

**Bug Fixes**

* Fixed an issue where a `NullReferenceException` was thrown when performing feature checkout or return operations in offline mode. The SDK now correctly throws an `IllegalActivationOperationException`, indicating that these operations are not supported in offline mode.

Download: [Zentitle.Licensing.Client.3.3.0.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/3.3.0/Zentitle.Licensing.Client.3.3.0.zip)

## 3.2.0

October 14, 2025

**Changes**

* Targeting **Licensing API** version **2025-10-10**
* Added `CurrentUsagePeriodStart` and `NextUsagePeriodStart` properties to the `IActivationFeature` interface, exposing feature usage reset capabilities.
* Removed properties associated with the **linger feature** from the data models.

Download: [Zentitle.Licensing.Client.3.2.0.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/3.2.0/Zentitle.Licensing.Client.3.2.0.zip)

## 3.1.0

July 25, 2025

**New Features**

* Added support for `editionId` hint that allows consumers to activate specific edition of a product to make required features available to end users. `editionId` is an optional argument with `Activate` call.
* Added `Attributes` property of type `IAttributeSet` to `IActivation` interface, placing alongside the existing `Features` property, for easier access.

**Changes**

* Marked `Features` and `Attributes` properties in `ActivationInfo` class as obsolete to encourage migration to the new interface-based approach.

**Note**: Obsolete features will be removed in version 4.0.0. Please migrate to the new interface-based approach for attribute and feature management.

Download: [Zentitle.Licensing.Client.3.1.0.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/3.1.0/Zentitle.Licensing.Client.3.1.0.zip)

## 3.0.1

June 27, 2025

**Bug Fixes**

* The `IActivation.Features` and `IActivation.Info.Features` had inconsistent state after refresh operation (both online and offline) once there were changes made to entitlement on server side.

Download: [Zentitle.Licensing.Client.3.0.1.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/3.0.1/Zentitle.Licensing.Client.3.0.1.zip)

## 2.2.4

June 27, 2025

**Bug Fixes**

* The `IActivation.Features` and `IActivation.Info.Features` had inconsistent state after refresh operation (both online and offline) once there were changes made to entitlement on server side.

Download: [Zentitle.Licensing.Client.2.2.4.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/2.2.4/Zentitle.Licensing.Client.2.2.4.zip)

## 3.0.0

April 28, 2025

**Enhanced Concurrency Management**

* Added native support for system-wide locking through the new `ISharedActivation` interface
* Removed `UseActivationOperationLock` from activation options (custom lock implementations are no longer needed; use `ISharedActivation` for cross-process scenarios)

**Simplified API Design**

* Moved all feature-related operations (`CheckoutFeature`, `ReturnFeature`, `TrackFeatureUsage`) from `IActivation.Features` to the `IActivation` interface for more intuitive usage
* All feature operations now use the `IActivationFeature` interface as input for more reliable access
* When a feature action succeeds, `IActivationFeature` represents the current state of the feature, including recent changes from other activations

**Improved Documentation**

* Enhanced exception information throughout the API
* Extended the list of possible error responses from the server through the `ApiErrorCodes` static class
* Added comprehensive documentation for common error scenarios

Download: [Zentitle.Licensing.Client.3.0.0.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/3.0.0/Zentitle.Licensing.Client.3.0.0.zip)

## 2.2.3

November 21, 2024

**Improvements**

* The `IActivation.DeactivateOffline()` method permitted in the `EntitlementNotActiveState`.

Download: [Zentitle.Licensing.Client.2.2.3.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/2.2.3/Zentitle.Licensing.Client.2.2.3.zip)

## 2.2.2

November 18, 2024

**Improvements**

* The `IActivation.Deactivate()` method is now permitted in the `EntitlementNotActiveState`. Instead of raising an `IllegalActivationOperationException`, it clears the local state storage and transitions the activation instance to the `NotActivated` state.

Download: [Zentitle.Licensing.Client.2.2.2.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/2.2.2/Zentitle.Licensing.Client.2.2.2.zip)

## 2.2.1

November 8, 2024

**Bug Fixes**

* The client (version 2.2.0) would previously throw an exception when calling `IActivation.RefreshLease` method in a specific scenario: `ActivationStateModel.LeaseExpiry` equals the Entitlement Expiry Date (because the previous `RefreshLease` already extended the lease to the maximum, which is Entitlement Expiry Date). This is a new behavior introduced with [API version 2024-11-07](https://license.nalpeiron.io/docs?version=2024-11-07#section/Changelog). After this fix, the method will NOT throw an exception but will return `false` to indicate that the Activation Lease Expiry can no longer be prolonged.

Download: [Zentitle.Licensing.Client.2.2.1.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/2.2.1/Zentitle.Licensing.Client.2.2.1.zip)

## 2.2.0

November 6, 2024

**Improvements**

* Using Licensing [API version 2024-11-07](https://license.nalpeiron.io/docs?version=2024-11-07#section/Changelog)
* Performance - Activate and Feature Activate/Return operations now refresh the Activation state from response instead of an extra call to the Get Activation State endpoint.

Download: [Zentitle.Licensing.Client.2.2.0.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/2.2.0/Zentitle.Licensing.Client.2.2.0.zip)

## 2.1.0

**Improvements**

* The `activation.Info.Entitlement` object has been extended with the following properties to eliminate the need to retrieve entitlement information through the Licensing API:
  * `ConcurrencyMode`
  * `HasManintenance` and `MaintenanceExpiryDate`

Download: [Zentitle.Licensing.Client.2.1.0](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/2.1.0/Zentitle.Licensing.Client.2.1.0.zip)

## 2.0.0

**Improvements**

* Added support for[ Zentitle2Core Library](/zentitle2-docs/developers/the-licensing-client-.net/zentitle2core-library.md) integration, including the following features:
  * Device Fingerprint
  * Offline Activation
  * Secure Storage
* Removed dependency on the `Microsoft.IdentityModel.Tokens` NuGet package

**Breaking Changes**

* [Offline activation](/zentitle2-docs/developers/the-licensing-client-.net/zentitle2core-library.md#offline-activation) requires Zentitle2Core Library integration, and it accepts the `TenantRsaKeyModulus` string parameter instead of the `JsonWebKey` object
* `FileActivationStorage` has been renamed to `PlainTextFileActivationStorage`

Download: [Zentitle.Licensing.Client.2.0.0](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/2.0.0/Zentitle.Licensing.Client.2.0.0.zip)

## 1.4.6

Download: [Zentitle.Licensing.Client.1.4.6.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/1.4.6/Zentitle.Licensing.Client.1.4.6.zip)

**Improvements**

* Added support for bool features usage tracking

## 1.4.5

Download: [Zentitle.Licensing.Client.1.4.5.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/1.4.5/Zentitle.Licensing.Client.1.4.5.zip)

**Bug Fixes**

* Fixed bug with in-memory cached persistence state not properly cleared after the seat deactivation

## 1.4.4

Download: [Zentitle.Licensing.Client.1.4.4.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/1.4.4/Zentitle.Licensing.Client.1.4.4.zip)

**Improvements**

* Added locking to the `Activation` class to prevent possible concurrency issues and make it thread-safe. Check [Configuring the Activation](/zentitle2-docs/developers/the-licensing-client-.net/configuring-the-activation.md) section for more details
* Entitlement status in the `EntitlementInfo` respects the entitlement dates and is automatically updated after the entitlement enters the grace period or expires

**Bug Fixes**

* When the seat's lease period expires at the same time as the entitlement, the `Activation` transitions into the `EntitlementNotActive` state instead of the `LeaseExpired` state.

## 1.4.3

Download: [Zentitle.Licensing.Client.1.4.3.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/1.4.3/Zentitle.Licensing.Client.1.4.3.zip)

**Improvements**

* **\[Breaking Change]** Dropped support for the `Consumption Token` and `Floating` feature types

## 1.4.2

Download: [Zentitle.Licensing.Client.1.4.2.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/1.4.2/Zentitle.Licensing.Client.1.4.2.zip)

**Improvements**

* Added support for a new **Usage Count** feature type

## 1.4.1

Download: [Zentitle.Licensing.Client.1.4.1.zip](https://gitlab.com/api/v4/projects/44137879/packages/generic/src/1.4.1/Zentitle.Licensing.Client.1.4.1.zip)

**Improvements**

* Activation entitlement has been added to the offline activation tokens and can be retrieved using the `GetActivationEntitlement()` method
* **\[Breaking Change]** `PersistentData` contains new `OfflineActivationEntitlement` field. Make sure that it's being handled properly in your`IActivationStorage` implementation.

## 1.4.0

**Improvements**

* **\[Breaking Change]** Changed offline activation token format
* Added support for username/password license activation flow
* Added maintenance fields to activation's entitlement

## 1.3.0

**Improvements**

* Logging improvements

## 1.2.0

#### Improvements

* Activation state management
  * **\[Breaking Change]** The `OfflineActivated` state has been **removed** because it has been merged with the `Active` state. The `Info.Mode` activation property can be used to distinguish between the `Online` and `Offline` activated seat.
  * **\[Breaking Change]** The `Expired` state has been **renamed** to `LeaseExpired` state
  * **\[Breaking Change]** The `NotActive` state has been **renamed** to `NotActivated` state
  * A new `EntitlementNotActive` state has been **added**, which represents an activated seat with no active entitlement (license) - e.g., the entitlement has expired or has been disabled on the server
* Activation methods changes
  * **\[Breaking Change]** The `Refresh()` method has been **renamed** to `RefreshLease()`
  * **\[Breaking Change]** The `RefhreshOffline()` method has been renamed to `RefreshLeaseOffline()`
  * The `Deactivate()` method **returns bool** now, indicating if the deactivation has been successful or not
* The number of API calls inside the `RefreshLease()` method has been reduced from 2 to 1
* Documentation is now available for all public classes and methods of the SDK code

#### **Bug Fixes**

* When the entitlement is no longer active on the server (because it has expired/has been disabled), the `Refresh()`, `Deactivate()` and `PullRemoteState()` methods are no longer transitioning the activation into the `NotActive` state but into the **`EntitlementNotActive`** state.\
  In this state, the `PullRemoteState()` method can be used to transition back to the previous state if the entitlement becomes active again. If that isn't the case, the `Activate()` method can be used in this state to activate the seat with another entitlement.
* If there is an API exception raised because of the invalid nonce, the activation doesn't fall into the `NotActivated` state, but the API error is propagated out of the library.

## 1.1.0

**Improvements**

* Added `PullPersistedState()`activation method, which allows retrieving the activation state from the storage, even if the activation has been initialized already. If there are some changes in the persistence (made by other processes accessing the same activation) when calling this method, they will be reflected in the activation's in-memory state.

## 1.0.0

The initial version of `Zentitle.Licensing.Client` SDK

###

####


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.nalpeiron.com/zentitle2-docs/developers/the-licensing-client-.net/release-notes.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
