# Introduction — Bundle Drop Docs

> How Bundle Drop delivers compatible OTA updates to Expo and React Native apps with binary patches, full-bundle fallback, channels, rollouts, and rollback.

Canonical: https://bundledrop.app/docs/introduction

Bundle Drop lets you ship over-the-air updates for your React Native app without sending a new App Store or Play Store release for every JavaScript or asset change.

## What Bundle Drop Is For

- Shipping fixes and improvements faster.
- Rolling updates out by channel or audience.
- Staging updates before they are applied.
- Keeping native app releases separate from JS and asset updates.
- Delivering updates efficiently with binary patches, with an automatic full-bundle fallback so a device always gets a complete, verified update.

## How It Works

At a high level, the flow looks like this:

1. You install the Bundle Drop module in your React Native app.
2. You connect the app to your Bundle Drop project with `bundle.drop.config.js`.
3. You upload OTA bundles to a channel, such as `develop`, `beta`, or `production`.
4. The app checks for a compatible update at runtime.
5. Your [update policy](/docs/update-policies) controls download and activation: automatically on the next launch, immediately, or through your own manual UI. Bundle Drop uses a small binary patch when it is useful and safe, with the full bundle available as a fallback.

## Important Constraint

Bundle Drop updates JavaScript and bundled assets. Native code changes still require a normal store release.

If you make a native change, you should ship a new app binary and keep your OTA updates compatible with that native build.

## Core Pieces

- `Installation`: package install and project-aware setup for Expo or bare React Native.
- `Expo`: config plugin, managed/CNG builds, development behavior, and runtime authority.
- `Channels`: how release tracks like `develop`, `beta`, and `production` work.
- `SDK Integration`: startup control with `BundleDrop.init`, manual UI with `useBundleDrop`, and lower-level runtime APIs.
- `Update Policies`: when updates should download and apply in automated flows.
- `CLI`: local auth, project setup, upload commands, and CI usage.
- `Runtime Version`: the compatibility boundary between your native build and OTA bundles.
- `Staged Rollouts`: release gradually instead of pushing a new bundle to everyone at once.
- `Rollback`: move users back to the previous working bundle when a release needs to be reverted.

## Typical Workflow

- Install the SDK and complete setup.
- Upload a bundle with the CLI.
- Point your app at the right channel.
- Let the app check, stage, and apply updates based on your chosen policy.

If you are setting this up for the first time, start with the Installation page.
