Tracking the `TODO` in `apps/test-app/App.tsx`. The `ferric-example` test has to use `require()` — with an ESLint disable for `@typescript-eslint/no-require-imports` — because a dynamic `import()` of the same addon does not work on Android: https://github.com/callstackincubator/react-native-node-api/blob/29a527d87fa8cb965b0048b1b4c1cff2b0eab281/apps/test-app/App.tsx#L78-L83 Nobody has established *why*. It matters beyond the test app: consumers writing modern ESM will reach for `await import("some-addon")` first, and if that silently fails on Android while working on iOS, it is a confusing first-run experience for exactly the audience this project targets. Worth checking, roughly in order of likelihood: - Whether the Babel plugin in `packages/host/src/node/babel-plugin/plugin.ts` rewrites `require("./addon.node")` but leaves `import("./addon.node")` untransformed — the plugin matches `require` call expressions, so a dynamic import may simply never be turned into a `requireNodeAddon()` call. - Whether Metro's async-import handling on Android (inline requires / RAM bundles) defers the module in a way that breaks the TurboModule lookup. - Whether the failure is a rejected promise or a hard error, and what it actually says — the current comment records the symptom without the message. Outcome should be either a fix (most likely: handle `import()` in the Babel plugin alongside `require()`) or a documented limitation, so the `eslint-disable` can carry a real explanation instead of an open question.