# FAQ (https://hotcodepush.com/docs/faq)

Short answers about HotCodePush, from supported frameworks and store rules to privacy, pricing and migration, each pointing to the page that owns the details.

Short answers, one verdict each, with a link to the page that owns the detail.

## Getting started [#getting-started]

### Which frameworks does HotCodePush support? [#which-frameworks-does-hotcodepush-support]

React Native, Expo, Capacitor and Cordova, each through its own SDK. [Supported versions](https://hotcodepush.com/docs/supported-versions#supported-frameworks) has the versions and the platform floors.

### Does HotCodePush support Flutter? [#does-hotcodepush-support-flutter]

No. The four SDKs are for React Native, Expo, Capacitor and Cordova. Flutter and native-only apps have none. The [SDKs](https://hotcodepush.com/docs/sdks) hub lists the four.

### Do I need a native release to start? [#do-i-need-a-native-release-to-start]

Yes, once: the SDK and your app's ids ship inside a store build, and from then on JavaScript and assets travel as over-the-air (OTA) updates. A native change still needs a store release, and the [fingerprint](https://hotcodepush.com/docs/concepts/compatibility) keeps an update away from a build it was not made for.

### Does the React Native SDK support the New Architecture? [#does-the-react-native-sdk-support-the-new-architecture]

Yes, the SDK is New Architecture only, which is why it supports React Native 0.82 and newer. The [React Native SDK](https://hotcodepush.com/docs/sdks/react-native) states it.

### Does HotCodePush work with Expo Go? [#does-hotcodepush-work-with-expo-go]

No. Expo Go ships a fixed set of native modules, so you need a development build or a release build. The [Expo SDK](https://hotcodepush.com/docs/sdks/expo) covers the install.

### Can I use OTA updates in Expo without EAS? [#can-i-use-ota-updates-in-expo-without-eas]

Yes. The [Expo SDK](https://hotcodepush.com/docs/sdks/expo) replaces `expo-updates` and runs in a build of your own, a development build or a release build, EAS or not. [Installation](https://hotcodepush.com/docs/sdks/expo/installation#3-add-the-config-plugin-and-prebuild) adds the config plugin and removes `expo-updates`, since the prebuild refuses the pair.

## Updates and delivery [#updates-and-delivery]

### What can I update over the air? [#what-can-i-update-over-the-air]

JavaScript, markup, styles and assets, without a store review. Native code, plugins and configuration ride the next store release. [Compatibility](https://hotcodepush.com/docs/concepts/compatibility) explains how a release never reaches a binary it would break.

### How fast do users get an update? [#how-fast-do-users-get-an-update]

About a minute from publish, taken on the device's next check. The [apply strategy](https://hotcodepush.com/docs/guides/apply-strategies) decides when it applies, the next start by default. [How an update reaches a device](https://hotcodepush.com/docs/concepts/update-delivery) is the whole path.

### What happens if an update breaks the app? [#what-happens-if-an-update-breaks-the-app]

The device rolls back to the last bundle that worked on its own. By default a release pauses itself when its failures cross the threshold on [Rollouts and auto-pause](https://hotcodepush.com/docs/concepts/rollouts#auto-pause), and [Roll back a release](https://hotcodepush.com/docs/guides/rollbacks) covers everything else.

### Can I test an update before everyone gets it? [#can-i-test-an-update-before-everyone-gets-it]

Yes: a [preview channel](https://hotcodepush.com/docs/guides/preview-channels) gives each pull request its own expiring channel, and a [staged rollout](https://hotcodepush.com/docs/guides/staged-rollouts) releases to a share of devices first.

### Can I make an update mandatory? [#can-i-make-an-update-mandatory]

Yes, a release marked mandatory applies as soon as it is downloaded. [Choose an apply strategy](https://hotcodepush.com/docs/guides/apply-strategies) says when to use it.

### Can I target an update at some users or tenants? [#can-i-target-an-update-at-some-users-or-tenants]

Yes: your app sets attributes such as `userId`, `tenant` or `plan`, and a release's conditions pick the devices that match. [Target devices with attributes](https://hotcodepush.com/docs/guides/targeting) covers conditions, and [Set up environments and tenants](https://hotcodepush.com/docs/guides/environments) covers one channel per tenant.

### Are updates smaller than the full bundle? [#are-updates-smaller-than-the-full-bundle]

Yes, a device downloads a delta with the changed files. On React Native and Expo the main JavaScript bundle travels as a byte-level patch. [Bundles and releases](https://hotcodepush.com/docs/concepts/bundles-and-releases#deltas-and-patches) describes the packs.

### Can I keep downloads off mobile data? [#can-i-keep-downloads-off-mobile-data]

Yes, an SDK option restricts automatic downloads to Wi-Fi. It is on each SDK's configuration page, such as the [Capacitor configuration](https://hotcodepush.com/docs/sdks/capacitor/configuration).

### What happens to updates when HotCodePush is down? [#what-happens-to-updates-when-hotcodepush-is-down]

Nothing on the device: a check reads a small published file and needs no server to decide. Installed apps keep running and keep updating while HotCodePush is down. [How an update reaches a device](https://hotcodepush.com/docs/concepts/update-delivery#the-fail-open-guarantee) has the guarantee.

## Stores and compliance [#stores-and-compliance]

### Is this allowed by Apple and Google? [#is-this-allowed-by-apple-and-google]

Yes, both stores permit OTA JavaScript and asset updates in clauses written for that purpose. [Store policies](https://hotcodepush.com/docs/store-policies) quotes [Apple's](https://hotcodepush.com/docs/store-policies#what-apple-says) and [Google's](https://hotcodepush.com/docs/store-policies#what-google-says) texts verbatim.

### Does every update need App Review? [#does-every-update-need-app-review]

No clause in either policy requires a per-update review. What needs review is a change that leaves your reviewed purpose or turns on functionality review never saw. The [myths](https://hotcodepush.com/docs/store-policies#myths) on Store policies take the common claims one by one.

### Do I have to update my App Store screenshots after an OTA update? [#do-i-have-to-update-my-app-store-screenshots-after-an-ota-update]

Only if the release changes the app enough that the live screenshots misrepresent it. Bug fixes, copy and styling never raise the question. [The App Store screenshot question](https://hotcodepush.com/docs/store-policies#the-app-store-screenshot-question) has the mechanics.

### Do I need an App Tracking Transparency prompt? [#do-i-need-an-app-tracking-transparency-prompt]

No, the SDK reads no advertising identifier and nothing it sends is used for tracking. [The device id and attributes](https://hotcodepush.com/docs/privacy#the-device-id-and-attributes) gives the reasoning.

### What do I put in Apple's privacy label and Google's data safety form? [#what-do-i-put-in-apples-privacy-label-and-googles-data-safety-form]

The [Apple App Privacy answers](https://hotcodepush.com/docs/privacy#apple-app-privacy-answers) and the [Google Play Data safety answers](https://hotcodepush.com/docs/privacy#google-play-data-safety-answers) are ready to paste. The one row that depends on your own attributes is marked.

## Privacy and security [#privacy-and-security]

### What data does the SDK send? [#what-data-does-the-sdk-send]

An anonymous per-install id, the versions the install runs, the attributes your app sets and the outcome of each update, and nothing else. [What the SDK sends](https://hotcodepush.com/docs/privacy#what-the-sdk-sends) is the field list.

### Where is my data stored? [#where-is-my-data-stored]

In the EU, as [Where the data is stored](https://hotcodepush.com/docs/privacy#where-the-data-is-stored) details.

### Can I self-host HotCodePush? [#can-i-self-host-hotcodepush]

No. HotCodePush runs as a hosted service only. The SDKs and the CLI are MIT-licensed and run in your app and your pipeline. Everything a device reports is stored in the EU, as [Where the data is stored](https://hotcodepush.com/docs/privacy#where-the-data-is-stored) details.

### Can anyone download my bundles? [#can-anyone-download-my-bundles]

Anyone holding your app id and a channel id, both of which ship inside your binary, can fetch that channel's index and bundles. [What the public index says](https://hotcodepush.com/docs/privacy#what-the-public-index-says) lists what is readable, and [Sign your bundles](https://hotcodepush.com/docs/guides/code-signing) makes sure a device applies only what you signed.

### How do I delete a user's data? [#how-do-i-delete-a-users-data]

Delete the device from the console, with `hotcodepush device delete` or through the API. [Erasure requests](https://hotcodepush.com/docs/privacy#erasure-requests) says what the deletion removes.

## Pricing and billing [#pricing-and-billing]

### What does HotCodePush cost? [#what-does-hotcodepush-cost]

Free up to the Free plan's monthly active devices, then a price per MAU up to a spending cap you set. [Billing and MAU](https://hotcodepush.com/docs/billing#plans) lists the plans with their prices, and the calculator on the [pricing page](https://hotcodepush.com/pricing) turns a MAU number into a price.

### What is a monthly active device? [#what-is-a-monthly-active-device]

One device that checked for an update of one of your apps at least once in a UTC calendar month. It is counted per app, debug builds included. [Monthly active devices](https://hotcodepush.com/docs/billing#monthly-active-devices) has the edges.

### Can my bill surprise me? [#can-my-bill-surprise-me]

No, you are never charged past the spending cap. Devices beyond it keep running their current update until the month turns or you raise the cap. [The spending cap](https://hotcodepush.com/docs/billing#the-spending-cap) has the rules.

### Is the free plan a trial? [#is-the-free-plan-a-trial]

No, it has no time limit, needs no credit card and keeps every safety feature: code signing, auto-pause and staged rollouts. Its one ceiling is the MAU figure [Billing and MAU](https://hotcodepush.com/docs/billing#plans) shows.

### Can I get a refund? [#can-i-get-a-refund]

Yes for a first charge within 14 days, and once for a charge caused by a cap you raised yourself. Anything else is decided by a person. [Refunds](https://hotcodepush.com/docs/billing#refunds) says how to ask, and the money goes back to your payment method.

## Migration and leaving [#migration-and-leaving]

### How does HotCodePush compare with other services? [#how-does-hotcodepush-compare-with-other-services]

One page per service on the website: [Alternatives](https://hotcodepush.com/alternatives) compares HotCodePush with CodePush, EAS Update, Capgo, Ionic Appflow and others on what differs.

### Can I migrate from CodePush? [#can-i-migrate-from-codepush]

Yes, by swapping the CodePush client for the React Native SDK at your app's next native release. You keep delta updates. [Migrate from CodePush](https://hotcodepush.com/docs/migrate/codepush) is the guide.

### Can I migrate from Ionic Appflow? [#can-i-migrate-from-ionic-appflow]

Yes, [Migrate from Ionic Appflow](https://hotcodepush.com/docs/migrate/ionic-appflow) covers Appflow's Live Updates, and for native builds and store publishing beside HotCodePush there is [Capawesome Cloud](https://hotcodepush.com/docs/ci/capawesome-cloud).

### Am I locked in? [#am-i-locked-in]

No: the SDKs and the CLI are MIT-licensed, and the wire format only ever adds fields. Every listing in the [API](https://hotcodepush.com/docs/api) and the CSV downloads on the [audit log](https://hotcodepush.com/docs/audit-log#the-csv-download) and usage pages are your export.
