Visitar URL original
Ably's changelog

Ably's changelog
Ably's changelog
ably.com

Some smaller behaviour changes

A few small behaviour changes we're rolling out:

  • Unbatched webhooks can now be signed, just like batched ones.
  • Filtered subscriptions will soon no longer require a [filter]-qualified capability; simple message-subscribe will do. Permission to subscribe to any arbitrary subset of messages on a channel and permission to subscribe to all messages on a channel are logically equivalent, so there wasn't any real purpose served by having a different capability for it.
  • Users of the Pusher adaptor can now bind a connection to a clientId by specifying, say, wsPath: "/clientid/foobar" in the Pusher library constructor. (The usual way of doing this in Ably is using a token bound to that clientId, but this is not possible with the Pusher adaptor, which by necessity uses Pusher's non-token-based auth model)
  • Channel filters on integration rules going forward must be strictly RE2-compatible regular expressions, without lookaheads and backreferences. (Rules currently using channel filters which don't satisfy this will of course continue to work, per our usual strong backward-compatibility guarantees, but must be made RE2-compatible when you next update them).

Flexible match expression in channel rules

 

New feature

  

Enabling features (such as message persistence or server-side batching) on Ably channels involves configuring a channel rule.

Previously, channel rules could only be applied to a specified namespace: configuring a rule to enable persistence for the foo namespace would enable it for the channel literally called foo, as well as any channel starting with foo:, such as foo:bar or foo:bar:baz.

Now, instead of a namespace, you specify a match expression, with the same syntax as wildcard resource names in capabilities (wildcards in colon-delimited segments). For example, foo:* or bar:*:baz. As with capabilities, a terminal * can match any number of segments, meaning that a rule with a match expression of * will match all channels in an app (something that was not previously possible!).

If multiple rules all have match expressions which match a given channel name, the one with the most specific match expression (reading segments left to right, the one with the first non-wildcard segment) will apply.

Existing channel rules will continue working indefinitely with their current semantics, but any new rules you create in the dashboard will use match expressions.

The control api will allow you to create both types of rule, defaulting to namespace-mode so as not to break any existing rule creation workflows; we will flip the default to matcher mode in the next major version bump.

AI Transport JS SDK v0.9.0: A simplified streaming layer

 

Client Library SDK Improvement

  

This release adds a simplified streaming layer, so you can stream an agent's output over an Ably channel without handing your conversation state to the SDK. Adopting AI Transport no longer means adopting the conversation tree first.

The main changes:

  • Streaming layer: a client transport and an agent transport give you run and step framing, cancellation and steering over one channel, while your application keeps its own message format and its own conversation store. All existing codecs work with the new layer as they are, and you can write your own for a provider that has none.
  • Durable sessions: the sessions now build on that same streaming layer. They take a session codec, so an existing application needs that one change on upgrade.
  • Other fixes and improvements: the SDK's error codes now match their entries in the Ably error registry, and several failures that used to share a code are separated, so you can tell a session that cannot connect from one that failed on a single message, or a throwing cancel handler from a throwing steer handler. A failed step-lifecycle publish now reports the same way as a failed run-lifecycle publish, and a throwing history-page callback no longer stops a history scan.

This release contains a number of breaking changes; see the full release page for details.

For the full changelog, please visit the GitHub release page.

JS PubSub SDK v2.29.0 Release

 

Client Library SDK Improvement

  

This release contains various improvements and stability fixes to the core PubSub SDK. Most notably:

  • Use PING protocol messages for browsers, React Native and NativeScript. Liveness is now confirmed by the SDK itself rather than by the underlying WebSocket, which can keep answering ping frames while the app is suspended
  • Add PresenceMessage.memberKey - the key that uniquely identifies a presence member by its connectionId and clientId

For the full changelog, see the GitHub release page.

Ably Dotnet SDK v1.2.19 Release

 

Client Library SDK Fix

 

Client Library SDK Improvement

  

This release includes important bug fixes that affect the SDKs reconnection behaviour when the connection between client and server goes quiet. Previously the SDK would incorrectly wait up to 120 seconds since last activity - this is now reduced to ~25 seconds.

A significant number of peripheral fixes are also included to improve stability and reliability.

There are no API breaking changes, however a few behavioural changes arise from the fixes:

  • authCallback is now bounded by realtimeRequestTimeout (default 10s) - previously unbounded. A callback that took longer and still succeeded will now fail the auth attempt. authUrl was already bounded, by the separate httpRequestTimeout, and is unaffected by this change.
  • realtimeRequestTimeout is now a public ClientOptions property, it was previously internal.
  • HeartbeatMonitorDelay rejects values below 1ms - previously accepted, but led to unintentional side-effects.
  • Connection.Key and Id read as null during a CLOSED/FAILED state-change callback (cleared before the event is emitted), and are now retained through SUSPENDED. connectionId no longer changes after a long disconnection, since the client always attempts a resume now. Use ChannelStateChange.Resumed to detect a fresh connection.
  • Connection.CreateRecoveryKey() returns a key while SUSPENDED, where it previously returned empty.
  • Some minor ErrorInfo messages and codes have changed.

Java SDK v1.8.1: LiveObjects Stable Release

 

Client Library SDK Improvement

 

LiveObjects

  

The LiveObjects plugin is no longer experimental! 🎉

It’s now production-ready for applications that need to manage complex, fast-changing state across AI agents, live configurations, and collaborative experiences—with state synchronization across multiple platforms.

Here's what it provides:

Path-based access: Navigate and manipulate deeply nested LiveMap and LiveCounter structures using simple paths. You no longer need to manage explicit object instances to read or update nested data.

Resilient subscriptions: Subscribe to a path rather than a specific object. Your subscriptions will continue to track and broadcast changes seamlessly, even if the underlying object at that location is completely replaced.

Dynamic runtime resolution: Path operations resolve against the current state at the exact moment they're invoked, so the same PathObject reference stays valid and reusable as your structure evolves.

For the full changelog, please visit the GitHub release page.

Ably Terraform Provider v1.1.0

 

Improvement

  

This release brings a large number of improvements and stability fixes, including new data sources for querying apps, keys, namespaces and queues, moderation rules as resources, and a tool that generates config from an account you built by hand.

New

  • Data sources for apps, keys, namespaces and queues, in singular and plural form, plus ably_me for the account and token
  • Moderation rules: ably_rule_hive_text, ably_rule_hive_dashboard, ably_rule_bodyguard, ably_rule_tisane, ably_rule_azure_moderation
  • Before-publish rules: ably_rule_before_publish_webhook, ably_rule_before_publish_lambda
  • ably-exporter, a release asset that generates Terraform config and import blocks from an existing account
  • Schemas, validation and Registry docs generated from the Control API spec

Fixed

  • inconsistent result after apply on every ably_app apply with fcm_project_id unset
  • Creates that failed after the remote object existed leaked a resource on every retry
  • Defaults were re-sent on unrelated applies, overwriting dashboard and server-side changes
  • State is reconciled against API responses field by field, removing phantom in-place updates
  • Namespace identified and authenticated could disagree after an update
  • Rules kept both AWS credentials and assume-role fields in state after a switch
  • Client retries cut from 4 to 2, with a longer backoff

Deprecated

  • authenticated on ably_namespace, superseded by identified. Still works, removed in a future major release.

Also released

  • Control client control v0.2.0: moderation and before-publish rule fields decoded, retry defaults exported, two breaking Go API changes

Cocoa SDK v1.4.0: LiveObjects stable release

 

Client Library SDK Improvement

 

LiveObjects

  

The AblyLiveObjects plugin is no longer experimental as of this release, which also makes breaking changes to its API — see below before upgrading. For Pub/Sub (Ably) users the only change is a fix to annotation encoding on channels whose cipher options were changed after creation.

Breaking LiveObjects API changes

PrimitivePathObject gains six per-case value accessors (stringValue() … jsonObjectValue()), and PrimitiveInstance gains the same six as throwing properties, for reading a primitive whose type is known at the call site.

The per-case getters on Primitive (stringValue … jsonObjectValue) and the same six on LiveMapValue are no longer public. Read one expected primitive type through the new accessors on PrimitivePathObject (try node.asPrimitive().stringValue()) or PrimitiveInstance (try instance.stringValue), or switch over Primitive's cases.

Ably-js v2.28.0: end to end encryption for annotation data payloads

 

Client Library SDK Improvement

  

Ably-js 2.28.0 is released, adding end to end encryption for annotation data payloads. These were previously not covered by e2e encryption to allow serverside summaries of certain aggregation types, but those types have been removed in favour of ones which store aggregatable information outside of the data payload, so we can now enable e2e encryption on annotation payloads.

You don't need to do anything other than use the new library version to take advantage of this; annotations published on encrypted channels by this library will now automatically have any payloads encrypted, and can be successfully decrypted by any version of ably-js that can handle annotations (since 2.13.0).

AI Transport JS SDK v0.8.0: Temporal plugin and Vercel AI SDK v7 support

 

Client Library SDK Improvement

  

This release introduces a Temporal plugin that lets you run a durable agent on Temporal without hand-writing the run lifecycle yourself. It also adds support for Vercel AI SDK v7, so you can build on v6 or v7.

The main changes:

  • Temporal plugin: register one plugin on your Temporal worker and the activities that frame an agent turn come with it. Your workflow wraps a turn in withRun(), and opening the run, suspending it while it waits on the client, ending it, and cleaning up after a failed turn are all handled for you.
  • Vercel AI SDK v7 support: the ai peer range now spans v6 and v7, so you can move to v7 when it suits you rather than in lockstep with us. The chat transport, the codec's public types and the wire format are identical on both majors, so your app needs no changes either way.
  • Other fixes and improvements: a new withAgentSession() helper creates, connects and tears down an agent session around one unit of durable work, and opening a turn now costs about one page of history however long the conversation has grown.

For the full changelog, please visit the GitHub release page.