NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
Flutter SDK for ART realtime communication with WebSocket channels, AI Agents, AI Orchestrators, presence tracking, end-to-end encrypted messaging, and CRDT-backed shared objects.
Last release today
16 Oct 2026
Ships on a steady schedule
a new release about every 2 months
Nearly every release is documented
notes for 8 of 8 stable releases
Nothing withdrawn
no release was ever pulled
5 months old
8 releases · first in 2026
One column per month.
New UploadOptions.allowedMimeTypes. UploadOptions.scopes and ConfigType.knowledgeBase are deprecated; scopes are ignored.
accessToken and renews with the refresh token, as before.AuthHttpError, an ARTError that carries the HTTP status. isTerminalAuthError is true for rejected credentials (401 or 403).authenticationFailed event (AuthenticationFailedDetail). When the credentials are rejected, or a forced renewal fails while reconnecting, the SDK stops reconnecting instead of retrying forever; update the credentials and call connect() again. The long-poll fallback also stops on rejected credentials.AdkConfig.connectionTimeoutMs, and a response without an access token is an error.IWebsocketHandler.ensureAuthorization).Auth.getInstance(credentials:) updates the stored credentials, and starts with an empty token cache when the organisation, environment, project or client ID changes. A credentials provider that switches identity also drops the old tokens.Adk.disconnect() removes the instance's own socket listeners; connect() adds them back.UploadOptions.threadId and ListOptions.threadId are required, and getFile takes a threadId.Subscription.configurationId, ChannelConfig.configurationID); thread uploads also set the thread.UploadOptions.allowedMimeTypes. UploadOptions.scopes and ConfigType.knowledgeBase are deprecated; scopes are ignored.onProgress reports 0.0 when the upload starts and 1.0 when the server has stored the file.UploadError.step is now validate, upload, list, get or delete.file_meta entries are {id, name, content_type}; build one with MediaRef.fromFileRef(ref).toJson().CallApiProps.payload accepts a FormDataPayload for multipart/form-data requests.my-agent@release2); anything else throws an ArgumentError. See validateExecutionReference.AgentThread.dispose() ends the thread's active run and removes only its listeners; later calls on the thread throw a StateError.RunDeps.executionOrigin and PushConfig.executionOrigin mark requests started from the playground (execution_origin). Replies keep the origin of the thread's latest run.Subscription.listen, bind and attachThreadListener return a listener id, and remove accepts one.ConnectionError, an ARTError with a readable message, a code and the HTTP status when there was one, and a new connectionFailed event. The connection fails when the credentials are missing or rejected, a token renewal fails, a billing or concurrency limit is reached, the connection is not ready in time, it cannot be restored after 5 reconnect attempts, or the app pauses or closes it. Automatic reconnection then stops, and waits, sends and subscribes throw the same error until connect() is called again.AdkConfig.connectionTimeoutMs (default 30 seconds) bounds connection readiness, auth requests and replies to control requests such as subscribes; it does not limit how long an execution runs. A control request without a reply now throws CONNECTION_TIMEOUT instead of resolving to null.connect() completes once the connection is ready and throws the ConnectionError when the attempt fails, including for missing or rejected credentials (it used to complete normally). Concurrent calls share one attempt, and resume() now calls connect().pause(), closeWebSocket() and disconnect() end the connection with CONNECTION_PAUSED or CONNECTION_CLOSED. close is no longer emitted for these, nor after a failed first authentication.agent_error carrying its code, with details.source: connection and details.execution_status: unknown, since the client cannot tell whether the execution finished. The thread state becomes failed from the client ("Connection unavailable"). Orchestrator threads with a request in progress report the same. This replaces the limit-only handling earlier in this release.push throws a CONNECTION_LOST ConnectionError, and AgentThread.run and OrchestratorThread.push rethrow it after ending the request. The in-process loopback of the long-poll fallback is unchanged.ConnectionError with code ACK_TIMEOUT (it was ARTError.ackTimeout).ConnectionError instead of falling back to a local channel configuration; other subscribe failures still fall back. A failed agent or orchestrator subscribe is retried on the next call.AuthHttpError.IWebsocketHandler has new members: ensureAuthorization(), onConnectionFailure() and offConnectionFailure().IWebsocketHandler.sendMessage throws a ConnectionError instead of returning false and queueing the message.Updated file uploading to agents
- Improved Documentations
Added Orchestrator Tester example
Added dartdoc comments to every public API surface (Adk, Socket, Subscription, LiveObjSubscription, Interception, EventEmitter, LongPollClient, CRDT /
Adk, Socket,
Subscription, LiveObjSubscription, Interception, EventEmitter,
LongPollClient, CRDT / CRDTProxy, CRDT operation types, LDValue
hierarchy, CryptoBox, Auth, and all config / type classes) so the
enabled public_member_api_docs lint runs clean.repository / issue_tracker
placeholders in pubspec.yaml for the public source URL.Improved onboarding with more structured and clear documentation
Added clear examples for all major features
WebSocket connection management
Your coding agent can read these notes before it upgrades. Set up the MCP server →