Library / SDK
netease-kit/nim-uikit-android avatar
netease-kit/nim-uikit-android

nim-uikit-android: NetEase IM interface components for Android

云信 IM UIKit 是基于 NIM SDK(网易云信 IM SDK)开发的一款即时通讯 UI 组件库,包括聊天、会话、圈组、搜索、群管理等组件。通过 IM UIKit,可快速集成包含 UI 界面的即时通讯应用。

747 stars144 forksJavaMIT

At a glance

What is it?
nim-uikit-android is an MIT licensed Android UI component library that sits on top of the NetEase Yunxin IM SDK, with chat, conversation, contacts and team kits, a business logic layer between the views and the SDK, and an MVVM data flow that is described step by step in the readme. The judgement is that the decoupling is the real feature, since each kit can be adopted on its own, and that the naming of the layers leaves a lot of the architecture to be inferred from the diagrams.
Who is it for?
nim-uikit-android fits an Android team that has chosen the NetEase Yunxin IM SDK and wants a working chat interface in days rather than weeks, because the kits cover the conversation list, the chat screen, the contact list and the team features, and the business logic layer already handles the awkward parts of the SDK surface.
Can I use it commercially?
Yes. MIT 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?
Yes. The repository last received commits 8 days ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A UI layer that sits on top of the NetEase IM SDK

The NIM UIKit is an instant messaging interface component library built on the NIM SDK, the NetEase Yunxin IM SDK, and the readme describes it as a set of components for chat, conversations, circle or team features, search, contacts and group management. Through it you can integrate an instant messaging application that includes the user interface, rather than only the messaging logic.

The stated audience is developers and enterprise customers who need to integrate and customise instant messaging features quickly. The readme makes a point about where the responsibility sits, and it is a useful one. The UIKit helps you deliver the interface, and you can also call the corresponding NIM SDK interfaces yourself to implement the messaging business logic and data handling, which means you are expected to focus on your own business or on custom extensions.

That is a different pitch from a closed kit. It is not a sealed sample application you have to adopt wholesale, and the components are described as independently runnable, so you can take the conversation list and the chat screen and leave the rest out.

The library is MIT licensed, written in Java, and the last push to the repository was on 2026-10-15, with the newest release listed as v10.9.50 from 2026-08-25.

MVVM, with a business logic layer in the middle

The architecture is MVVM, and the readme is specific about the data flow, which is unusual and useful.

The description of the principle is that UI display and business logic development are independent of each other. The flow itself is a four step table. First, the Activity, Fragment or View in the presentation layer sends a request to the ViewModel in the response layer. Second, the ViewModel forwards the request through the business logic layer to the NIM SDK. Third, the SDK receives the request and triggers a callback, and the callback data travels back through the business logic layer and the response layer to the Activity, Fragment or View. Fourth, the view hands the callback data to a RecyclerViewAdapter.

That fourth step is where the visual variety comes from, and the readme explains it: the adapter decides the concrete UI style according to the type of the entity it is given. If the callback carries message data, the adapter looks at the message type inside it and renders the row in the style that matches that type.

So a single adapter handles text messages, images, files and whatever else the SDK can deliver, and the branching is by type rather than by separate adapters. That is a common approach in messaging interfaces and it explains why the type field appears in the data model at all.

The component architecture maps kits onto the layers

The second diagram in the readme, the component architecture, is the one that connects the names to the roles.

The UIKit layer contains ContactKit-ui, ChatKit-ui, ConversationKit-ui and TeamKit-ui, and the readme says these correspond to the Activity, Fragment and View in the data flow diagram. The UIKit layer also contains ChatKit, which corresponds to the Repository in that diagram, and the CoreKit layer corresponds to the Provider.

So the mapping is a three tier structure. The ui suffixed modules are the view layer, the ChatKit module is the repository layer, and CoreKit is the provider layer, which is the layer closest to the SDK.

That structure is what makes the decoupling claim credible. A team that only wants a contact picker takes ContactKit-ui and whatever it depends on, and a team that wants the full messaging experience takes the chat, conversation and team kits as well. The readme says you can choose the components you need, integrate them into your application quickly and reduce useless dependencies, and the module layout in the repository matches that story, with a separate directory for each kit.

