Prebuilt Expo Modules

Edit page

Learn how prebuilt Expo Modules reduce native build times on Android and iOS.


For the complete documentation index, see llms.txt. Use this file to discover all available pages.

Native build times can slow down your development workflow. Expo provides prebuilt versions of its most complex modules so your project links pre-compiled binaries instead of recompiling them from source on every build. On Android, those binaries ship as .aar files linked through Gradle; on iOS, they ship as XCFrameworks linked through CocoaPods. Both are bundled into the regular Expo npm packages, and packages that aren't yet precompiled fall back to building from source automatically — precompiled and source-built modules coexist in the same project.

Most projects don't need to do anything — prebuilt Expo Modules are enabled automatically in new and existing projects with a supported SDK version.

  • Android: Enabled by default since SDK 53.
  • iOS: enabled by default in SDK 56+. In SDK 55, enabled by default only on EAS Build — set EXPO_USE_PRECOMPILED_MODULES=1 in your shell to opt in for local builds.
Disabling on iOS

Set EXPO_USE_PRECOMPILED_MODULES to 0. For local builds, export the env var in your shell.

For EAS Build, create an EAS environment variable:

Terminal
eas env:create --name EXPO_USE_PRECOMPILED_MODULES --value 0 --visibility plaintext

The CLI will prompt you to select which environment(s) (development, preview, production) the variable applies to.

Disabling specific modules via Expo Autolinking

Configure Expo Autolinking with buildFromSource in package.json. Use ".*" to opt out of every prebuilt module, or list specific package names. The same setting is available for both android and ios:

package.json
{ "name": "your-app-name", "expo": { "autolinking": { "android": { "buildFromSource": [".*"] }, "ios": { "buildFromSource": [".*"] } } } }

This is typically only needed when you're modifying module source code yourself.