# Client-Side Overview

Parts of Stream Video only exist in your app. A server-side client authenticates with your API secret and makes ordinary HTTP calls, so it has no camera, no microphone and nothing on screen. Connecting a user, joining a call, publishing tracks and rendering the other participants are all client SDK work.

## What the client SDKs cover

Every client SDK carries its own version of the following, and they are not interchangeable. React and React Native expose hooks and context providers. iOS, Android and Flutter expose observable state objects. Unity and ESP32 differ again.

- Connecting a user with the token your backend signed, then creating or joining a call
- Camera, microphone and speaker selection, along with noise cancellation and video filters
- The call and participant state your UI renders, kept current by WebRTC and WebSocket events
- Screen sharing, picture in picture and keeping a call alive while the app is in the background
- Answering, rejecting and ending ringing calls, which on iOS and Android means CallKit or a device push token
- UI components and a UI cookbook, for the SDKs that ship them

## Two sides of one feature

Several features are split across the two halves. The pages in this sidebar are the backend half of each.

| Feature       | Configured here                                                                                                               | Used there                                                            |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| Call settings | [Call types](https://getstream.io/video/docs/api/call-types/builtin/) set the defaults and permissions every call of a type inherits              | The client turns features on and off within what the call type allows |
| Ringing       | The call and its members are created here, see [Ring calls](https://getstream.io/video/docs/api/ring-calls/)                                      | The device rings, shows the caller and answers or rejects             |
| Recording     | [Recording](https://getstream.io/video/docs/api/recording/introduction/) modes, layouts and storage                                               | A participant with permission starts and stops it during the call     |
| Transcription | [Transcription](https://getstream.io/video/docs/api/transcribing/calls/) settings and where transcripts are stored                                | Closed captions rendered live in the call UI                          |
| Livestreaming | [Backstage, RTMP and WHIP ingress, HLS output](https://getstream.io/video/docs/api/streaming/overview/)                                           | Broadcasting from the device, plus the player your viewers watch      |
| Moderation    | [Permissions](https://getstream.io/video/docs/api/call-types/permissions/) and [audio and video moderation](https://getstream.io/video/docs/api/moderation/overview/) | Mute controls, blocking and the permission request UI                 |

## Client SDKs

- [React](https://getstream.io/video/docs/react/)
- [React Native](https://getstream.io/video/docs/react-native/)
- [JavaScript](https://getstream.io/video/docs/javascript/)
- [iOS](https://getstream.io/video/docs/ios/)
- [Android](https://getstream.io/video/docs/android/)
- [Flutter](https://getstream.io/video/docs/flutter/)
- [Unity](https://getstream.io/video/docs/unity/)
- [ESP32](https://getstream.io/video/docs/esp32/)

Each one has a quickstart, and there are [tutorials for each call type](https://getstream.io/video/sdk/). Start with the SDK's client and authentication guide, which is where the token you generate here gets used.

<Admonition type="note">

The token your app connects with must be signed with your API secret, so it is minted here, on your server. A client SDK is initialized with the API key alone and cannot mint one. See [Users & Tokens](https://getstream.io/video/docs/api/authentication/).

</Admonition>


---

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

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