Documentation Release Notes - March 2025

This March, we've focused on enhancing both functionality and usability across our documentation.

Security gets a boost with our new secret key rotation feature, while developers will appreciate the async/await patterns in our Swift Chat SDK and improved table layouts for API references.

We've also documented adding practical tools like customizable table settings in BizOps Workspace and more granular control over action execution in Illuminate.

Take a look at what's new!

General 🛠️

Optimized filtering for large data volumes

Type: Enhancement

This month, we improved our documentation to help you work with large volumes of data more efficiently. If your application has thousands of channels or users, you'll now find helpful performance tips throughout our docs.

We added guidance on optimal filtering methods in the BizOps Workspace, recommending the use of exact ID equality filters instead of pattern matching when searching through applications with many channels or users.

You can find these recommendations in the Channel Management, User Management, and general Filtering documentation sections.

New Admin Portal navigation

Type: Enhancement

We've recently refreshed our Admin Portal's left navigation and updated all the documentation resources to match it.

New Portal navigation

The Apps section has also been renamed to Apps & Keysets, bringing keyset management right where you need it instead of in a separate section.

All screenshots throughout our docs now reflect these changes, so what you see in the docs matches exactly what you'll find in the Portal.

Secret key rotation

Type: New feature

We've added a new security feature for our paid plans: secret key rotation. This enhancement lets you manage up to five secret keys with automatic expiration dates, strengthening your security when using services like Access Manager.

You'll find this feature in the Admin Portal under your keyset settings, where you can easily set expiration dates for your secret keys using our new date picker.

Secret key rotation

SDKs 📦

Improved metadata for Objective-C SDK

Type: New feature

We've updated our Objective-C SDK docs with new features that give you better control over your data:

  • Added type and status fields for users, channels, and memberships so you can better organize and track their states.
  • Implemented ifMatchesEtag support to prevent update conflicts when multiple systems try to change the same data.
NSArray<NSDictionary *> *channels = @[
@{
@"channel": @"channel1",
@"status": @"active",
@"type": @"public",
@"custom": @{ @"role": @"moderator" }
}
];

PNSetMembershipsRequest *request = [PNSetMembershipsRequest requestWithUUID:@"uuid"
channels:channels];
[self.client setMembershipsWithRequest:request
completion:^(PNSetMembershipsStatus *status) {
// Handle completion
}];

Custom origin arrays in JavaScript SDK

Type: Enhancement

We've updated our JavaScript SDK documentation to show that you can use an array of strings for the origin configuration parameter, giving you more flexibility in how you connect to PubNub.

Previously, the origin parameter only accepted a single string value, but now you can provide multiple origin domains as an array:

pubnub.PubNub({
// Other config options...
origin: ['ps1.example.com', 'ps2.example.com']
});

This enhancement is useful for implementing your own failover strategy or connecting to multiple custom domains.

New C# logging system

Type: Enhancement

We've updated our C# SDK docs with a completely revamped logging system. The key improvements include:

  • New logging interface: Replaced the deprecated PubnubLog and LogVerbosity with a new LogLevel parameter and IPubnubLogger interface.
  • Multiple severity levels: Added granular log levels (Trace, Debug, Info, Warn, Error) replacing the previous simple verbosity options.
  • Custom logger support: Added a new SetLogger method allowing developers to implement and attach their own logger implementations.
  • Better error handling examples: Updated all code examples to use try/catch blocks and proper async/await patterns.
  • Request execution guide: Added a new partial template explaining best practices for executing API requests with proper error handling.

The docs also include a complete sample implementation of a console logger and shows how to properly configure and remove loggers.

This update makes debugging and troubleshooting C# applications much more powerful and flexible.

ETag support in Dart SDK

Type: New feature

We've added ETag support to our Dart SDK, making your apps safer when multiple users might update the same data at once.

When you set metadata for users or channels, you can now include an ifMatchesEtag parameter. This works like a safety check - it ensures your updates only happen if no one else has changed the data since you last retrieved it.

For example, if two people try to edit a user profile at the same time, ETags help prevent one person's changes from accidentally overwriting the other's.

The Dart SDK docs now include this parameter in both the UUID and channel metadata methods, showing how to use it in your Dart apps.

// First, retrieve user metadata which includes the ETag
final result = await pubnub.objects.getUUIDMetadata(
uuid: 'user-123',
includeCustomFields: true
);

// Store the ETag from the response
final etag = result.metadata?.eTag;

