Repository navigation
Release: v2.0.0 - #481
Release: v2.0.0#481
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
WalkthroughThis is the v2.0.0 release PR for the Ably CLI, bumping the package version from 1.3.0 to 2.0.0 and adding the corresponding CHANGELOG entry. The release itself was delivered via the integration branch merged in #467 — this PR contains only the release bookkeeping (version bump + changelog). The v2.0.0 milestone gets the CLI ready for MAU-based pricing by switching to server connections and introducing a stable, per-install client ID. Changes
Review Notes
|
There was a problem hiding this comment.
Review: Release v2.0.0
This PR is a release-only change: the 2.0.0 changelog entry and the package.json version bump. No source code changed, so the command/test/output checklist doesn't apply.
Changelog
- Content matches the PR description exactly — good consistency.
- Date (
2026-11-02) is correct. - Breaking changes section is clear and actionable, with concrete migration steps for users (e.g.
"chat"→"chat:*"). - The version jump from 1.3.0 → 2.0.0 is appropriate given the breaking changes documented (exit code behavior, client ID rejection, JSON output contract change for
--duration).
One minor note worth verifying before merge: The PR description mentions @ably/pubsub-server 3.0.0, @ably/chat 2.0.0, and @ably/spaces 0.6.0. It's worth a quick sanity check that package.json dependencies reflect those exact versions — the diff doesn't show the dependency lines, only the version field, so this can't be confirmed from the diff alone.
No issues blocking merge.
The 2.0.0 release gets the CLI ready for MAU-based pricing, where Ably bills each distinct client ID that connects from a device. Until now every CLI command connected as a new random client ID, so a single terminal session could look like dozens of users. The CLI now connects as a server, which is not counted as MAU, and acts as one stable client ID that you can see in the "Using:" banner and choose yourself.
This release also changes what
ably apps rules creatematches, to work the same way as the rules the dashboard creates.Breaking changes
ably apps rules create "chat"used to create a rule forchatand every channel beneath it, such aschat:room1. It now creates a rule for the channelchatalone. To cover the channels beneath it, useably apps rules create "chat:*". Existing rules are unaffected and keep matching as before.subscribeandenter, now exit with a non-zero code when their connection fails, or when it drops five times in a row without staying connected for 10 seconds. Previously they logged a warning and exited with 0, so a script could not tell that it had stopped receiving messages.--duration, its--jsonoutput ends with the standard{"type":"status","status":"completed"}line, the same as every other command, instead of a separatecompleteline.*is rejected as the CLI's own client ID.--client-id nonestill works but is deprecated and prints a warning.One client ID per install
ably interactive, and every token it issues. It is chosen from the first of--client-id,ABLY_CLIENT_ID,client.idin~/.ably/config, or a default generated once per install and saved in the config.--client-idin each terminal.x-ably-clientIdclaim is rejected before connecting, with an explanation.ably benchgives each process its own client ID, so many concurrent bench processes do not hit the per-client-ID connection limit.Server connections
@ably/pubsub-server3.0.0 instead ofably2.x, with@ably/chat2.0.0 and@ably/spaces0.6.0 on the same core. Every Pub/Sub, Chat and Spaces connection the CLI makes is a server connection.Tokens
ably auth issue-ably-tokenandissue-jwt-tokenalways show who the token is for:Client ID: anonymousin human output andclientId: nullin JSON, rather than leaving the field out.ably auth issue-jwt-token --client-type serverissues a JWT whose holder connects as a server.--client-id "*"still issues wildcard tokens.ably auth revoke-tokenuses the endpoint you are configured for, instead of always callingrest.ably.io, and reports a failure for each target separately.Channel rules
ably apps rules createcreates rules whose ID is a match expression, with the same syntax as a capability resource:chat:*,*:presenceorfoo:*:baz.ably apps rules create,updateandlistshow each rule's mode,matcherornamespace, since the same ID matches different channels in each.updatekeeps the mode a rule was created with.