A native source file can compile into an Android or iOS target without Expo discovering it or registering it as an Expo module. Expo’s expo-modules-autolinking changelog explicitly documents compile-only inline module files. That establishes the distinction—not the cause of any particular app’s failure. To diagnose a real case, check the module type, platform configuration, autolinking output, installed versions, and exact runtime error.
Why a successful build does not prove Expo registered a module
Compilation answers whether source code was included in and accepted by a native build. Expo module registration is a separate step: autolinking discovers Expo modules and uses configuration to include their native classes in generated providers. A file may therefore be present in the target while the Expo module registry does not know about it.
As an Amazon Associate I earn from qualifying purchases.
Expo’s expo-modules-autolinking changelog says under version 57.0.6, dated July 15, 2026: “Added support for compile-only inline module files, which are compiled into the target without being registered as Expo modules.” This is documented behavior for compile-only inline files. It does not establish that a given module was meant to be registered, that the behavior was accidental, or that it explains a particular app’s symptoms.
First identify what kind of native module you have
Inline Expo module
Inline module source lives in the app’s native project rather than being supplied as a separate package. Expo documents a compile-only inline-file mechanism, so do not infer registration from the presence of a compiled file alone. Confirm how the module is intended to be discovered and whether it is listed in the relevant configuration.
#1 Best Overall
Local Expo module
A local Expo module is an Expo module within the project. Its module configuration and native class declarations still matter: a local source directory being built is not, by itself, evidence that the generated Expo provider registers its class.
Package module
A package can contain native source, but the relevant question is whether Expo Autolinking discovers it as an Expo module for the platform in question. Expo’s guide describes autolinking as part of Android Gradle and iOS CocoaPods builds and says discovery requires a root expo-module.config.json with a matching platform entry.
Rank #2
Check the registration configuration and generated provider
Inspect the root expo-module.config.json and compare its platform and class entries with the module you expect to use. Expo’s configuration reference describes platform-specific modules lists: Swift module classes for the generated Apple provider and fully qualified Kotlin module classes for the generated Android provider.
- Confirm the configuration file is at the expected root for the module.
- Confirm the platform being resolved appears under
platforms. - Confirm the expected class is present in that platform’s
moduleslist, using the platform’s required class naming. - Inspect the generated provider output for that platform and verify the class appears there.
A missing platform entry or class is a concrete registration-path problem to investigate. If the generated provider already contains the class, look beyond configuration rather than assuming compilation and registration are synonymous.
Use autolinking output to narrow the failure
- From the project root, run
npx expo-modules-autolinking verify --verbose. Review the discovered modules and any duplicate warnings; compare the output with the module and platform you expect. - Run
npx expo-doctor. Expo recommends it to find duplicate packages that can create inconsistent native-module resolution. - Compare the CLI output with the generated provider. Discovery output, generated registration code, and compiled native artifacts answer different questions. A compiled artifact alone does not show that Expo’s generated provider registered the module.
Expo’s autolinking documentation is available at docs.expo.dev/modules/autolinking/; the configuration reference is at docs.expo.dev/modules/module-config/.
Check version-specific Android inline-module scanning
The 57.0.6 autolinking changelog also records a specific Android issue: Kotlin files with long comments before the package declaration could be silently skipped during registration scanning, and the entry records a fix. This is relevant only if the module uses Android inline files and the installed autolinking version is affected. Check the actual installed version before changing source or upgrading; the note does not establish that this caused another project’s failure.
Rank #4
Rule out duplicate dependency resolution in monorepos
Duplicate native dependency versions can leave Metro and the native app resolving different copies of a package. That mismatch can make JavaScript appear to import one module while the native binary contains another copy or version. Use the verification and doctor commands above to identify duplicate installations, then inspect the package-manager dependency tree and align the resolved native dependency rather than treating a warning as proof of registration.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Expo documents opt-in experiments.autolinkingModuleResolution alignment beginning with SDK 54, and says it is enabled by default for monorepo apps in SDK 55. Verify the project’s SDK and configuration before relying on that behavior; the setting’s availability or default does not prove that a particular project is aligned. See Expo’s autolinking guide.
Best Value
Separate registration failures from other runtime errors
Messages such as “Verify that a module by this name is registered in the native binary” or “Cannot find native module” are clues, not diagnoses. They do not by themselves distinguish an Expo registration problem from another native-module interface, an incorrect or stale binary, or a JavaScript import exception that prevented startup. Use the exact error and the evidence from autolinking and provider generation to determine which path applies.
For a project-specific diagnosis, the useful evidence is the Expo SDK and expo-modules-autolinking versions, platform, module source type, root expo-module.config.json, verbose verification output, generated provider contents, package-manager dependency tree, and full runtime error. Without those details, the documented compile-only behavior is a mechanism to understand—not proof of the cause of an individual incident.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




