Documentation
On this page

Troubleshooting#

Start with the exact CLI message. Rollbird errors are intended to tell you whether the fix belongs in authentication, project configuration, native compatibility, the release command, or the account plan.

npm install returns 404#

Both @rollbird/cli and @rollbird/react-native are public npm packages. If installation returns 404 or package-not-found, first confirm npm can see the CLI on the public registry:

bash
npm view @rollbird/cli version --registry=https://registry.npmjs.org

For an SDK error, check the SDK package instead:

bash
npm view @rollbird/react-native version --registry=https://registry.npmjs.org

Then retry installation against that registry:

bash
npm install --save-dev @rollbird/cli --registry=https://registry.npmjs.org

If npm view succeeds but installation still fails, inspect the app's .npmrc, the user-level ~/.npmrc, and any corporate registry proxy for an override of the @rollbird scope. Do not substitute an unrelated package with a similar name.

Not logged in#

Message:

text
Not logged in.

Run the suggested interactive flow:

bash
npx rollbird login

In CI, set ROLLBIRD_TOKEN instead. A device code that expires reports Device code expired. Run rollbird login again.; start a new login flow rather than reusing the code.

Project configuration is missing#

Message:

text
No rollbird.json found in this directory.

Run commands from the app root. If the project has not been linked yet, run:

bash
npx rollbird init

Commit rollbird.json after setup. It contains public project configuration, not the API token or private signing key.

React Native project is not detected#

Message:

text
No React Native project detected in this directory.

Confirm the current directory has the app's package.json and that react-native is a dependency. For a bare project, Rollbird also requires an ios/ or android/ directory and can report:

text
Neither an ios/ nor android/ directory was found.

For Expo CNG, keep an Expo config file at the project root so init can register or describe the config plugin.

Native app identifiers are not detected#

When Android detection fails, the CLI reports Android application id could not be detected. Supply it explicitly:

bash
npx rollbird init --android-app-id com.example.app

When iOS detection fails, it reports iOS bundle identifier could not be detected. Supply that value explicitly:

bash
npx rollbird init --ios-bundle-id com.example.app

Both identifiers may be passed in the same init invocation when needed.

Expo Updates conflicts with Rollbird#

Message:

text
expo-updates is installed. It and Rollbird both control the app's update process, so an app with both updates unpredictably or crashes.

Choose one update system. To use Rollbird, stop using EAS Update, remove expo-updates, and rerun initialization:

bash
npm uninstall expo-updates
bash
npx rollbird init

Fingerprint is missing or stale#

An Expo release can stop with a message beginning rollbird.json has no stored fingerprint. A bare release can warn that native config has no fingerprint or that native code changed since initialization.

Refresh the stored and embedded configuration:

bash
npx rollbird init

For Expo, apply the plugin afterward:

bash
npx expo prebuild

Then rebuild and redistribute the native app. Publishing another JavaScript bundle cannot retrofit a missing or old fingerprint into an installed binary.

Hermes compiler is missing#

The error starts with Hermes is enabled for <platform>, but no Hermes compiler was found in this project.

Install the app's dependencies from its lockfile and confirm the app's own React Native package includes the compiler. Rollbird deliberately does not use a globally installed compiler because Hermes bytecode must match the app's native runtime.

If the Expo app intentionally uses JavaScriptCore, set "jsEngine": "jsc" in its Expo config, rebuild, and rerun the release. Do not change engines only to bypass a missing dependency install.

Release flags are rejected#

Rollout accepts an integer from 1 through 100. Invalid input reports:

text
--rollout must be an integer between 1 and 100.

Platform accepts exactly ios or android. Other values report Invalid --platform "<value>"; expected "ios" or "android".

Use command help to inspect the exact supported flags:

bash
npx rollbird release --help

The device does not receive a release#

Check these conditions in order:

  1. The installed binary's channel matches the release channel.
  2. The release contains an artifact for the device platform.
  3. The binary and release use compatible fingerprint or app-version values.
  4. The rollout includes that device.
  5. The release is active rather than paused or disabled.
  6. The device can reach https://ota.rollbird.dev.

The CLI warns when publishing to a channel different from the channel stored in rollbird.json. That publish succeeds because another binary may use the target channel; the current binary will not switch channels dynamically.

A normal update becomes active on the next launch. Close and relaunch the app after the download finishes. A forced update reloads automatically unless the wrapper sets reloadOnForceUpdate: false.

Rollback cannot find a release#

An explicit number that is absent from the selected channel reports:

text
Release 17 not found on the preview channel.

Check the channel and recent history with:

bash
npx rollbird status

With no number, rollback targets the latest active release. If none exists, the CLI currently reports No active production release to roll back even when another channel was selected. This wording is a known CLI limitation.

Rollback itself is never blocked by quota, storage, or plan status. When no earlier OTA release remains, the app serves its embedded bundle.

CI authentication or scope fails#

Confirm the secret is named exactly ROLLBIRD_TOKEN, is available to that job, and contains the token value rather than its display name. Release jobs need release:write; status and release reads need release:read. The reference CI token has both.

A project-bound token must match the projectId in rollbird.json. Create a new correctly bound token instead of copying configuration from another app.

Use the exit code to classify the failure: 3 is authentication, 4 is a plan restriction, and 5 is network, storage, or server failure.

Current verification limits#

The documentation build, package tests, CLI help, static links, and responsive pages are verified in the Rollbird repository. Public package installation and a real end-to-end device update require the packages to be published plus a consumer app, native toolchains, signing credentials, and a device. Where a guide depends on those prerequisites, it says so instead of presenting sample output as a live device result.