## 0.9.0
*October 22, 2026*
| Type | Changes |
|------|----------|
| **Added** | • Add `ChannelsCategoryPermission` and `UuidsCategoryPermission`, the `categories` option for `grant_token`, and parsing of category permissions in `parse_token`. Parsed token `resources` and `patterns` are optional now.<br/>• Allow `Permission` implementations to be shared across threads. |
| **Fixed** | • Fix `DataStream` deadlock between `push_data` and `poll_next` which took `queue` and `waker` locks in opposite order, and `EventDispatcher` deadlock between stream creation and `invalidate`. |
| **Modified** | • Remove redundant references in `format!` arguments of `PubNubClientInstance`, access and presence request builders.<br/>• Replace `r#type` with `custom_message_type` publish setter sent as `custom_message_type` query param. Received `Message` exposes the same field, and examples and docs use the new name.<br/>• Unknown `e` values and malformed envelopes are skipped instead of failing the whole subscribe response. Payload is picked by event type first, then by `-pnpres` channel suffix.<br/>• Add `keywords`, enable `access` feature by default, update `wiremock` and `cucumber`, and register the `integration` test target.<br/>• Update `README.md` PubNub Rust SDK header.<br/>• Add unit and integration tests for categories-only grants, all permission kinds, token parsing and malformed tokens.<br/>• Add tests for `DataStream` and `EventDispatcher` lock ordering, listener wake-ups and delivery of dispatched batches.<br/>• Cover type-first classification, presence channel suffix, unknown event types, malformed entries and message action `added` and `removed` events. |
## 0.8.0
*June 8, 2026*
| Type | Changes |
|------|----------|
| **Added** | • Enable HTTP/2 negotiation on the default `TransportReqwest` by turning on reqwest’s `native-tls-alpn` feature, so ALPN can select `h2` when the origin supports it while preserving HTTP/1.1 fallback. |
| **Fixed** | • Fix a Clippy `derivable_impls` lint in `RequestRetryConfiguration` (derive `Default` on the enum instead of a manual impl). |
| **Modified** | • Add debug-level protocol logging in async and blocking `TransportReqwest::send()` after each completed request, including HTTP method, path, and the Reqwest-reported protocol version. |
## 0.7.0
*October 28, 2025*
| Type | Changes |
|------|----------|
| **Added** | • Add `limit` (default `1000`) and `offset` parameters for `here_now` to fetch presence in portions.<br/>• Use default retry configuration for `subscribe` and `presence` REST API calls. |
| **Fixed** | • Fix the issue because of which it was possible to add the same channel / group multiple times to the `subscribe`, `heartbeat`, or `leave` requests.<br/>• Fix the `Presence` enum variant to not intercept user-published messages that partly match the `Presence` variant. |
| **Modified** | • Synchronize subscription flow with other SDKs.<br/>• Synchronize presence flow with other SDKs. |
## 0.6.0
*February 7, 2024*
| Type | Changes |
|------|----------|
| **Added** | • Make it possible to create `SubscriptionCursor` from the string slice.<br/>• Add `add_subscriptions(..)` and `sub_subscriptions(..)` to `SubscriptionSet` to make it possible in addition to sets manipulation use list of subscriptions. |
| **Fixed** | • Fix issue because of which `cursor` is not reset on `Subscription` and `SubscriptionSet` on unsubscribe.<br/>• Fix issue because of which cancelled effects still asynchronously spawned for processing. |
| **Modified** | • Change `client` to `pubnub` in inline docs.<br/>• Add subscription token validation.<br/>• Added a method to validate the provided subscription token to conform to PubNub time token requirements with precision.<br/>• Separate `subscribe` example into two to show separately `subscribe` feature and `presence state` maintenance with subscribe. |
## 0.5.0
*January 25, 2024*
| Type | Changes |
|------|----------|
| **Added** | • Change the real-time event handling interface.<br/>• `user_id` state for specified channels will be maintained by the SDK. State with subscribe calls has been improved.<br/>• Adding `Channel`, `ChannelGroup`, `ChannelMetadata` and `UuidMetadata` entities to be first-class citizens to access APIs related to them. Currently, access is provided only for subscription APIs.<br/>• Added ability to configure request retry policies to exclude specific endpoints from retry. |
## 0.4.1
*November 3, 2023*
| Type | Changes |
|------|----------|
| **Modified** | • Update license information. |
## 0.4.0
*October 16, 2023*
| Type | Changes |
|------|----------|
| **Added** | • Update the crypto module structure and add enhanced AES-CBC cryptor. |
## 0.3.0
*August 30, 2023*
| Type | Changes |
|------|----------|
| **Added** | • PubNub subscribe API implemented.<br/>• PubNub presence API implemented.<br/>• Event engine as a new method of handling connections for `subscribe` and `presence` methods implemented. |
## 0.2.1
*June 7, 2023*
| Type | Changes |
|------|----------|
| **Fixed** | • Fixed versions in the docs.<br/>• Fixed broken links for `docs.rs` page.<br/>• Fixed logo image. |
## 0.2.0
*June 5, 2023*
| Type | Changes |
|------|----------|
| **Added** | • New SDK implementation.<br/>• PubNub `publish` API implemented.<br/>• PubNub `access manager` API implemented.<br/>• Add `parse_token` for authorization token debug. |
| Added | - Add
ChannelsCategoryPermission and UuidsCategoryPermission, the categories option for grant_token, and parsing of category permissions in parse_token. Parsed token resources and patterns are optional now. - Allow
Permission implementations to be shared across threads.
|
| Fixed | - Fix
DataStream deadlock between push_data and poll_next which took queue and waker locks in opposite order, and EventDispatcher deadlock between stream creation and invalidate.
|
| Modified | - Remove redundant references in
format! arguments of PubNubClientInstance, access and presence request builders. - Replace
r#type with custom_message_type publish setter sent as custom_message_type query param. Received Message exposes the same field, and examples and docs use the new name. - Unknown
e values and malformed envelopes are skipped instead of failing the whole subscribe response. Payload is picked by event type first, then by -pnpres channel suffix. - Add
keywords, enable access feature by default, update wiremock and cucumber, and register the integration test target. - Update
README.md PubNub Rust SDK header. - Add unit and integration tests for categories-only grants, all permission kinds, token parsing and malformed tokens.
- Add tests for
DataStream and EventDispatcher lock ordering, listener wake-ups and delivery of dispatched batches. - Cover type-first classification, presence channel suffix, unknown event types, malformed entries and message action
added and removed events.
|
| Added | - Enable HTTP/2 negotiation on the default
TransportReqwest by turning on reqwest’s native-tls-alpn feature, so ALPN can select h2 when the origin supports it while preserving HTTP/1.1 fallback.
|
| Fixed | - Fix a Clippy
derivable_impls lint in RequestRetryConfiguration (derive Default on the enum instead of a manual impl).
|
| Modified | - Add debug-level protocol logging in async and blocking
TransportReqwest::send() after each completed request, including HTTP method, path, and the Reqwest-reported protocol version.
|
| Added | - Add
limit (default 1000) and offset parameters for here_now to fetch presence in portions. - Use default retry configuration for
subscribe and presence REST API calls.
|
| Fixed | - Fix the issue because of which it was possible to add the same channel / group multiple times to the
subscribe, heartbeat, or leave requests. - Fix the
Presence enum variant to not intercept user-published messages that partly match the Presence variant.
|
| Modified | - Synchronize subscription flow with other SDKs.
- Synchronize presence flow with other SDKs.
|
| Added | - Make it possible to create
SubscriptionCursor from the string slice. - Add
add_subscriptions(..) and sub_subscriptions(..) to SubscriptionSet to make it possible in addition to sets manipulation use list of subscriptions.
|
| Fixed | - Fix issue because of which
cursor is not reset on Subscription and SubscriptionSet on unsubscribe. - Fix issue because of which cancelled effects still asynchronously spawned for processing.
|
| Modified | - Change
client to pubnub in inline docs. - Add subscription token validation.
- Added a method to validate the provided subscription token to conform to PubNub time token requirements with precision.
- Separate
subscribe example into two to show separately subscribe feature and presence state maintenance with subscribe.
|
| Added | - Change the real-time event handling interface.
user_id state for specified channels will be maintained by the SDK. State with subscribe calls has been improved.- Adding
Channel, ChannelGroup, ChannelMetadata and UuidMetadata entities to be first-class citizens to access APIs related to them. Currently, access is provided only for subscription APIs. - Added ability to configure request retry policies to exclude specific endpoints from retry.
|
| Modified | - Update license information.
|
| Added | - Update the crypto module structure and add enhanced AES-CBC cryptor.
|
| Added | - PubNub subscribe API implemented.
- PubNub presence API implemented.
- Event engine as a new method of handling connections for
subscribe and presence methods implemented.
|
| Fixed | - Fixed versions in the docs.
- Fixed broken links for
docs.rs page. - Fixed logo image.
|
| Added | - New SDK implementation.
- PubNub
publish API implemented. - PubNub
access manager API implemented. - Add
parse_token for authorization token debug.
|