---
source_url: https://www.pubnub.com/docs/release-notes/2026/july
title: Documentation Release Notes - July 2026
updated_at: 2026-08-11T06:35:54.000Z
---

# Documentation Release Notes - July 2026

## Documentation index

To discover more PubNub resources:

1. Fetch [PubNub's llms.txt](https://www.pubnub.com/llms.txt) for a list of available pages in Markdown format.
2. Identify relevant URLs from that index.
3. Fetch the target pages.

Do not assume a path exists, always check the index first.

July brought a new [Core Concepts](https://www.pubnub.com/docs/general/concepts.md) page, expanded HTTP/2 documentation to six more SDKs, and added a new `manage_functions` tool to the MCP Server.

We published a new [Core Concepts](#core-concepts) page — a single-page reference for the seven platform primitives every PubNub application is built on: Message, Channel, User ID, Channel Group, Timetoken, Token, and Membership. We also documented [HTTP/2 configuration](#http2-sdk-configuration) for the Dart, Java, JavaScript, Kotlin, PHP, and Ruby SDKs, continuing the work from [June](https://www.pubnub.com/docs/release-notes/2026/june.md#http2-sdk-configuration).

On the AI side, we documented the new [manage_functions](#manage_functions-tool) MCP Server tool, which lets AI assistants manage PubNub Functions v2 resources — packages, revisions, deployments, KV store, secrets, and catalog blueprints — using natural language. The MCP Server now exposes 17 tools across six categories.

We also added a [Reuse the client instance](#client-instance-reuse) best practice section to the Connection Management page and all 13 SDK configuration pages, and added security warnings across all SDK logging pages about [sensitive data exposure at DEBUG and TRACE levels](#sensitive-data-exposure).

On the platform side, we documented the new [Account Viewer](#account-viewer-role) Admin Portal role, clarified [Events & Actions Events Ingested billing](#events--actions-billing), and added [Publish Timetoken](#publish-timetoken-field) as a fifth default pre-mapped field in Illuminate Business Objects.

## General 🛠️

### Core concepts

**Type**: New feature

We published a new [Core Concepts](https://www.pubnub.com/docs/general/concepts.md) page — a single-page reference for the seven primitives every PubNub application is built on.

| Primitive | What it is |
| --- | --- |
| [Message](https://www.pubnub.com/docs/general/concepts.md#message) | The unit of data published to a channel and delivered to subscribers |
| [Channel](https://www.pubnub.com/docs/general/concepts.md#channel) | The named pathway messages flow through |
| [User ID](https://www.pubnub.com/docs/general/concepts.md#user-id) | The unique identity of a connected client |
| [Channel Group](https://www.pubnub.com/docs/general/concepts.md#channel-group) | A server-managed list of channels subscribed to as one unit |
| [Timetoken](https://www.pubnub.com/docs/general/concepts.md#timetoken) | The server-assigned timestamp that orders every event |
| [Token](https://www.pubnub.com/docs/general/concepts.md#token) | The cryptographic credential that controls access to resources |
| [Membership](https://www.pubnub.com/docs/general/concepts.md#membership) | The persistent record of which user belongs to which channel |

Each section explains the primitive's role across the platform — how it appears in SDK methods, REST endpoints, billing, Access Manager, and other features.

### Events & Actions billing

**Type**: Update

We added a note to the [Events & Actions overview](https://www.pubnub.com/docs/serverless/events-and-actions/overview.md) clarifying how Events Ingested billing is calculated.

Billable Events Ingested are calculated by multiplying the total number of publishes (excluding PubNub Debug messages) by the number of configured event listeners, because each listener evaluates every message independently. Charges apply per million events processed, regardless of whether those events trigger any downstream action.

For example: 1,000,000 published messages with 3 configured listeners = **3,000,000 billable events**.

### Account Viewer role

**Type**: Enhancement

We added the Account Viewer role to the [Admin Portal roles](https://www.pubnub.com/docs/portal/my-account.md) documentation.

| Role | Capabilities |
| --- | --- |
| **Account Viewer** | View all apps and keysets in the account (secret keys excluded); observe account-wide usage. Cannot modify apps, keysets, or any account settings. |

Account Viewer cannot be combined with Account Admin, App Admin, App Viewer, Keyset Admin, or Keyset Viewer.

## SDKs 📦

### HTTP/2 SDK configuration

**Type**: Enhancement

We documented HTTP/2 support and configuration for six more SDKs — Dart, Java, JavaScript (Node.js), Kotlin, PHP, and Ruby — continuing the [work started in May](https://www.pubnub.com/docs/release-notes/2026/may.md#http2-support) and [extended in June](https://www.pubnub.com/docs/release-notes/2026/june.md#http2-sdk-configuration).

| SDK | HTTP/2 behavior | Since |
| --- | --- | --- |
| [Dart](https://www.pubnub.com/docs/sdks/dart/api-reference/configuration.md#http2) | `NetworkingModule` negotiates HTTP/2 via TLS ALPN on native (`dart:io`) platforms. Controlled by `enableHttp2` (default: `true`). No effect on the web platform. | `8.0.0` |
| [Java](https://www.pubnub.com/docs/sdks/java/api-reference/configuration.md#http2) | OkHttp negotiates HTTP/2 automatically over TLS/ALPN; falls back to HTTP/1.1. Not supported over cleartext. | — |
| [JavaScript](https://www.pubnub.com/docs/sdks/javascript/api-reference/configuration.md#http2) | `undici` (Node.js transport) auto-enables HTTP/2 on keep-alive connections. Node.js only — browsers and React Native are unaffected. | `12.0.0` |
| [Kotlin](https://www.pubnub.com/docs/sdks/kotlin/api-reference/configuration.md#http2) | OkHttp negotiates HTTP/2 automatically over TLS/ALPN; falls back to HTTP/1.1. Not supported over cleartext. | — |
| [PHP](https://www.pubnub.com/docs/sdks/php/api-reference/configuration.md#http2) | Requests HTTP/2 on every call and falls back transparently. Requires an HTTPS connection (`ssl: true`, which is the default). | `8.0.0` |
| [Ruby](https://www.pubnub.com/docs/sdks/ruby/api-reference/configuration.md#http2) | Negotiates HTTP/2 automatically over TLS/ALPN; falls back to HTTP/1.1. | `6.1.0` |

:::note HTTP/2 requires a compatible origin
The default PubNub origin (`ps.pndsn.com`) serves HTTP/1.1 only. For the Java, Kotlin, and JavaScript SDKs, you must set `origin` to an HTTP/2-capable endpoint provisioned for your keyset to actually negotiate HTTP/2. PHP, Ruby, and Dart negotiate HTTP/2 against any origin that advertises `h2` via ALPN. For a list of HTTP/2-capable origins, see [Data Transport](https://www.pubnub.com/docs/general/setup/data-transport.md#http2).
:::

### Client instance reuse

**Type**: Enhancement

We added a [Reuse the client instance](https://www.pubnub.com/docs/general/setup/connection-management.md#reuse-the-client-instance) section to the [Connection Management](https://www.pubnub.com/docs/general/setup/connection-management.md) page and a linking note to all 13 SDK configuration reference pages.

The section explains that the PubNub client should be created once and reused for the lifetime of the user or session. Creating a new client per request or operation:

* Wastes TCP and TLS connections — each new client bypasses the keep-alive connection pool and pays full connection setup on every call.
* Leaks background resources — subscribe loops, thread pools, reconnection timers, and heartbeat timers accumulate if clients are not explicitly torn down.
* Resets internal state — timetoken, publish sequence numbers, and telemetry reset on each new instance, breaking message ordering continuity.

If your application handles multiple user identities (for example, a server acting on behalf of many users), cache or pool one client per `userId` rather than constructing a new client per request.

### Sensitive data exposure

**Type**: Enhancement

We added a security warning to the general [Logging](https://www.pubnub.com/docs/general/setup/logging.md) page and all SDK-specific logging pages. At `DEBUG` and `TRACE` levels, PubNub SDKs may log:

* API keys and User ID values
* Full message content
* Complete request URLs, including Access Manager `signature` and `auth` token query parameters
* The full token string returned by `grantToken` calls

Masking behavior varies by SDK. Some SDKs hide the configured secret key in the one-time initialization log, but none currently hide signatures or tokens that appear in per-request network logs. Use `DEBUG` and `TRACE` only in development environments. Do not enable these levels in production where sensitive data is present.

### Python file upload memory usage

**Type**: Enhancement

We added a warning to the [Python SDK](https://www.pubnub.com/docs/sdks/python/api-reference/files.md) and [Asyncio SDK](https://www.pubnub.com/docs/sdks/asyncio/api-reference/files.md) file upload documentation about memory usage.

`send_file()` reads the entire file into memory to encrypt and upload it, so memory usage scales with file size. The SDK does not cap upload size because your keyset's file size limit (5 MB by default, configurable) may be set differently. Enforce your keyset's configured limit in your own upload path before calling `send_file()`.

### maximumConnections clarification

**Type**: Update

We improved the description of the `maximumConnections` configuration parameter in the [Java SDK](https://www.pubnub.com/docs/sdks/java/api-reference/configuration.md) and [Kotlin SDK](https://www.pubnub.com/docs/sdks/kotlin/api-reference/configuration.md) references.

`maximumConnections` caps the number of concurrent in-flight asynchronous requests per host (`.async()` calls only). It is a concurrency cap on async requests, not the size of the HTTP connection pool — that is controlled separately by `connectionPoolMaxIdleConnections`. If you fan out `.sync()` calls and see requests backing up under load, raise concurrency in your own thread pool or switch those calls to `.async()`.

## AI 🤖

### manage_functions tool

**Type**: New feature

We documented the new `manage_functions` tool in [Available MCP Tools](https://www.pubnub.com/docs/ai/available-mcp-tools.md). The tool lets AI assistants manage [PubNub Functions v2](https://www.pubnub.com/docs/serverless/functions/overview.md) resources using natural language. The MCP Server now exposes 17 tools across six categories.

`manage_functions` operates on eight resource types:

| Resource | Operations |
| --- | --- |
| `package` | Create, read, update, delete packages; list revisions |
| `revision` | Create and manage revisions; list functions; manage test inputs |
| `deployment` | Deploy to keysets; start, stop, rolling-update, delete deployments |
| `kv-store` | Get, set, delete, increment, decrement KV store entries (string, JSON, counter) |
| `secret` | Create, update, delete runtime secrets |
| `scheduled-event` | Manage scheduled function events |
| `catalog` | Browse package and function blueprints; import from blueprints |
| `limit` | Read per-package execution limits |

:::note Admin API access required
`manage_functions` requires a Service Integration API key with specific permission scopes: `functions.package:read|write` at the account level for packages, revisions, catalog, and limits; `functions.package-deployment:read|write` at the keyset level for deployments and scheduled events; `keyset:read|write` for KV store and secrets. Not available with email/password authentication.
:::

### PubNub Skills update

**Type**: Enhancement

We updated the [PubNub Skills](https://www.pubnub.com/docs/ai/pubnub-skills.md) page with revised install commands and reorganized the 22 skills into four categories.

The updated Vercel Skills CLI install command installs all skills without prompts:

```bash
npx skills add pubnub/skills --all
```

The skills are now organized into four categories:

* **Core Platform** (foundational real-time capabilities)
* **Platform Services** (serverless compute, data storage, integrations)
* **Operations** (reliability, observability, platform management)
* **Vertical** (domain-specific guidance for common application types).

## Illuminate 💡

### Publish Timetoken field

**Type**: Enhancement

[Publish Timetoken](https://www.pubnub.com/docs/illuminate/business-objects/basics.md) is now the fifth default pre-mapped field in new Illuminate Business Objects, alongside Channel, User ID, Message Type, and Message.

`Publish Timetoken` uses the top-level `$.timetoken` JSONPath and the `Timestamp` field type. Unlike the other pre-mapped fields, it does not require a subcategory selection. It is available automatically in new Business Objects — no manual field configuration is required.

This field enables time-based queries and derivations in the [Query Builder](https://www.pubnub.com/docs/illuminate/business-objects/query-builder.md), including `TIME_DIFF` calculations using `PUBLISH_TIMETOKEN` as the derivation start or end source.

Last updated at: 2026-08-11T06:35:54.000Z
