Skip to content

Prebuilt node-api facade for published addons #496

Open

Description

@kraenhansen

Let published prebuilds record a neutral node-api library name, provided by a small prebuilt library the host embeds in the app. Addons then never name an engine, and a Hermes rename or a new engine means adding a facade rather than rebuilding addons. Deferred: the RFC in #447 doesn't need this. It depends on the stub generator in #494.

The facade has no code, table or injection step. On Apple it re-exports the Node-API symbols from Hermes, and on Android it's an empty library with a DT_NEEDED on Hermes. Details are in #493, and the spike findings are in this comment: 18 of 18 tests passed on an iOS simulator and an Android emulator, with async recording only node-api and resolving into Hermes.

Steps

  • Run a Release build on a physical iPhone, through signing and App Store validation. This is the main remaining risk and should come first.
  • Add a way for a module to tell link to keep its exact name. The spike hacks getLibraryName.
  • Add a prebuilt facade per backend, built with cmake-rn against a stub of the engine, with a generated re-export list on Apple.
  • Make link choose which facade to embed.

Open questions

  • Can weak-node-api be built under the node-api name as an alternative backend, so one addon binary works with either?
  • Should in-app and from-source addons use the same path, so there's only one to maintain?

node-api becomes a stable ABI contract once prebuilds ship, so settle the name before publishing any.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Host 🏡Our `react-native-node-api-modules` packageLinking 🔗Discovering and copying prebuilds from packages into the hostenhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions