> ## Documentation Index
> Fetch the complete documentation index at: https://bunny.net/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Choose the right way to integrate Bunny Stream video playback, uploads, and video management to your Android, iOS, React Native, or Expo mobile app.

Bunny Stream offers official SDKs for native Android and iOS, a React Native SDK that wraps both, and a guide for playing Bunny Stream videos with `expo-video`. All of them play your videos through the device's native video stack rather than a WebView, so your app can use platform features such as Picture-in-Picture, background audio, and lock screen controls.

> **[Android SDK](/docs/stream/android-sdk)**
>
> Kotlin library for playback, resumable uploads, camera capture, and the full Stream API.

> **[iOS SDK](/docs/stream/ios-sdk)**
>
> Swift package for playback, resumable uploads, camera capture, and the full Stream API.

> **[React Native SDK](/docs/stream/react-native-sdk)**
>
> One TypeScript API over the native Android and iOS SDKs, for React Native and Expo development builds.

> **[Expo Video guide](/docs/stream/expo-video)**
>
> Play Bunny Stream HLS URLs with `expo-video` when you only need native playback.

## Which option should I use?

| If you are building… | Use |
| - | - |
| A native mobile Android app in Kotlin | [Android SDK](/docs/stream/android-sdk) |
| A native mobile iOS app in Swift | [iOS SDK](/docs/stream/ios-sdk) |
| A React Native mobile app, or an Expo app that needs uploads, camera capture, or video management | [React Native SDK](/docs/stream/react-native-sdk) |
| An Expo app that only needs to play videos | [Expo Video guide](/docs/stream/expo-video) |

> [!TIP]
>
> If your app only embeds a few videos and doesn't need native features like Picture-in-Picture or background playback, the [Bunny Player](/docs/stream/embedding) in a WebView is the quickest option and includes analytics, chapters, and dashboard branding out of the box.

## Feature comparison

| | Android SDK | iOS SDK | React Native SDK | Expo Video |
| - | - | - | - | - |
| **Language** | Kotlin | Swift | TypeScript | TypeScript |
| **Distribution** | [Bunny.net GitHub](https://github.com/BunnyWay/bunny-stream-android) | [Bunny.net GitHub](https://github.com/BunnyWay/bunny-stream-ios) | [Bunny.net GitHub](https://github.com/BunnyWay/bunny-stream-react-native) | [`expo-video`](https://docs.expo.dev/versions/latest/sdk/video/) (Expo package) |
| **Native video playback** | Yes | Yes | Yes | Yes |
| **Resumable TUS uploads** | Yes | Yes | Yes | No |
| **Camera recording and upload** | Yes | Yes | Yes | No |
| **Video and collection management** | Full Stream API | Full Stream API | Full Stream API but some operations are platform-specific ([see guide](https://github.com/BunnyWay/bunny-stream-react-native/blob/main/docs/guides/manage-videos.md)) | Through your backend via the [Stream API](/docs/api-reference/stream/index) |
| **Embed view token authentication** | Yes | Yes | Yes | Yes |
| **DRM** | [Basic and Enterprise DRM](https://bunny.net/docs/stream/drm) | [Basic and Enterprise DRM](https://bunny.net/docs/stream/drm) | [Basic and Enterprise DRM](https://bunny.net/docs/stream/drm) | [Basic and Enterprise DRM](https://bunny.net/docs/stream/drm) |

### How the options relate

The **React Native SDK** is a wrapper around the native Android and iOS SDKs. React components render the native player and camera views, so you get the same native behavior with a single TypeScript interface. It also adds an Expo config plugin and platform features such as AirPlay on iOS, Chromecast on Android, and optional Android TV support. It does not support web.

The **Expo Video guide** is not a Bunny SDK. It shows how to point the open source `expo-video` player at Bunny Stream's predictable HLS URLs and use the Stream API for metadata such as titles, thumbnails, chapters, and captions. Choose it when playback is all you need and you want to stay within Expo's own packages.

## Securing playback

The SDKs share the same security model, so the same backend can serve every platform.

**1. Keep your API key on the server**

Your **Video Library API Key** is a secret. Store it in your backend or as an [Edge Script secret](/docs/scripting/secrets), never in your app bundle, build-time environment variables, or Expo configuration.

**2. Issue embed view tokens from your backend**

For private or restricted videos, enable [embedded view token authentication](/docs/stream/token-authentication). Your backend or an Edge Script checks that the user is allowed to watch the video, then returns a short-lived `{ token, expires }` pair. Tokens of 1–5 minutes are a good starting point.

**3. Pass the token to the player**

The app requests a token for the video and passes `token` and `expires` to the player. If CDN token authentication is enabled on the library, the native SDKs sign CDN requests automatically.

> [!WARNING]
>
> The current React Native SDK `initialize()` call requires a library API access key on the device. If library credentials must never reach the client, review the [React Native SDK](/docs/stream/react-native-sdk) credential notes before adopting it.

Each SDK page includes a ready-to-use Edge Script example that generates embed view tokens.

## Before you start

You need a Bunny Stream video library. If you don't have one yet, follow the [Stream quickstart](/docs/stream/quickstart) to create a library and upload your first video. Then pick your platform:

> **[Android SDK](/docs/stream/android-sdk)**
>
> Kotlin library for playback, resumable uploads, camera capture, and the full Stream API.

> **[iOS SDK](/docs/stream/ios-sdk)**
>
> Swift package for playback, resumable uploads, camera capture, and the full Stream API.

> **[React Native SDK](/docs/stream/react-native-sdk)**
>
> One TypeScript API over the native Android and iOS SDKs, for React Native and Expo development builds.

> **[Expo Video guide](/docs/stream/expo-video)**
>
> Play Bunny Stream HLS URLs with `expo-video` when you only need native playback.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.