The naming is the weak point. Repository, Provider and ViewModel are three different words for three positions in a chain, and the readme explains the chain in a diagram rather than in prose, so the mental model has to be assembled from the two pictures together.

Customisation happens while the component is initialised

The customisation story is described in one sentence, and it is the part to understand before you start.

The readme says the UIKit supports configuring a custom interface during the initialisation process of each UI component. So the point of extension is the setup call, where you pass in your own view or builder, rather than a theming layer applied afterwards or a set of style attributes read from a resource file.

Alongside that, the library provides the platform wrapper for the unit you add to your application: a Fragment on Android, a Controller on iOS, a Widget in Flutter, and a View. That is worth noting because it tells you the design is shared across several first party clients of the SDK, and the Android repository is one implementation of a concept that exists in more than one framework.

The other advantage listed is the business logic handling, and the framing is that you do not have to care about the complicated handling logic between the different SDK interfaces, because one interface in the business logic layer handles it for you. For a team integrating an SDK they do not own, that is the main argument, and it is the part that has to be verified against your own requirements, because the SDK's own callbacks are where the awkwardness lives and the UIKit only covers the paths it has implemented.

The repository is a Gradle project with one directory per kit

The repository layout mirrors the component story, with a Gradle project that uses the Kotlin DSL for its build files.

There is a chatkit-ui directory, a contactkit-ui directory, a conversationkit-ui directory, a teamkit-ui directory, a common-ui directory for the shared interface pieces, a localconversationkit-ui directory, a locationkit directory, an aisearchkit directory, and an app directory, which is the sample or demo application. The build is defined in build.gradle.kts at the root with a settings.gradle.kts and a gradle.properties, and the repository carries a gradlew wrapper.

The readme also links out to a set of documentation pages, and they cover different jobs. There is the feature overview and the UI component introduction for what exists, a page for trying the sample application without building it, a page for running it from source, a page for the integration flow, and a page for implementing audio and video calls, since the UIKit already supports them. There is also a badge pointing at a DeepWiki page for a source code walkthrough, which is a third party tool rather than something the project maintains.

The release numbering is in the ten series, with v10.9.22 on 2026-04-11, v10.9.27 on 2026-05-07 and v10.9.50 on 2026-08-25, which suggests a frequent patch cadence across the kit set rather than occasional large releases.

Editorial conclusion

nim-uikit-android fits an Android team that has chosen the NetEase Yunxin IM SDK and wants a working chat interface in days rather than weeks, because the kits cover the conversation list, the chat screen, the contact list and the team features, and the business logic layer already handles the awkward parts of the SDK surface. It is the wrong choice if you are on another IM provider, because everything here is written against the NIM SDK callbacks, and it is the wrong choice if you want a design system you can restyle from scratch, since customisation is offered at component initialisation rather than as a theming layer. Before you adopt it, read the component architecture diagram next to the data flow diagram, because the readme names the layers in terms of each other rather than explaining them, and check the version you pin, since the releases are numbered in the ten series and the latest listed is v10.9.50.

Frequently asked questions

What is nim-uikit-android?

It is an MIT licensed Android UI component library built on the NetEase Yunxin IM SDK, with components for chat, conversations, contacts, team features, search and group management, so that an application can integrate an instant messaging interface rather than only the messaging logic.

How does data flow through the IM UIKit?

The Activity, Fragment or View sends a request to the ViewModel, the ViewModel forwards it through the business logic layer to the NIM SDK, the SDK callback travels back through the same layers, and the view hands the data to a RecyclerViewAdapter, which picks the row style from the entity type.

Can I use only part of the UIKit?

Yes. The readme says the components are decoupled and can be used independently, so you can select the ones you need and reduce useless dependencies. The repository has a separate directory for each kit, plus a common-ui directory for the shared pieces.

How do I customise the interface?

The readme says the UIKit supports configuring a custom interface during the initialisation process of each component, and it ships the platform wrapper for adding the UI to your application, a Fragment on Android, a Controller on iOS and a Widget in Flutter.

Official sources

  1. Issues
  2. License: MIT
  3. netease-kit/nim-uikit-android on GitHub
  4. README
  5. Releases
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.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/netease-kit-nim-uikit-android.svg)](https://hysenlabs.com/projects/netease-kit-nim-uikit-android)

Was this useful?