# Expo: “Native module cannot be null” or “Cannot find native module”

> An Expo app fails with Native module cannot be null or Cannot find native module. The library needs native code that Expo Go lacks. Use a development build.

Canonical: https://app369.com/fix/expo-native-module-cannot-be-null/
Last updated: 2026-11-07

The app opens in Expo Go and crashes with Invariant Violation: Native module cannot be null, or Error: Cannot find native module followed by a name. A library you added includes native iOS or Android code, and Expo Go only contains the native code it shipped with. No amount of reinstalling fixes that. Here is why, in Expo’s words, and the fix, or hand it over at a fixed price.

**Short answer**

If the library isn’t part of Expo Go, run the app in a development build instead: install expo-dev-client, build once with EAS or locally, then start the server as usual. If the missing module is an Expo package such as ExpoCamera and you use a development build, rebuild it: the package was probably added after the build. Then run npx expo install --fix to catch versions that don’t match your SDK.

## **Why Expo Go can’t load it, and the fix**

1. 01 ### **The library has native code that isn’t in Expo Go**
  > “There is no way to get the native code into the Expo Go app unless it was already included in the bundle that was uploaded to the app stores.” [**Expo, Development builds FAQ**](https://docs.expo.dev/develop/development-builds/faq/) Libraries such as react-native-firebase, payment SDKs and some Bluetooth or video packages ship native code. Your JavaScript loads in Expo Go, calls that native code, and finds nothing, so it fails with one of these errors.
2. 02 ### **Use a development build**
  > “A development build is essentially your own version of Expo Go where you are free to use any native libraries and change any native configuration.” [**Expo, Introduction to development builds**](https://docs.expo.dev/develop/development-builds/introduction/) A development build is your app’s own native shell with the dev tools built in. Build it once with EAS or on your own Mac, install it, and keep using npx expo start for JavaScript changes. For EAS, run eas build:configure first if the project has no eas.json, and check the development profile sets developmentClient to true. A first iOS build asks for your Apple account and test devices.```
npx expo install expo-dev-client

# route A: build in the cloud with EAS
eas build --profile development --platform ios

# route B: build on your Mac instead
npx expo run:ios

# then, with either build installed
npx expo start
```
3. 03 ### **An Expo package version that doesn’t match your SDK**
  > “Automatically update any invalid package versions.” [**Expo, Expo CLI**](https://docs.expo.dev/more/expo-cli/) Cannot find native module 'ExpoCamera' or a similar Expo name, can also mean its version was installed with npm install instead of npx expo install and doesn’t match your SDK. If a rebuild didn’t help, check and fix all of them at once:```
npx expo install --check
npx expo install --fix
```
4. 04 ### **Already on a development build? Rebuild it** The installed build only contains the native code it was built with. After adding or upgrading a library with native code, or changing the app config, build again. JavaScript-only changes don’t need a rebuild.

Checked against the vendor’s docs on November 7, 2026: [Expo docs: Development builds FAQ (what you can’t do in Expo Go)](https://docs.expo.dev/develop/development-builds/faq/); [Expo docs: Introduction to development builds](https://docs.expo.dev/develop/development-builds/introduction/); [Expo docs: Expo CLI (install --check and --fix)](https://docs.expo.dev/more/expo-cli/).

## **Rather hand it over?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.****No issues worth fixing, no charge.**** If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

Related: [**Expo Go project incompatible**](https://app369.com/fix/expo-go-project-incompatible/) · [**Expo “Unable to resolve module”**](https://app369.com/fix/expo-unable-to-resolve-module/) · [**Expo EAS build failed**](https://app369.com/fix/expo-eas-build-failed/) · [**React Native text strings must be rendered within <Text>**](https://app369.com/fix/react-native-text-strings-must-be-rendered-within-text/)

Questions

## **More on this error**

<details>

<summary>**Do I need a Mac for a development build? **+</summary>

Not for EAS: it builds iOS and Android in the cloud. Building iOS locally with npx expo run:ios needs a Mac with Xcode.

</details>

<details>

<summary>**Can I keep using Expo Go for everything else? **+</summary>

Only while every native library you use is included in Expo Go. Once one isn’t, the app needs a development build for that feature to run at all.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

</details>

A different error?

## **Describe it and get a written quote**

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)