# Chat Messaging

Stream Chat adds real-time messaging to your app: direct messages, group conversations, livestream chat and support flows. The API keeps channels, messages, threads, reactions and read state in sync across devices; the SDKs add offline storage and prebuilt UI on every major platform.

See it running in the [live demos](https://getstream.io/chat/demos/messaging/), or take the [interactive tour](https://getstream.io/chat/tour/) of the API.

## How the pieces fit together

Your app talks to the Stream API through a client SDK, with prebuilt UI components on top where you want them. A server-side SDK on your backend signs the [user tokens](https://getstream.io/docs/platform/authentication/) clients connect with and handles the tasks that need your API secret.

```mermaid
flowchart LR
  subgraph app[Your app]
    ui[UI components] --> client[Chat client SDK]
  end
  subgraph backend[Your backend]
    server[Server-side SDK]
  end
  client <--> api[Stream API]
  server --> api
  server -. user token .-> client
```

## SDKs

Chat ships in three tiers. Start with the UI components and drop down a tier where you need more control.

### UI Components

Complete chat interfaces with message lists, channel lists, threads and reactions built in.

<Cards>
  <Card size="small" logo="react" title="React" description="Components and hooks for web apps." href="https://getstream.io/chat/docs/sdk/react/" tutorial="/chat/sdk/react/tutorial/" />
  <Card size="small" logo="ios" title="iOS" description="SwiftUI and UIKit component libraries in Swift." href="https://getstream.io/chat/docs/sdk/ios/" tutorial="/chat/sdk/ios/tutorial/swiftui/" />
  <Card size="small" logo="android" title="Android" description="Jetpack Compose and XML components in Kotlin." href="https://getstream.io/chat/docs/sdk/android/" tutorial="/chat/sdk/android/tutorial/compose/" />
  <Card size="small" logo="react" title="React Native" description="Native iOS and Android chat UI from one codebase." href="https://getstream.io/chat/docs/sdk/react-native/" tutorial="/chat/sdk/react-native/tutorial/cli/" />
  <Card size="small" logo="flutter" title="Flutter" description="Chat widgets for every platform Flutter targets." href="https://getstream.io/chat/docs/sdk/flutter/" tutorial="/chat/sdk/flutter/tutorial/" />
  <Card size="small" logo="angular" title="Angular" description="Components built on the JavaScript client." href="https://getstream.io/chat/docs/sdk/angular/" tutorial="/chat/sdk/angular/tutorial/" />
</Cards>

### Client Side SDKs

Connection handling, channel state and offline support, with the interface left to you.

<Cards>
  <Card size="small" logo="react" title="React" href="https://getstream.io/chat/docs/react/" />
  <Card size="small" logo="ios" title="iOS" href="https://getstream.io/chat/docs/ios-swift/" />
  <Card size="small" logo="android" title="Android" href="https://getstream.io/chat/docs/android/" />
  <Card size="small" logo="react" title="React Native" href="https://getstream.io/chat/docs/react-native/" />
  <Card size="small" logo="flutter" title="Flutter" href="https://getstream.io/chat/docs/flutter-dart/" />
  <Card size="small" logo="javascript" title="JavaScript" href="https://getstream.io/chat/docs/javascript/" />
  <Card size="small" logo="unity" title="Unity" href="https://getstream.io/chat/docs/unity/" />
  <Card size="small" logo="unreal" title="Unreal" href="https://getstream.io/chat/docs/unreal/" />
</Cards>

### Server Side SDKs

Full API access from your backend: provision users, create channels, send messages and enforce moderation.

<Cards>
  <Card size="small" logo="node" title="Node" href="https://getstream.io/chat/docs/node/" />
  <Card size="small" logo="python" title="Python" href="https://getstream.io/chat/docs/python/" />
  <Card size="small" logo="ruby" title="Ruby" href="https://getstream.io/chat/docs/ruby/" />
  <Card size="small" logo="php" title="PHP" href="https://getstream.io/chat/docs/php/" />
  <Card size="small" logo="java" title="Java" href="https://getstream.io/chat/docs/java/" />
  <Card size="small" logo="dot-net" title=".NET" href="https://getstream.io/chat/docs/dotnet-csharp/" />
  <Card size="small" logo="go" title="Go" href="https://getstream.io/chat/docs/go-golang/" />
  <Card size="small" logo="api" title="REST" href="https://getstream.github.io/protocol/?urls.primaryName=Chat" />
</Cards>

## Build with AI

Your AI agent can work with Stream from the terminal with the [Stream CLI](https://getstream.io/cli/docs/). There's also an [Agent Skills](https://getstream.io/agent-skills/docs/) pack so it can look up docs and configure your app.

```bash
curl -fsSL https://getstream.io/cli.sh | bash
getstream skills
```

<Cards>
  <Card size="small" icon="robot-2" title="Agent Skills" href="https://getstream.io/agent-skills/docs/" />
  <Card size="small" icon="terminal-box" title="Stream CLI" href="https://getstream.io/cli/docs/" />
</Cards>

## Platform

Users, auth and the rest of the account-level machinery work the same in every Stream product, so they are documented once in the [platform docs](https://getstream.io/docs/platform/). Chat apps touch these first:

<Cards>
  <Card size="small" icon="key-2" title="Authentication and tokens" description="Create the user tokens your app connects with." href="https://getstream.io/docs/platform/authentication/" />
  <Card size="small" icon="user" title="Users" description="Create, update, query and delete the users behind every channel." href="https://getstream.io/docs/platform/users/" />
  <Card size="small" icon="shield-user" title="Permissions and roles" description="Control who can post, flag and moderate, per channel type." href="https://getstream.io/docs/platform/permissions/" />
  <Card size="small" icon="notification-3" title="Push notifications" description="Deliver messages while the app is closed." href="https://getstream.io/docs/platform/push-notifications/" />
  <Card size="small" icon="webhook" title="Webhooks" description="React to chat events from your own backend." href="https://getstream.io/docs/platform/webhooks/" />
</Cards>

## Start here

Each tutorial builds a working chat app from an empty project. Pick your platform:

<Cards>
  <Card size="small" logo="react" title="React" href="https://getstream.io/chat/sdk/react/tutorial/" />
  <Card size="small" logo="ios" title="iOS (SwiftUI)" href="https://getstream.io/chat/sdk/ios/tutorial/swiftui/" />
  <Card size="small" logo="ios" title="iOS (UIKit)" href="https://getstream.io/chat/sdk/ios/tutorial/uikit/" />
  <Card size="small" logo="android" title="Android (Compose)" href="https://getstream.io/chat/sdk/android/tutorial/compose/" />
  <Card size="small" logo="android" title="Android (Kotlin)" href="https://getstream.io/chat/sdk/android/tutorial/kotlin/" />
  <Card size="small" logo="react" title="React Native (CLI)" href="https://getstream.io/chat/sdk/react-native/tutorial/cli/" />
  <Card size="small" logo="react" title="React Native (Expo)" href="https://getstream.io/chat/sdk/react-native/tutorial/expo/" />
  <Card size="small" logo="flutter" title="Flutter" href="https://getstream.io/chat/sdk/flutter/tutorial/" />
  <Card size="small" logo="angular" title="Angular" href="https://getstream.io/chat/sdk/angular/tutorial/" />
  <Card size="small" logo="unity" title="Unity" href="https://getstream.io/chat/sdk/unity/tutorial/" />
  <Card size="small" logo="unreal" title="Unreal" href="https://getstream.io/chat/sdk/unreal/tutorial/" />
</Cards>

## FAQ

**Which SDK do I need?**

Start with a UI component SDK. Use a client SDK to build your own interface on the same state layer, and a server-side SDK for anything that touches your API secret.

**Does chat work offline?**

Yes. The client SDKs store messages locally and update the UI optimistically, then sync when the connection returns.

**Do I need my own backend?**

In production, yes: user tokens are [signed with your API secret](https://getstream.io/docs/platform/authentication/) on your server. For a prototype, [developer tokens](https://getstream.io/docs/platform/authentication/#developer-tokens) let clients connect without one.

**Does Chat include moderation?**

[Stream Moderation](https://getstream.io/moderation/docs/) plugs into Chat: AI engines screen messages and borderline cases go to a human review queue.

**Do Chat and Video share users?**

Yes. Users, tokens and roles are app-level and shared by every Stream product; the [platform docs](https://getstream.io/docs/platform/) cover them once.

**Can I read these docs as markdown?**

Append `.md` to any page URL. [/llms.txt](https://getstream.io/llms.txt) indexes every page.


---

This page was last updated at 2026-09-08T17:14:05.034Z.

For the most recent version of this documentation, visit [https://getstream.io/chat/docs/](https://getstream.io/chat/docs/).