# Hot Updater Documentation > React Native OTA updates powered by your own infrastructure. ## Concepts - [How does it work?](https://hot-updater.dev/docs/concepts/how-it-works.md): Understanding the core infrastructure and update decision logic - [Plugin System](https://hot-updater.dev/docs/concepts/plugin-system.md): Hot Updater uses a flexible plugin system that lets you customize how bundles are built, stored, and managed to fit your infrastructure. - [Automatic Rollback](https://hot-updater.dev/docs/concepts/automatic-rollback.md): Hot Updater verifies newly installed bundles on first launch and automatically recovers to a working bundle if startup fails. ## Get Started - [Introduction](https://hot-updater.dev/docs/get-started/introduction.md): Self-hostable OTA update solution for React Native apps, alternative to CodePush. - [Basic Usage](https://hot-updater.dev/docs/get-started/basic-usage.md): This guide walks you through the essential steps to integrate hot-updater into your React Native project. ## Guides - [Deploy](https://hot-updater.dev/docs/guides/deploy.md): Deploy an update to one platform or both platforms sequentially. - [Custom Update](https://hot-updater.dev/docs/guides/custom-update.md): Build a custom Hot Updater client flow with init, checkForUpdate, updateBundle, and reload. - [Bundle Diffing](https://hot-updater.dev/docs/guides/bundle-diffing.md): Ship smaller OTA updates by reusing unchanged bundle files. - [Rollout & Cohorts](https://hot-updater.dev/docs/guides/rollout-cohorts.md): Gradually roll out bundles from 1% to 100%, inspect the active cohort on device, and target specific cohorts from the console. - [Console (Rollback & Force Update)](https://hot-updater.dev/docs/guides/console.md): Opens a localhost server based on plugins configured in `hot-updater.config.ts`. For security reasons, only localhost server is supported at the moment. - [Storage Cleanup](https://hot-updater.dev/docs/guides/storage-cleanup.md): Safely reclaim unreferenced bundle artifacts and shared assets with the storage prune command. - [AI Agent Guide](https://hot-updater.dev/docs/guides/ai-agents.md): Use the Hot Updater skill with AI coding agents and ask for OTA operations in natural language. - [Simulate Test](https://hot-updater.dev/docs/guides/simulator-test.md): Since hot-updater does not work in dev environment, you need to test it in Release mode as shown below. - [Default Channel Setup](https://hot-updater.dev/docs/guides/channel-management.md): Set the default release channel embedded in your native app and deploy updates to that channel. - [Runtime Channel Switch](https://hot-updater.dev/docs/guides/runtime-channel-switch.md): Temporarily move a device to another channel at runtime, then return to the default channel when needed. - [Compression Strategy](https://hot-updater.dev/docs/guides/compression.md): Choose a compression format for your bundle distribution. - [Doctor](https://hot-updater.dev/docs/guides/doctor.md): Check Hot Updater package versions, native setup, and server infrastructure. - [Bundle Signing](https://hot-updater.dev/docs/guides/bundle-signing.md): Sign OTA bundles to verify integrity and prevent tampering - [Native Build (alpha)](https://hot-updater.dev/docs/guides/native-build.md): Compile and run Android and iOS builds from the CLI. - [App Version Update Strategy](https://hot-updater.dev/docs/guides/update-strategies/app-version.md): Manually target specific app versions for OTA updates instead of using automatic compatibility checks. - [Fingerprint Update Strategy](https://hot-updater.dev/docs/guides/update-strategies/fingerprint.md): Automatically prevent incompatible OTA updates by tracking native code changes with Expo's fingerprint library. ## React Native API - [wrap](https://hot-updater.dev/docs/react-native-api/wrap.md): `HotUpdater.wrap` checks for updates at the entry point, and if there is a bundle to update, it downloads the bundle and applies the update strategy. - [init](https://hot-updater.dev/docs/react-native-api/init.md): `HotUpdater.init` initializes HotUpdater for manual update flows without wrapping a React component. - [checkForUpdate](https://hot-updater.dev/docs/react-native-api/checkForUpdate.md): The `checkForUpdate` function checks if there is an available update for the app by comparing the current app version and platform with the update server's bundle information. - [reload](https://hot-updater.dev/docs/react-native-api/reload.md): Apply a downloaded bundle immediately. - [setReloadBehavior](https://hot-updater.dev/docs/react-native-api/setReloadBehavior.md): Control how HotUpdater.reload() is executed. - [getChannel](https://hot-updater.dev/docs/react-native-api/getChannel.md): The `HotUpdater.getChannel()` function returns the app's current effective channel. - [getDefaultChannel](https://hot-updater.dev/docs/react-native-api/getDefaultChannel.md): The `HotUpdater.getDefaultChannel()` function returns the build-time default channel embedded in the app. - [getCohort](https://hot-updater.dev/docs/react-native-api/getCohort.md): The `HotUpdater.getCohort()` function returns the persisted cohort used for rollout decisions. - [setCohort](https://hot-updater.dev/docs/react-native-api/setCohort.md): The `HotUpdater.setCohort()` function overrides the persisted cohort used for rollout decisions. - [isChannelSwitched](https://hot-updater.dev/docs/react-native-api/isChannelSwitched.md): The `HotUpdater.isChannelSwitched()` function returns whether a runtime channel switch is currently active. - [resetChannel](https://hot-updater.dev/docs/react-native-api/resetChannel.md): The `HotUpdater.resetChannel()` function clears the runtime channel switch and restores the original bundle. - [getAppVersion](https://hot-updater.dev/docs/react-native-api/getAppVersion.md): The `HotUpdater.getAppVersion()` function returns the current native app version embedded at build time. - [useHotUpdaterStore](https://hot-updater.dev/docs/react-native-api/useHotUpdaterStore.md): Read update progress from React components. - [addListener](https://hot-updater.dev/docs/react-native-api/addListener.md): Subscribe to Hot Updater events. - [isUpdateDownloaded](https://hot-updater.dev/docs/react-native-api/isUpdateDownloaded.md): Returns whether an update bundle has finished downloading in the current app session and is ready to be applied on reload. - [getCrashHistory](https://hot-updater.dev/docs/react-native-api/getCrashHistory.md): Returns a list of bundle IDs that previously caused crashes. - [clearCrashHistory](https://hot-updater.dev/docs/react-native-api/clearCrashHistory.md): Clears the crash history to allow retrying previously failed bundles. - [updateBundle](https://hot-updater.dev/docs/react-native-api/updateBundle.md): The `updateBundle` function downloads and applies a new update bundle to your React Native application. It uses the provided bundle information obtained from `checkForUpdate`. ## Self Hosting (Managed) - [Supabase Provider](https://hot-updater.dev/docs/managed/supabase.md): This guide walks you through setting up `hot-updater` with Supabase in a React Native project. You'll configure the environment, install required packages, and initialize Supabase for seamless updates. - [Cloudflare Provider](https://hot-updater.dev/docs/managed/cloudflare.md): This guide walks you through setting up `hot-updater` with Cloudflare in a React Native project. You'll configure the environment, install required packages, and initialize Cloudflare for seamless updates. - [AWS S3 Storage + Lambda@Edge Function](https://hot-updater.dev/docs/managed/aws.md): This guide walks you through setting up `hot-updater` with AWS S3 Storage and Lambda@Edge Function in a React Native project. You'll configure the environment, install required packages, and initialize AWS for seamless updates. - [Firebase Provider](https://hot-updater.dev/docs/managed/firebase.md): This guide walks you through setting up `hot-updater` with Firebase in a React Native project. You'll configure the environment, install required packages, and initialize Firebase for seamless updates. ## Self Hosting (Custom) - [Overview](https://hot-updater.dev/docs/custom/overview.md): Build a custom backend server for Hot Updater database with any framework and ORM. - [Quick Start](https://hot-updater.dev/docs/custom/quick-start.md): Get started with a self-hosted Hot Updater server in 5 minutes. - [CLI Configuration](https://hot-updater.dev/docs/custom/cli-configuration.md): Configure your Hot Updater CLI to connect to your self-hosted server. - [Drizzle](https://hot-updater.dev/docs/custom/database/drizzle.md): Build a self-hosted Hot Updater server with Drizzle ORM. - [Kysely](https://hot-updater.dev/docs/custom/database/kysely.md): Build a self-hosted Hot Updater server with Kysely query builder. - [MongoDB](https://hot-updater.dev/docs/custom/database/mongodb.md): Build a self-hosted Hot Updater server with MongoDB. - [Prisma](https://hot-updater.dev/docs/custom/database/prisma.md): Build a self-hosted Hot Updater server with Prisma ORM. - [S3](https://hot-updater.dev/docs/custom/database/s3.md): Build a self-hosted Hot Updater server with S3-compatible object storage. - [SQL Export](https://hot-updater.dev/docs/custom/database/sql-export.md): Export Hot Updater table schemas as plain SQL. - [Elysia](https://hot-updater.dev/docs/custom/frameworks/elysia.md): Build a self-hosted Hot Updater server with Elysia framework. - [Express](https://hot-updater.dev/docs/custom/frameworks/express.md): Build a self-hosted Hot Updater server with Express framework. - [Hono](https://hot-updater.dev/docs/custom/frameworks/hono.md): Build a self-hosted Hot Updater server with Hono framework. - [Docker](https://hot-updater.dev/docs/custom/hosting/docker.md): Deploy Hot Updater server using Docker containers. - [Vercel](https://hot-updater.dev/docs/custom/hosting/vercel.md): Deploy Hot Updater server to Vercel with serverless functions. ## Build Plugins - [Bare (CLI) Plugin](https://hot-updater.dev/docs/build-plugins/bare.md): Build plugin for React Native CLI projects (non-Expo). Bundles your React Native app using the Metro bundler. - [Expo Plugin](https://hot-updater.dev/docs/build-plugins/expo.md): Build plugin for Expo projects. Bundles your Expo app using Expo's native export command. - [Rock Plugin](https://hot-updater.dev/docs/build-plugins/rock.md): Build plugin for projects using [Rock](https://www.rockjs.dev/) framework, a React Native framework created by Callstack. ## Storage Plugins - [Supabase Storage](https://hot-updater.dev/docs/storage-plugins/supabase.md): Store your Hot Updater bundles in Supabase Storage buckets. - [Cloudflare R2 Storage](https://hot-updater.dev/docs/storage-plugins/cloudflare.md): Store your Hot Updater bundles in Cloudflare R2. - [Firebase Storage](https://hot-updater.dev/docs/storage-plugins/firebase.md): Store your Hot Updater bundles in Firebase Cloud Storage. - [AWS S3 Storage](https://hot-updater.dev/docs/storage-plugins/aws.md): Store your Hot Updater bundles in AWS S3 or any S3-compatible storage service (including Cloudflare R2). - [Custom Storage Plugin](https://hot-updater.dev/docs/storage-plugins/custom-storage.md): Create your own storage plugin for any storage provider ## Database Plugins - [Supabase Database](https://hot-updater.dev/docs/database-plugins/supabase.md): Store your Hot Updater bundle metadata in Supabase PostgreSQL database. - [Cloudflare D1 Database](https://hot-updater.dev/docs/database-plugins/cloudflare.md): Store your Hot Updater bundle metadata in Cloudflare D1, a serverless SQLite database running at the edge. - [Firestore Database](https://hot-updater.dev/docs/database-plugins/firestore.md): Store your Hot Updater bundle metadata in Cloud Firestore, Firebase's NoSQL document database. - [AWS S3 Database](https://hot-updater.dev/docs/database-plugins/aws.md): Store your Hot Updater bundle metadata as JSON files in S3, served via CloudFront CDN. - [Standalone Database](https://hot-updater.dev/docs/database-plugins/standalone.md): Connect your CLI to a self-hosted Hot Updater server. - [Custom Database Plugin](https://hot-updater.dev/docs/database-plugins/custom-database.md): Create your own database plugin for any database provider ## Integration Plugins - [Sentry](https://hot-updater.dev/docs/integration-plugins/sentry.md): The `withSentry()` plugin for hot-updater enables automatic sourcemap upload to Sentry during the update bundle build process. - [Datadog](https://hot-updater.dev/docs/integration-plugins/datadog.md): The `withDatadog()` plugin for hot-updater enables automatic sourcemap upload to Datadog during the update bundle build process. - [BugSnag](https://hot-updater.dev/docs/integration-plugins/bugsnag.md): The `withBugsnag()` plugin for hot-updater enables automatic sourcemap upload to BugSnag during the update bundle build process. ## Policy - [Security](https://hot-updater.dev/docs/policy/security.md): Best practices for protecting plugin tokens and sensitive data - [When to Submit Your App for Review](https://hot-updater.dev/docs/policy/app-review.md): `HotUpdater` enables seamless updates to JavaScript (JS) files and assets required by your app, bypassing the app store review process in many cases. However, certain changes, particularly those involving native code (e.g., written in Swift/Objective-C for iOS or Kotlin/Java for Android), require app store review. Below, we outline when you need to submit your app for review and when `HotUpdater` can handle updates independently.