# Client-Side Overview

Parts of Stream Chat only exist in your app. A server client authenticates with your API secret and makes ordinary HTTP calls, so it has no connected user and no WebSocket. Anything built on those two things belongs in a client SDK.

Those pages used to appear in this sidebar. They now live in the client SDK documentation, so the pages here stay focused on code you can actually run on a server.

## What moved

| Page                                                            | Covers                                                                                  |
| --------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| [Initialization & Users](https://getstream.io/chat/docs/javascript/init-and-users/) | Creating a client from the API key alone, `connectUser`, token providers, disconnecting |
| [Authless Users](https://getstream.io/chat/docs/javascript/authless-users/)         | Guest and anonymous sessions, which need no server-side authentication                  |
| [Typing Indicators](https://getstream.io/chat/docs/javascript/typing-indicators/)   | `keystroke`, `stopTyping`, and the `typing.start` event                                 |
| [User Presence](https://getstream.io/chat/docs/javascript/presence-format/)         | Watching channels with `presence: true`, online state and `last_active`                 |

The [Polls API](https://getstream.io/chat/docs/javascript/polls-api/) page moved for the same reason: its examples are written for JavaScript, Kotlin, Swift, Dart and Unity. It stays in the Node sidebar, because `stream-chat` is the same package a Node server uses.

The presence fields themselves are still documented here, under [Managing Users](https://getstream.io/chat/docs/node/update-users/) and [Query Members](https://getstream.io/chat/docs/node/query-members/).

## Client SDKs

The pages above are linked to the JavaScript docs, which is where the redirects point. Each client SDK documents the same features in its own language:

- [React](https://getstream.io/chat/docs/react/)
- [React Native](https://getstream.io/chat/docs/react-native/)
- [JavaScript](https://getstream.io/chat/docs/javascript/)
- [iOS](https://getstream.io/chat/docs/ios-swift/)
- [Android](https://getstream.io/chat/docs/android/)
- [Flutter](https://getstream.io/chat/docs/flutter-dart/)
- [Unity](https://getstream.io/chat/docs/unity/)
- [Unreal](https://getstream.io/chat/docs/unreal/)

<Admonition type="note">

One thing does not move. The token your app connects with must be signed with your API secret, so it is minted here, on your server. See [Tokens & Authentication](https://getstream.io/chat/docs/node/tokens-and-authentication/).

</Admonition>


---

This page was last updated at 2026-07-30T15:20:28.308Z.

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