Skip to main content

Build from Source

Build the React Native SDK from the repository and link it into your app. Use this when you need to:
  • Consume an unreleased branch
  • Target an ABI the prebuilt package doesn’t ship (e.g. Android x86)
  • Apply a local patch
  • Audit the native code before shipping
If you just want to use a published release, see Installation.

Prerequisites

  • Rust toolchain (rustup)
  • Node.js 20+
  • Xcode 15+ with command-line tools (for iOS)
  • Android NDK 26+ with ANDROID_NDK_HOME set (for Android)
  • cargo-ndk installed: cargo install cargo-ndk
Add the required Rust targets once:

Build

From the sdk/ directory:
This produces packages/privacy-boost-react-native/sunnyside-io-privacy-boost-react-native-<version>.tgz.

Granular targets

If you only need one platform or want to skip ahead:

Install the tarball

In your RN app:
The tarball is a drop-in replacement for the published package — same entry points, same types, same native modules.

Developing against a local checkout

For tight iteration (edit Rust → rebuild → test in app), skip the tarball and link the package directly. From your app:
After editing Rust or the UDL, re-run the native build for the platform you’re testing:
Then restart Metro and reload your app. The native module gets picked up on the next launch.
Gotcha: JS changes in the SDK package need make rn-build or Metro won’t see them. The react-native field in package.json points at src/, so Metro does resolve TS source directly — but lib/ is what CJS/ESM consumers see.

Common build errors

ANDROID_NDK_HOME not set Install the NDK via Android Studio’s SDK Manager, then:
error: linker 'cc' not found on Android build cargo-ndk isn’t installed, or your toolchain is stale. Run cargo install cargo-ndk and retry. Found incorrect path in 'types' field on npm run build You skipped the post-codegen patch step. The Makefile targets run it for you; if you invoked npm run ubrn:ios directly, also run bash sdk/scripts/fix-ubrn-codegen.sh. Tests fail with mock drift errors make rn-mock regenerates the Jest mock from the current bindings. Run it after any UDL change.

What gets built

Everything except lib/ is gitignored — regeneration is expected on every branch checkout that changes UDL or Rust source.