🚀 OpenIM: An Open-Source Instant Messaging SDK Solution
Published: 2023-10-24 06:27:16


# 🚀 OpenIM: An Open-Source Instant Messaging SDK Solution

OpenIM consists of two main components: **OpenIMSDK** and **OpenIMServer**. Their main features are:

📦 OpenIMSDK 
- Embedded directly into applications as a library.

🖥️ OpenIMServer 
- Deployed as an independent server-side program.

> 📢 **Note**: OpenIMSDK does not integrate a UI interface, and OpenIMServer does not provide user registration and login functions, meaning it's not a complete IM product.

![Relationship Diagram](./assets/relation.png)

# 📘 Detailed about OpenIMSDK

**OpenIMSDK** is the IM SDK designed for **OpenIMServer**, made specifically for embedding into client applications. Its main features and technical characteristics are:

## 🌟 Key Features:
- 📦 Local storage
- 🔔 Listener callback
- 🛡️ API encapsulation
- 🌐 Connection management

## 📚 Main Modules:
1. 🚀 Initialization and login
2. 👤 User management
3. 👫 Friend management
4. 🤖 Group functions
5. 💬 Conversation handling

## 🔧 Technical Implementation:
- 🏗️ Written in Golang
- 🌉 Cross-platform compilation using Gomobile
- 🕸️ Web SDK implementation using wasm technology
- 🌌 C interface export via cgo
- 🌍 Covers almost all platforms and languages

| Platform/Language | SDK Resource Link | SDK Description | Sample Resource Link | Description |
|------------------|-------------------------|--------------------|--------------------------|------------|
| Golang       | [open-im-sdk-core](https://github.com/openimsdk/open-im-sdk-core) | Golang version SDK using Gomobile/wasm/cgo | - | - |
| iOS          | [open-im-sdk-ios](https://github.com/openimsdk/open-im-sdk-ios) | iOS version SDK | [open-im-ios-demo](https://github.com/openimsdk/open-im-ios-demo) | iOS sample |
| Android      | [open-im-sdk-android](https://github.com/openimsdk/open-im-sdk-android) | Android version SDK | [open-im-android-demo](https://github.com/openimsdk/open-im-android-demo) | Android sample |
| Flutter      | [open-im-sdk-flutter](https://github.com/openimsdk/open-im-sdk-flutter) | Flutter version SDK | [open-im-flutter-demo](https://github.com/openimsdk/open-im-flutter-demo) | Flutter sample |
| uni-app      | [open-im-sdk-uniapp](https://github.com/openimsdk/open-im-sdk-uniapp) | uni-app version SDK | [open-im-uniapp-demo](https://github.com/openimsdk/open-im-uniapp-demo) | uni-app sample |
| JS SDK       | [open-im-sdk-web-wasm](https://github.com/openimsdk/open-im-sdk-web-wasm) | JS SDK version | [open-im-pc-web-demo](https://github.com/openimsdk/open-im-pc-web-demo) | PC web sample |
| React Native | [open-im-sdk-reactnative](https://github.com/openimsdk/open-im-sdk-reactnative) | React Native SDK | [open-im-reactnative-demo](https://github.com/openimsdk/openim-reactnative-demo) | React Native sample |

## 🔍 Detailed about OpenIMServer

**OpenIMServer** has the following characteristics:

- 🧩 Made up of multiple modules, such as the gateway and several rpc services.
- 🌐 Microservice architecture, supports cluster mode.
- 🚀 Variety of deployment methods, like from source code, kubernetes or docker deployment.

[🔗 OpenIMServer Repository Link](https://github.com/openimsdk/open-im-server)

### 🌐 REST API

- OpenIMServer offers a REST API for business systems, aiming to provide more functionalities, like creating groups or sending push notifications via backend interfaces.

### 📞 Callback

- OpenIMServer provides callback capabilities to expand more business forms. In this context, a callback means that OpenIMServer will send a request to the business server either before or after a certain event, such as a callback before or after sending a message.