// Update user metadata with ETag to prevent conflicts
if (etag != null) {
try {
await pubnub.objects.setUUIDMetadata(
uuid: 'user-123',
name: 'Updated Username',
show all 31 lines

Invites now supported in public chats

Type: Enhancement

We've updated our Chat SDK documentation to remove the limitation that previously stated invites weren't supported in public channels. This change affects all our Chat SDK platforms including JavaScript, Kotlin, Swift, Unity, and Unreal.

Previously, our docs warned that invitation features were disabled in public chats, and attempting to use them would trigger an error message. We've now removed these warnings as implementation has changed, meaning you can now invite users to public channels just like you would with private or group conversations.

This update in Chat SDKs gives you more flexibility in how you manage user access to your public chat spaces, allowing for a more consistent invitation experience across all channel types in your chat applications.

Comprehensive Access Manager docs for Chat SDKs

Type: Enhancement

We've added detailed security documentation for our Chat SDKs to help you correctly set up permissions in your chat apps.

The update provides a clear mapping between Chat SDK methods and the specific Access Manager permissions they require.

The updated Security and permissions page now includes comprehensive tables showing exactly which permissions are needed for every method across all Chat SDK objects - Chat, Channel, User, Membership, Message, ThreadChannel, ThreadMessage, and MessageDraft.

For example, you can now easily see that to use the SendText() method, your users need Write permission on the channel, or that creating a direct conversation requires multiple permissions including Get, Update, Join, and Write on specific resources.

PHP SDK transport layer improvement

Type: Enhancement

The PHP SDK has been updated with a major change to how it handles HTTP requests. We've added a detailed migration guide to help you update your code from version 7.x to 8.x.

The key changes include:

  • Replacing the outdated custom transport layer with a standardized PSR-18 compliant implementation.
  • Using Guzzle HTTP client as the default, which provides better performance and compatibility.
  • Changing the method to customize HTTP handling from setTransport() to setClient().

If you're using the default transport layer, you won't need to make any changes to your code. However, if you've implemented a custom transport, you'll need to update it to follow PSR-18 standards.

Swift Chat SDK now supports async/await

Type: Enhancement

We've updated our Swift Chat SDK documentation to use Swift's newer async/await feature, making your code much simpler to write and read:

  • No more nested callbacks or complex error handling chains.
  • Use try/catch instead of managing result types.
  • Code that reads more naturally from top to bottom.
  • Aligns with how most Swift developers write code today.
Task {
if let channel = try await chat.getChannel(channelId: "support") {
let timetoken = try await channel.sendText(
text: "Hello World",
shouldStore: true
)
print("Message sent at \(timetoken)")
}
}

This update affects all our Swift code examples throughout the docs. While you can still use the older completion handler style if you prefer, we believe you'll find this new approach much easier to work with.

Retired SDKs

Type: Deprecation

We've updated our documentation to mark four SDKs as no longer officially supported: Lua, Redux, Cocoa Swift, and Cocoa Objective-C.

Instead of removing them completely, we're inviting you to take them forward.

Each SDK page now includes a clear warning banner explaining that PubNub no longer maintains these SDKs, but also provides a direct link to their related GitHub repositories where you can contribute improvements and fixes. We've also updated our main SDKs list page and navigation to reflect these changes.

While we're focusing our resources on our most widely-used SDKs, we understand that you may still be using these technologies and want to provide a path for community-driven support.

Improved Basic Usage examples

Type: Improvement

We've updated the first Basic Usage example in each documentation page across multiple SDKs to make them truly copy-paste ready. These changes have been made to:

These updated first examples now include everything you need: all necessary imports, variable declarations, proper error handling, and complete context.

While other examples in the documentation may still focus just on the PubNub-specific code, these first examples serve as complete templates you can use to understand how to properly set up and use the SDK in your projects. This makes it easier to get started and provides a reference point for implementing the other examples shown later in the documentation.

More to come!

Redesigned Getting Started guide for Kotlin SDK

Type: Improvement

We've completely redesigned the Getting Started guide for our Kotlin SDK to make it more user-friendly and practical. This update is part of our broader effort to improve all SDK documentation with comprehensive, copy-paste ready code examples.

The new guide features:

  • Platform-specific guidance
  • Complete working examples
  • Clear step-by-step structure with a logical progression from setup to publishing and subscribing to messages
  • Added tooltips for key terms and better organized sections

We've also simplified the overall structure to remove repetition and focus on what developers actually need. The guide now follows a practical flow: get your keys, install the SDK, initialize PubNub, subscribe to messages, and publish messages - with complete code examples at each step.

This new template will serve as a model for updating other SDK Getting Started guides, ensuring a consistent, easy-to-follow experience across our entire SDK docs.

Insights 📊

Channel patterns in PubNub Insights API

Type: New feature

We've added API documentation for the channel patterns feature in PubNub Insights.

Premium customers can now programmatically filter and retrieve analytics data for specific channel patterns using the Insights API, making it easier to analyze targeted subsets of channels in their applications.

BizOps Workspace 🏢

Customizable table settings in Channel and User Management

Type: New feature

Channel Management and User Management sections under BizOps Workspace have been enhanced by adding table settings to each view.

Table settings - icon

This option lets you adjust the way tables display information.

Table settings include:

  • Columns tab: Toggle visibility for ID, Name, Status, Type, and Updated.
  • Row height tab for selecting relaxed, regular, and condensed row view.
  • Column management: Pinning (pin icon) and reordering (up/down arrows).

Table settings - details

File upload in Channel Monitor

Type: New feature

We added documentation for a new file upload feature in the Channel Monitor tool within BizOps Workspace.

This enhancement allows moderators to:

  • View files uploaded by chat members in messages.
  • Upload their own files to messages.
  • Work with files regardless of which SDK (Core or Chat) the app is built with.

Illuminate 💡

Action execution interval

Type: Enhancement

We added a new feature to Illuminate Decisions that lets you control how often actions run.

Instead of triggering actions every single time conditions are met, you can now set limits. You can choose to run actions always, just once within a time period, or once per unique condition value.

Action execution options

If you need to start fresh, you can reset these limits with a button click without turning off the whole decision.

Action execution limit reset

Other 🌟

Improved table layout

Type: Enhancement

We redesigned how tables display in our documentation to improve readability, especially for API references.

Instead of showing all columns side-by-side requiring horizontal scrolling, we now present essential information prominently while moving supporting details into a compact format below the parameter name.

New table layout

Required parameters are clearly marked with red asterisks, and the responsive design automatically adjusts to different screen sizes for better viewing on all devices.

New tab navigation

Type: Enhancement

Last but not least, we redesigned our documentation tabs with a more intuitive and visually appealing interface following user feedback that the previous design wasn't clearly recognizable as interactive tabs.

Improved tab navigation

The new tab components feature clear visual indicators for active tabs with a modern blue highlight and subtle hover effects for better interactivity. Tabs now include a clean divider line that clearly separates the tab navigation from content.

Last updated on