openim_sdk
An instant messaging plug-in that supports Android and IOS. And the server is also all open source.
2.5.2
13K downloads/mo
#2629 most downloaded on pub.dev
Matkurban/openim_sdk
What this package is like to depend on
Last release 25 days ago
29 Jul 2026
Release timing varies
gaps range from 8 days to 2 months
Some releases are documented
notes for 16 of 64 stable releases
Nothing withdrawn
no release was ever pulled
5 months old
64 releases · first in 2026
64 releases in the last 12 months
see the full history below
Release timeline
64 releases · Mar 2026 to Jul 2026Releases
latest 60 of 64-
2.5.229 Jul 2026Release notes
Open source →Bug Fixes
- 修复 pub.dev 平台得分(支持 Android、iOS、Web、Windows、macOS、Linux 全部 6 大平台)
- 隔离 Web 与 Native 平台的条件导入,解决
dart:io与dart:js_interop的静态检测冲突 - 在
pubspec.yaml中添加显式platforms声明并修复依赖约束
-
2.5.104 Jun 2026Release notes
Open source →Release notes
Open source →Bug Fixes
- remove unused synchronized dependency from pubspec.yaml (cf23214)
-
2.5.004 May 2026Release notes
Open source → -
2.4.201 May 2026 -
2.4.101 May 2026Release notes
Open source →Release notes
Open source → -
2.4.026 Apr 2026Release notes
Open source → -
2.3.026 Apr 2026 -
2.2.120 Apr 2026Release notes
Open source →2.2.1 (2026-04-20)
Bug Fixes
- the problem that the token field in the CallSession class is missed during serialization (147b445)
Release notes
Open source →Bug Fixes
- the problem that the token field in the CallSession class is missed during serialization (147b445)
-
2.2.020 Apr 2026Release notes
Open source →Release notes
Open source →Features
🚀 Cross-platform multithreading via
isolate_manager- Migrate all CPU-bound helpers (
computeMd5,computePartMd5s,computeCombinedMd5,computeImageDimensions,computeImageDimensionsFromFile,computeSearchFilter,computeHistoryFilter,readFilePart) from Fluttercompute()to theisolate_manager: ^6.3.2plugin. 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. - Split worker functions into a Flutter-free file (
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) handlesdart:io-based workers (file chunking). - New coordinator
SdkWorkers(lib/src/isolate/sdk_workers.dart) manages the shared worker lifecycle and registers function → worker-name mappings. SdkMethodCall/SdkMethodResult/SdkListenerEventnow carrytoMap/fromMapand a type-tagged envelope so the L1 background-Isolate protocol is fully Map-based (future-proof for any transport).- Web build requires consumers to run
dart run isolate_manager:generate --sharedonce to produceweb/$shared_worker.js(see README for details). The example app ships the pre-built file. - L1 big-SDK-Isolate (
SdkIsolateManager) keeps usingdart:isolateinternally becauseisolate_manager's request-responsecompute()model cannot receive push listener events while idle; the public API (initialize/isActive/invoke/events/dispose) is unchanged.
- Migrate all CPU-bound helpers (
-
2.1.019 Apr 2026Release notes
Open source → -
2.0.217 Apr 2026 -
2.0.108 Apr 2026 -
1.9.102 Apr 2026Release notes
Open source →- add
updateNotemethod inFavoriteManagerto update note content and refresh favorite item.
- add
-
1.9.002 Apr 2026Release notes
Open source →🚀 Background Isolate Architecture
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.
- New Isolate infrastructure — Added 4 core files:
SdkIsolateManager— Singleton lifecycle manager, gates Isolate vs local execution viaisActiveSdkIsolateEntry— 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 communication
- All 10 managers proxied — IMManager, ConversationManager, MessageManager, GroupManager, UserManager, FriendshipManager, MomentsManager, FavoriteManager, CallManager, RedPacketManager
- Listener event forwarding — All listener callbacks (connect, message, conversation, group, friendship, user, moments, favorite, call, red packet, custom business, upload progress) are serialized across the Isolate boundary and re-dispatched on the main Isolate
- Transparent activation — Call
SdkIsolateManager.initialize()beforeinitSDKto enable; omit it to run entirely on the main thread as before
🐛 Bug Fixes
- Fixed
isInitializedalways returningfalsein Isolate mode — Added_initializedfield to track state across Isolate boundary - Fixed
.toJson()serialization crashes — Manually fixed 55 nested.toJson()calls across 4.g.dartfiles where generated code produced incorrect output - Fixed
_currentUserIDLateInitializationError— All 5 login paths (login,loginByEmail,loginByPhone,loginByAccount,loadLoginConfig) now properly initialize_currentUserIDon every manager via_setManagersUserID() - Fixed infinite Isolate recursion — Background Isolate no longer recursively spawns itself when
SdkIsolateManager.isActiveis true inside the Isolate - Fixed
BackgroundIsolateBinaryMessengercrash — Platform channel calls (path_provider) are resolved on the main Isolate before entering the background Isolate - Fixed duplicate
ToStoreregistration — RemovedgetDatabaseInstance()as public API, added KV proxy methods (getValue/setValue/removeValue/getSpaceInfo) through the Isolate boundary - Fixed video message display issues — Video messages now show thumbnails and play correctly:
- Changed
enableHardwareAccelerationtotrueon non-Linux platforms (fixes mpv software renderer crash) - Fixed
createSnapshotto reliably capture first frame by playing with volume 0 and waiting for stream dimensions - Added try-catch to video upload branch in
_handleMediaUploadIfNeeded
- Changed
- Fixed
build.yaml— Changed from wildcardgenerate_forto explicit file list to work with analyzer 10.0.0
📦 New Models
CallSession— Call session model withtoJson()/fromJson()supportMomentCreateReq— Moment creation request model withtoJson()/fromJson()support- Added
fromJsonfactories toSendRedPacketRequest,RedPacketDetail, andPointsTransaction
- New Isolate infrastructure — Added 4 core files:
-
1.8.230 Mar 2026Nothing published for this version
-
1.8.130 Mar 2026Nothing published for this version
-
1.8.030 Mar 2026Nothing published for this version
-
1.7.930 Mar 2026Nothing published for this version
-
1.7.830 Mar 2026Nothing published for this version
-
1.7.730 Mar 2026 -
1.7.629 Mar 2026Release notes
Open source →- Red packet grab notification refactored: BusinessNotification → real IM custom message:
Grab notifications are no longer pushed as BusinessNotification "phantom messages". The backend now sends a real IM custom message (
contentType=110,description="redPacketGrabNotify") into the conversation after a successful grab, appearing as a visible grab-notification bar in chat history. - Added
RedPacketGrabNotifyMessageDatamodel: Parses the server-sent grab notification message, containingpacketID,grabberID,grabberName,grabberFaceURL,senderID,senderName,amountfields. - Removed
RedPacketGrabbedNotifymodel: Previously used for BusinessNotification-based grab events, now replaced byRedPacketGrabNotifyMessageData. - Simplified
OnRedPacketListener: RemovedonRedPacketGrabbedcallback; onlyonRedPacketExpiredandonPointsBalanceChangedremain. - Simplified
RedPacketManager.dispatchBusinessNotification: Removedred_packet_grabbedbranch; onlyred_packet_expiredandpoints_adjustedhandling remains. - Red packet & points system: Added
RedPacketManager, encapsulating send/grab/detail APIs and points balance queries. - Model expansion:
RedPacketGrabInfo/RedPacketDetail/RedPacketGrabbedNotifygainednicknameandfaceURLfields, including user avatar info in grab records. IMManagerintegration:redPacketManageradded as a standard field inIMManager, consistent with other managers;onPointsBalanceChangedcallback fires automatically on balance changes.- Refactor: Removed
OpenIM.redPacketManagershortcut, unified toOpenIM.iMManager.redPacketManager. - Offline message pull: N per-message callbacks → 1 batch callback (
msg_syncer.dart,message_manager.dart,advanced_msg_listener.dart): Aligned with Go SDKbatchNewMessagesdesign:_processPulledMsgsno longer triggersonRecvOfflineNewMessagefor each message in the same conversation one by one, now fires the newonRecvOfflineNewMessages(List<Message>)batch callback in a single call. - Empty
senderNicknamein search results (notification_dispatcher.dart,msg_syncer.dart,user_manager.dart,database_service.dart): Aligned with Go SDKUpdateMsgSenderFaceURLAndSenderNickname: when the user's own info (nickname/avatar) changes, retroactively updatessenderNickname/senderFaceUrlfor all messages in the local database. - WebSocket push messages not storing
senderFaceUrl(_msgDataToMapinmsg_syncer.dart): Map key used'senderFaceURL'(uppercase L) which mismatched the DB columnsenderFaceUrl(lowercase l), preventing avatar URLs from being written to the database. Fix: changed key to'senderFaceUrl'to align with DB schema. - Incorrect
searchLocalMessagesresults (_searchFilterWorkerinsdk_isolate.dart): Original implementation performed fuzzy keyword matching on the entirecontentJSON string, causing number searches to hit image dimensions, file path sequences, and server URL IDs. Fixed to search specific fields bycontentType, aligned with Go SDKfilterMsglogic:- Text (101): search
textElem.contentonly - @message (106): search
atTextElem.textonly - File (105): search
fileElem.fileNameonly - Merge (107): search
mergeElem.titleonly - Card (108): search
cardElem.nicknameonly - Location (109) / Custom (110): search
descriptiononly - Quote (114): search
quoteElem.textonly - Image (102) / Voice (103) / Video (104): excluded when keyword is present
- Text (101): search
- Red packet grab notification refactored: BusinessNotification → real IM custom message:
Grab notifications are no longer pushed as BusinessNotification "phantom messages". The backend now sends a real IM custom message (
-
1.7.529 Mar 2026Nothing published for this version
-
1.7.428 Mar 2026Nothing published for this version
-
1.7.328 Mar 2026Nothing published for this version
-
1.7.228 Mar 2026Nothing published for this version
-
1.7.027 Mar 2026Nothing published for this version
-
1.6.727 Mar 2026Nothing published for this version
-
1.6.627 Mar 2026Nothing published for this version
-
1.6.526 Mar 2026Nothing published for this version
-
1.6.424 Mar 2026Nothing published for this version
-
1.6.324 Mar 2026Nothing published for this version
-
1.6.224 Mar 2026Nothing published for this version
-
1.6.124 Mar 2026Nothing published for this version
-
1.6.024 Mar 2026Nothing published for this version
-
1.5.022 Mar 2026Nothing published for this version
-
1.4.721 Mar 2026Nothing published for this version
-
1.4.621 Mar 2026Nothing published for this version
-
1.4.521 Mar 2026Nothing published for this version
-
1.4.421 Mar 2026Nothing published for this version
-
1.4.320 Mar 2026Nothing published for this version
-
1.4.220 Mar 2026Nothing published for this version
-
1.4.120 Mar 2026Nothing published for this version
-
1.4.020 Mar 2026Nothing published for this version
-
1.3.519 Mar 2026Nothing published for this version
-
1.3.418 Mar 2026Nothing published for this version
-
1.3.318 Mar 2026Nothing published for this version
-
1.3.218 Mar 2026Nothing published for this version
-
1.3.117 Mar 2026Nothing published for this version
-
1.3.017 Mar 2026Nothing published for this version
-
1.2.117 Mar 2026Nothing published for this version
-
1.2.016 Mar 2026Nothing published for this version
-
1.1.716 Mar 2026Nothing published for this version
-
1.1.315 Mar 2026Nothing published for this version
-
1.1.215 Mar 2026Nothing published for this version
-
1.1.015 Mar 2026Nothing published for this version
-
1.0.815 Mar 2026Nothing published for this version
-
1.0.715 Mar 2026Nothing published for this version
-
1.0.615 Mar 2026Nothing published for this version
-
1.0.515 Mar 2026Nothing published for this version
-
1.0.415 Mar 2026Nothing published for this version