NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #2138 most downloaded on pub.dev
An instant messaging plug-in that supports Android and IOS. And the server is also all open source.
Last release 8 days ago
29 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Some releases are documented
notes for 20 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 months old
68 releases · first in 2026
One column per month.
clean up analysis_options.yaml by removing commented-out sections and unnecessary exclusions
await asynchronous calls in FavoriteManager for message and moment favoriting checks
update dependencies in pubspec.yaml to latest versions
migrate to worker_manager for L2 CPU helpers, enhancing performance and removing web worker dependency. Update changelog and documentation accordingly
修复 pub.dev 平台得分(支持 Android、iOS、Web、Windows、macOS、Linux 全部 6 大平台)
dart:io 与 dart:js_interop 的静态检测冲突pubspec.yaml 中添加显式 platforms 声明并修复依赖约束remove unused synchronized dependency from pubspec.yaml
升级tostore 的版本到 3.1.2,以修复在 Linux 中闪退的问题
2.4.2 (2026-05-01) Bug Fixes 优化未读消息计数逻辑并统一触发未读总数变更
2.4.1 (2026-05-01) Bug Fixes 优化未读消息计数逻辑并统一触发未读总数变更 ( 4269f9a ) 移除未使用的 getAtAllTag 方法并更新依赖版本
2.4.0 (2026-04-26) Features 添加举报和处理 ( 3b94496 ) 添加账号注销 ( e9cebbf ) Bug Fixes 优化线程问题
2.3.0 (2026-04-26) Features 修复搜索不准确问题
the problem that the token field in the CallSession class is missed during serialization
🚀 Cross-platform multithreading via isolate_manager
isolate_managercomputeMd5, computePartMd5s, computeCombinedMd5, computeImageDimensions, computeImageDimensionsFromFile, computeSearchFilter, computeHistoryFilter, readFilePart) from Flutter compute() to the isolate_manager: ^6.3.2 plugin. On Web they now run in a real JS Web Worker via the generated $shared_worker.js; on native they continue running in VM Isolates. Public API signatures are unchanged.lib/src/utils/sdk_isolate_workers_core.dart) so dart2js can compile them. A companion native-only file (lib/src/utils/sdk_isolate_workers_io.dart) handles dart:io-based workers (file chunking).SdkWorkers (lib/src/isolate/sdk_workers.dart) manages the shared worker lifecycle and registers function → worker-name mappings.SdkMethodCall / SdkMethodResult / SdkListenerEvent now carry toMap / fromMap and a type-tagged envelope so the L1 background-Isolate protocol is fully Map-based (future-proof for any transport).dart run isolate_manager:generate --shared once to produce web/$shared_worker.js (see README for details). The example app ships the pre-built file.SdkIsolateManager) keeps using dart:isolate internally because isolate_manager's request-response compute() model cannot receive push listener events while idle; the public API (initialize / isActive / invoke / events / dispose) is unchanged.添加 runInDatabase 方法,可以在数据库实例中运行自定义的查询修改。
2.0.2 (2026-04-17) Bug Fixes fix video message bugs
### Bug Fixes * 修复文档发布 2.0.0版本
add updateNote method in FavoriteManager to update note content and refresh favorite item.
updateNote method in FavoriteManager to update note content and refresh favorite item.All SDK Future methods (~160 methods across 10 managers) now run in a dedicated background Isolate, keeping the UI thread completely free from databas
All SDK Future methods (~160 methods across 10 managers) now run in a dedicated background Isolate, keeping the UI thread completely free from database I/O, network serialization, and protobuf parsing.
SdkIsolateManager — Singleton lifecycle manager, gates Isolate vs local execution via isActiveSdkIsolateEntry — Background Isolate entry point, receives (RootIsolateToken, SendPort) tupleSdkMethodDispatcher — 1400+ line switch-based dispatcher routing all 10 managers' methodsSdkIsolateProtocol — Request/response envelope types for cross-Isolate communicationSdkIsolateManager.initialize() before initSDK to enable; omit it to run entirely on the main thread as beforeisInitialized always returning false in Isolate mode — Added _initialized field to track state across Isolate boundary.toJson() serialization crashes — Manually fixed 55 nested .toJson() calls across 4 .g.dart files where generated code produced incorrect output_currentUserID LateInitializationError — All 5 login paths (login, loginByEmail, loginByPhone, loginByAccount, loadLoginConfig) now properly initialize _currentUserID on every manager via _setManagersUserID()SdkIsolateManager.isActive is true inside the IsolateBackgroundIsolateBinaryMessenger crash — Platform channel calls (path_provider) are resolved on the main Isolate before entering the background IsolateToStore registration — Removed getDatabaseInstance() as public API, added KV proxy methods (getValue/setValue/removeValue/getSpaceInfo) through the Isolate boundaryenableHardwareAcceleration to true on non-Linux platforms (fixes mpv software renderer crash)createSnapshot to reliably capture first frame by playing with volume 0 and waiting for stream dimensions_handleMediaUploadIfNeededbuild.yaml — Changed from wildcard generate_for to explicit file list to work with analyzer 10.0.0CallSession — Call session model with toJson()/fromJson() supportMomentCreateReq — Moment creation request model with toJson()/fromJson() supportfromJson factories to SendRedPacketRequest, RedPacketDetail, and PointsTransactionNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
add changePassword and resetPassword method.
changePassword and resetPassword method.tostore versionRed packet grab notification refactored: BusinessNotification → real IM custom message: Grab notifications are no longer pushed as BusinessNotificatio
contentType=110, description="redPacketGrabNotify") into the conversation after a successful grab, appearing as a visible grab-notification bar in chat history.RedPacketGrabNotifyMessageData model:
Parses the server-sent grab notification message, containing packetID, grabberID, grabberName, grabberFaceURL, senderID, senderName, amount fields.RedPacketGrabbedNotify model:
Previously used for BusinessNotification-based grab events, now replaced by RedPacketGrabNotifyMessageData.OnRedPacketListener:
Removed onRedPacketGrabbed callback; only onRedPacketExpired and onPointsBalanceChanged remain.RedPacketManager.dispatchBusinessNotification:
Removed red_packet_grabbed branch; only red_packet_expired and points_adjusted handling remains.RedPacketManager, encapsulating send/grab/detail APIs and points balance queries.RedPacketGrabInfo / RedPacketDetail / RedPacketGrabbedNotify gained nickname and faceURL fields, including user avatar info in grab records.IMManager integration: redPacketManager added as a standard field in IMManager, consistent with other managers; onPointsBalanceChanged callback fires automatically on balance changes.OpenIM.redPacketManager shortcut, unified to OpenIM.iMManager.redPacketManager.msg_syncer.dart, message_manager.dart, advanced_msg_listener.dart):
Aligned with Go SDK batchNewMessages design: _processPulledMsgs no longer triggers onRecvOfflineNewMessage for each message in the same conversation one by one,
now fires the new onRecvOfflineNewMessages(List<Message>) batch callback in a single call.senderNickname in search results (notification_dispatcher.dart, msg_syncer.dart, user_manager.dart, database_service.dart):
Aligned with Go SDK UpdateMsgSenderFaceURLAndSenderNickname: when the user's own info (nickname/avatar) changes, retroactively updates senderNickname/senderFaceUrl for all messages in the local database.senderFaceUrl (_msgDataToMap in msg_syncer.dart):
Map key used 'senderFaceURL' (uppercase L) which mismatched the DB column senderFaceUrl (lowercase l), preventing avatar URLs from being written to the database.
Fix: changed key to 'senderFaceUrl' to align with DB schema.searchLocalMessages results (_searchFilterWorker in sdk_isolate.dart):
Original implementation performed fuzzy keyword matching on the entire content JSON string, causing number searches to hit image dimensions, file path sequences, and server URL IDs.
Fixed to search specific fields by contentType, aligned with Go SDK filterMsg logic:
textElem.content onlyatTextElem.text onlyfileElem.fileName onlymergeElem.title onlycardElem.nickname onlydescription onlyquoteElem.text onlyNothing published for this version
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
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
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
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
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
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
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →