fluttercandies/wechat_flutter: a Flutter WeChat clone built on Tencent's IM SDK
wechat_flutter is Flutter version WeChat, an excellent Flutter instant messaging IM open source library!
At a glance
- What is it?
- wechat_flutter is a Flutter UI clone of WeChat that wires its chat features to tencent_cloud_chat_sdk. It is a reference implementation for IM screens, not a messaging backend, and the README's own issue list is the first place to look before adopting it.
- Who is it for?
- Adopt wechat_flutter if you need working Flutter screens for chat, contacts, groups and media and you are willing to host the IM service yourself through tencent_cloud_chat_sdk. Do not adopt it if you need an end-to-end product: video messages, location messages, scan and remark editing are unchecked in the feature list, and the README points at issues_list.md rather than a release channel.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Activity is slowing. The repository last received commits 6 months ago.
- What is it written in?
- Mainly Dart, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 24, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What wechat_flutter actually is, and who it is for
The README opens by calling the project "flutter版微信", a Flutter version of WeChat, and says it implements the basic instant messaging features on Android and iOS. The repository is a full application, not a package: the top level holds android/, ios/, ohos/, lib/, assets/ and a pubspec.yaml, and the README tells you to clone it and run it rather than add it as a dependency. That shape decides the audience. This is for Flutter developers who need to see how a WeChat-style client is assembled, or who want a starting UI for their own IM product. It is not for someone who wants to drop a chat widget into an existing app.
The feature list is the honest summary of scope. Checked items include text, emoji, image and voice messages, registration, login, auto-login, the session list, contacts, avatar and nickname editing, friend search, add and delete, video capture, group creation, exit, dissolution, group lists, group announcements, group renaming and text group messages. Unchecked items are video messages, location messages, scan and remark settings. Four gaps in a list that long is not a scandal, but video messages and scan are exactly the features a WeChat clone gets judged on, so plan around them.
The README also advertises a paid course and business contacts for custom development, interview help and App Store 4.3 rejection problems. That is context worth knowing: the project doubles as a lead generator, and the README's English version lives in README_EN.md while the main file is Chinese.
The architecture: a Flutter UI layer over tencent_cloud_chat_sdk
The third-party table is the clearest map of the design. tencent_cloud_chat_sdk provides the instant messaging, shared_preferences handles persistence, and provider handles state management. Everything else is presentation and device access: cached_network_image for image caching, webview_flutter for web pages, image_picker for picking images and video, flutter_sound and audioplayers for recording and playback, camera and video_player, permission_handler, dio for networking, and wechat_assets_picker for the WeChat-style gallery.
That split matters when you evaluate the project. The message transport, account model and group semantics come from Tencent's SDK, so the repository's own code is mostly screens, state and glue. If you fork it, you inherit a dependency on a commercial IM service and its configuration, not a self-contained protocol implementation. The README does not explain how to provision that service, which is the largest undocumented step for a new user.
Two smaller choices are visible in the table. lpinyin and azlistview exist for the contact list: pinyin conversion feeds the indexed, sticky-header scrolling that Chinese contact lists use. extended_text and extended_text_field handle rich text in messages and input. Those are the details that make the clone feel like WeChat rather than a generic chat demo, and they are also the parts most likely to need adjustment for a non-Chinese audience.
Installing wechat_flutter and running it for the first time
The README's tutorial is three commands. Clone the repository, fetch dependencies, run. The iOS section adds a CocoaPods step, and the README notes that pod update is optional while pod install is the required one.
git clone https://github.com/fluttercandies/wechat_flutter.git
flutter packages get
flutter runFor iOS, the README says to enter the ios directory first, then install the pods. If pod install fails with a connection refused error against raw.githubusercontent.com, the README attributes it to an unset domestic mirror and suggests either configuring one or using a proxy.
cd ios/
pod update
pod installThe README's environment section names two Flutter versions: 3.27.5-ohos-1.0.4 and 3.24.3. The log entry for 2026.03.07 says full HarmonyOS Next 6.0 compatibility was added, and that the relevant dependencies are marked in pubspec.yaml with the string "鸿蒙专属", with an alternative file named pubspec.yaml.harmony. If you target HarmonyOS, that is where to look.
Before any of this, read the warning at the top of the README. It says that if dependencies fail to compile, you can try removing the "^" from every entry under dependencies in pubspec.yaml or setting plugin versions to any, then rebuild, and that if errors persist you should run flutter clean in the project root and run again. It also says to check whether each plugin's stated Flutter version matches your local Flutter. That is a maintenance instruction disguised as a troubleshooting note, and it tells you the project is sensitive to version drift.
Where wechat_flutter breaks, and when it is the wrong tool
The most concrete limitation is the one the README puts in its own log: on 2019.12.30 the project removed extended_text_field, yet the third-party table still lists extended_text_field as the library for extended text input. The README does not reconcile the two. Treat the dependency table as indicative rather than current, and read pubspec.yaml for the authoritative list.
The second limitation is the dependency strategy itself. Advising users to strip version constraints or set versions to any is a workaround for a project that does not pin a tested combination, and it pushes resolution problems onto you. In a commercial app, resolving to any version is not a viable long-term state.
The third is scope. Video messages, location messages, scan and remark editing are unchecked. If your product needs any of them, you are writing them yourself against the Tencent SDK, and the repository gives you no reference. The README also does not document rollback, migration, data export or a support policy, and there are no retrieved releases, so there is no versioned artifact to pin to. The last push was on 2026-03-08, so the project has not been touched for several months; describe it as a snapshot, not as something under active development.
Finally, this is a client. It does not give you a backend, an operations story or a compliance story. Teams that need a self-hosted server should not start here.
How it compares with a plain Flutter chat tutorial
The obvious alternative is not another WeChat clone but a small Flutter chat built from scratch on a general-purpose backend such as Firebase or your own WebSocket service. The difference in approach is where the work sits. A from-scratch chat gives you a protocol and data model you control, but you write the session list, the contact index, the media pipeline and the group screens yourself. wechat_flutter hands you those screens and delegates messaging to tencent_cloud_chat_sdk, which means the account system, message routing and group semantics are Tencent's, and your integration work is configuration rather than protocol design.
That trade is the whole decision. If your product's differentiation is the chat experience itself, owning the transport is worth the extra work. If your differentiation is elsewhere and chat is table stakes, borrowing a proven SDK and a ready UI is faster, at the cost of a vendor dependency. The repository's own layout supports this reading: lib/ holds screens and state, and the messaging table has exactly one entry.
For the narrower question of media picking, wechat_assets_picker in this project's table is a separate package that can be used independently, and it is the piece most often borrowed from projects like this one.
Licence and the cost of staying on this codebase
The README states the project is licensed under the Apache License 2.0 and quotes the usual summary: copyright and licence notices must be preserved, contributors grant patent rights, and modified or larger works may be distributed under different terms, including without source. That is permissive enough for commercial use, but it covers this repository only. tencent_cloud_chat_sdk and the other packages in the dependency table carry their own licences and their own terms of service, and the README does not summarise them. Check each one before shipping; this is a description of what the files say, not legal advice.
Upgrade cost is the other recurring expense. The project tracks Flutter releases closely enough that the log records adaptations for 3.0.5, 3.24.3 and the HarmonyOS build, but each adaptation is a manual event, and the README's own troubleshooting section exists because plugin versions go stale. Budget for a Flutter upgrade pass whenever you move SDK versions, and keep pubspec.yaml under your own control rather than relying on the any-version workaround.
Editorial conclusion
Adopt wechat_flutter if you need working Flutter screens for chat, contacts, groups and media and you are willing to host the IM service yourself through tencent_cloud_chat_sdk. Do not adopt it if you need an end-to-end product: video messages, location messages, scan and remark editing are unchecked in the feature list, and the README points at issues_list.md rather than a release channel. Before writing any code, clone the repository, run flutter packages get, and confirm that your local Flutter matches the 3.27.5-ohos-1.0.4 or 3.24.3 versions the README names, because plugin version drift is the failure mode the project itself documents first.
Frequently asked questions
Can I build a chat app in Flutter with wechat_flutter?
Yes, that is its purpose. The README describes it as a Flutter version of WeChat implementing basic instant messaging, with text, emoji, image and voice messages, contacts and group chat already checked in the feature list. The messaging layer comes from tencent_cloud_chat_sdk, so you also need to provision that service.
Does wechat_flutter run on iOS as well as Android?
The README says it supports Android and iOS, and gives an iOS-specific setup path: enter the ios directory, run pod install (pod update is described as optional), then run the project. It also states that HarmonyOS Next 6.0 compatibility was added on 2026.03.07 using pubspec.yaml.harmony.
Why does wechat_flutter fail to compile its dependencies?
The README anticipates this. It suggests removing the "^" from entries under dependencies in pubspec.yaml or setting plugin versions to any and rebuilding, and if errors persist, running flutter clean in the project root and running again. It also advises checking each plugin's stated Flutter version against your local Flutter.
Is wechat_flutter a complete WeChat replacement?
No. The feature list leaves video messages, location messages, scan and remark settings unchecked, and the README does not document a backend, rollback or a release channel. It is a client-side reference implementation built on a third-party IM SDK.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/fluttercandies-wechat-flutter)