NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A Flutter WebSocket adapter with auto-reconnect, heartbeat, interceptors, ACK confirmation, message queuing, topic multiplexing, and connection pooling.
Last release 1 months ago
13 Aug 2026
Release timing varies
gaps range from 2 weeks to 11 months
Most releases are documented
notes for 9 of 14 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
14 releases · first in 2025
One column per month.
Connection: Fixed a race in WebSocketChannelAdapter.connect() where a stale connection's callbacks could overwrite the state of a newer one, subscript
WebSocketChannelAdapter.connect() where a stale connection's callbacks could overwrite the state of a newer one, subscriptions leaked across reconnects, and a stalled handshake could leave connect() hanging forever (connection generation counting + timeout now terminates the pending future).__ack__-pending messages being silently lost on disconnect — pending ACKs are now requeued for redelivery and late ACK frames are consumed instead of leaking into the message stream.ackTimeout × maxAckRetries), and failed sends while connected now fall back to the queue instead of being lost.stop() during an in-flight heartbeat send could re-arm a zombie timeout timer and trigger auto-reconnect after an intentional disconnect.maxMissedHeartbeats (stats no longer report a dead heartbeat as active) and can be restarted after reconnection.ChannelManager.route() no longer throws on malformed envelopes from the server (non-string topic/event values are now guarded instead of hardcast).errorStream now forwards errors through the error interceptor chain — returning null from onError actually suppresses the error, matching onSend/onReceive semantics.WebSocketClient.isReconnecting to distinguish "disconnected" from "automatically reconnecting".pubspec.yaml (a Dart-only registrant via dartPluginClass) so pub.dev correctly shows web support — it had been dropped accidentally in 0.1.7.package:adapter_websocket/adapter_websocket.dart; the old websocket_plugin.dart import remains as a backwards-compatible alias.example/lib/local_mock_websocket_adapter.dart) that answers heartbeat/ACK/topic traffic and broadcasts periodic events with zero network access — switch between Mock (local) and Real server right in the demo UI. Native builds use a real local WebSocket server; web builds use an in-memory transport with identical behaviour.WebSocketMessage now has a copyWith() method for convenient object duplication.
WebSocketMessage now has a copyWith() method for convenient object duplication.AckManager.sendWithAck() now embeds __ack_id__ directly into the JSON payload so the server can echo it back without out-of-band framing.useAck flag support; messages that were originally sent with ACK enabled are re-enqueued with the flag preserved and re-sent with ACK on reconnect.ChannelManager now passes a WebSocketMessage (instead of raw data) to the underlying send path, enabling full interceptor and ACK pipeline support for topic messages.maxReconnectAttempts = 0) is now displayed correctly in connection stats.null clearing for optional fields (e.g. httpClient, expectedPongMessagePattern) so callers can reset a field without creating a whole new config.0.1.7.Fixed Swift Package Manager (SPM) support for iOS and macOS: added Package.swift at ios/adapter_websocket/Package.swift and macos/adapter_websocket/Pa
Package.swift at ios/adapter_websocket/Package.swift and macos/adapter_websocket/Package.swift, which is the path Flutter's SPM integration actually resolves. The previously existing root-level ios/Package.swift and macos/Package.swift were not found by the pub.dev validator or Flutter tooling.Explicitly declared the web platform in pubspec.yaml (pluginClass: none), confirming that web WebSocket support is handled entirely in Dart via web_so
pubspec.yaml (pluginClass: none), confirming that web WebSocket support is handled entirely in Dart via web_socket_channel with no native plugin class required.Removed unused plugin scaffold files (adapter_websocket_web.dart, untitled5_method_channel.dart, websocket_platform_interface.dart) that were generate
adapter_websocket_web.dart, untitled5_method_channel.dart, websocket_platform_interface.dart) that were generated by flutter create --template=plugin but never wired into actual functionality.flutter_web_plugins, plugin_platform_interface.pubspec.yaml; web WebSocket support continues to work through web_socket_channel.Refactored WebSocketChannelAdapter internals to fully support the WASM platform, removing remaining dart:io dependencies from the connection path via
WebSocketChannelAdapter internals to fully support the WASM platform, removing remaining dart:io dependencies from the connection path via conditional imports.CompressionInterceptor reliability on native platforms.master).Fixed messages whose content contains the heartbeat string (e.g. JSON payloads that include "ping" or "pong") being incorrectly classified as heartbea
"ping" or "pong") being incorrectly classified as heartbeat responses.Interceptor / Middleware — WebSocketInterceptor abstract class and InterceptorChain for inspecting, transforming, or suppressing messages at send and
WebSocketInterceptor abstract class and InterceptorChain for inspecting, transforming, or suppressing messages at send and receive time. Ships with a built-in LoggingInterceptor.MessageQueue buffers outgoing messages while the connection is down and automatically flushes them on reconnect. Configurable via enableMessageQueue, maxQueueSize, and messageQueueTimeout.AckManager injects a unique __ack_id__ into outgoing messages and waits for server acknowledgement. Supports configurable timeout and automatic retries. Configurable via enableAck, ackTimeout, and maxAckRetries.ChannelManager and WebSocketTopic enable multiple logical channels over a single WebSocket connection using a JSON envelope format ({"topic":"…","event":"…","payload":…}). Access via client.channel('topic:name').CompressionInterceptor transparently gzip-compresses outgoing messages above a configurable byte threshold and decompresses incoming messages. Available on native platforms (not web).WebSocketPool manages multiple WebSocketClient instances across different server endpoints with round-robin, random, or least-connections load balancing. Supports broadcast() to all connected clients.WebSocketConfig.copyWith() now includes expectedPongMessagePattern.WebSocketClient message pipeline runs through the interceptor chain before sending and after receiving.WebSocketClient.send() and sendMessage() enqueue messages when disconnected (if enableMessageQueue is enabled) instead of immediately throwing.connect() and from the reconnection manager).connectionStats now includes messageQueue, ack, channels, and interceptors fields._isHeartbeatMessage() null dereference when only expectedPongMessage was set.copyWith() dropping expectedPongMessagePattern.expectedPongMessagePattern.handleIncomingMessage() not recognising pong responses matched by expectedPongMessagePattern.WebSocketClient._publishStats() not being called after initiating reconnection from heartbeat timeout.reconnection_manager_test.dart causing NullPointerException.ReconnectionManager timer leak between tests by adding tearDown.reconnection_manager_test.dart "max attempts" test not waiting long enough for exponential backoff.websocket_plugin_test.dart unstable-connection test relying on 30-second instability timer.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
TODO: Describe initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →