Skip to content

Releases: ably/ably-js

2.17.0

08 Jan 14:32
a06036c

Choose a tag to compare

  • Support update and delete operations over realtime connections #2127
  • Implement message append for realtime and REST #2127
  • Publish, update, delete, and append methods now return result objects containing message serial/version information #2127
  • Fix msgpack encoding for multi-byte UTF-8 characters when using the binary protocol browsers #2145
  • Fix failing of non-sent queued messages when connection enters suspended/failed/closed state #2123
  • channel.detach() now immediately transitions to detached when the connection is not connected, instead of waiting or erroring #2149

v2.16.0

19 Dec 16:00
15ea48c

Choose a tag to compare

Full Changelog: 2.15.0...2.16.0

What's Changed

Introducing LiveObjects Path-based API

This release introduces a redesigned LiveObjects API centered around path-based operations. The new PathObject abstraction provides a more intuitive interaction model where operations resolve at runtime against the current value at a path, rather than being bound to specific object instances.

With this release, the ably-js LiveObjects API is no longer marked as @experimental and is in Public Preview.

Key improvements:

  • Resilient subscriptions: Subscribe to paths rather than object instances, so subscriptions automatically follow whatever object exists at that location even when it's replaced.
  • Deep subscriptions: Observe changes at any depth below a path with configurable depth control.
  • Operation context: Subscription callbacks now receive the complete ObjectMessage that triggered the change, including information about the publishing client and operation details.
  • Simplified object creation: Create deeply nested structures in a single operation using LiveMap.create() and LiveCounter.create() static methods, eliminating the risk of orphaned objects.
  • Compact representations: New .compact() and .compactJson() methods for converting LiveObjects to plain JavaScript objects.

This release contains breaking changes to the LiveObjects API. See the LiveObjects migration guide for detailed instructions on updating your code.

Breaking changes:

  • The LiveObjects plugin import path changed from 'ably/objects' to 'ably/liveobjects'
  • The plugin is now a named export: import { LiveObjects } from 'ably/liveobjects'
  • The API entrypoint changed from channel.objects to channel.object
  • channel.objects.getRoot() replaced by channel.object.get(), which returns a PathObject
  • channel.objects.createMap() and channel.objects.createCounter() replaced by static LiveMap.create() and LiveCounter.create() methods
  • Subscription callback signature changed to receive { object, message } context
  • LiveObject lifecycle event methods (.on(), .off(), .offAll()) removed; deleted events now surface via regular subscriptions
  • LiveObject.unsubscribeAll() removed; use individual Subscription.unsubscribe() instead
  • RealtimeObject.offAll() removed; use individual StatusSubscription.off() or RealtimeObject.off(event, callback) instead
  • channel.objects.batch() moved to PathObject.batch() / Instance.batch()
  • For TypeScript users: all LiveObjects types moved from 'ably' to 'ably/liveobjects'; global AblyObjectsTypes interface removed in favor of type parameters on channel.object.get<T>(); several types renamed, removed, or redesigned

v2.15.0

02 Dec 19:56
ef368ba

Choose a tag to compare

Full Changelog: 2.14.0...2.15.0

What's Changed

  • Implement client.clientId attribute as a shortcut for client.auth.clientId #2100
  • Add support for updating and deleting messages (REST-only for now) #2088

v2.14.0

02 Oct 12:20
5585ae9

Choose a tag to compare

Full Changelog: 2.13.0...2.14.0

What's Changed

  • Add clipped field to annotation summary types #2078

v2.13.0

19 Sep 08:26
7038090

Choose a tag to compare

Full Changelog: 2.12.0...2.13.0

What's Changed

  • Surface the connectionId of the client that submitted a LiveObject operation in subscribe callbacks #2084
  • Introduce version 4 of the Ably protocol #2076
  • Changes to the structure of the experimental annotations and message fields #2076
    • A new field Message.annotations to store annotation information for the message.
    • Message.version is now an object, containing information about the latest message version.
    • Message.createdAt has been removed, its purpose is now served by Message.timestamp.
    • Per the above, Message.timestamp now refers to when a message was first created on the server. For the latest updated at time, see Message.version.timestamp.
    • Message.operation has been removed. Its fields are now in Message.version.*
    • Message.summary has been moved to Message.annotations.summary

v2.12.0

22 Aug 20:14
af2ce0e

Choose a tag to compare

Full Changelog: 2.11.1...2.12.0

What's Changed

  • Add clientId of the client who submitted the operation to the LiveObjectUpdate in subscription callbacks #2072

v2.11.1

21 Aug 20:45

Choose a tag to compare

Full Changelog: 2.11.0...2.11.1

What's Changed

  • Fix race for browsers that throttle timeouts in background tabs #2070
  • Change ObjectOperation.initialValue to be a JSON encoded string #2065

v2.11.0

13 Aug 16:14
c923b2e

Choose a tag to compare

Full Changelog: 2.10.1...2.11.0

What's Changed

  • Add support to get and set JSON-encodable objects as values for entries in a LiveMap #2052

v2.10.1

16 Jul 08:48
837afe6

Choose a tag to compare

Full Changelog: 2.10.0...2.10.1

What's Changed

  • Fix minimization issue with Next.js 15.4+ canary builds #2057

v2.10.0

25 Jun 08:36
39e0677

Choose a tag to compare

Full Changelog: 2.9.0...2.10.0

What's Changed

  • Add Channels.all to type declarations #2040
  • Add ClientOptions.endpoint parameter and deprecate the environment, restHost and realtimeHost client options. See platform customization documentation for guidance on using the new endpoint parameter #1973