RN Architecture: Bridge vs JSI / Fabric

The three threads, why the old bridge was slow, and what JSI, Fabric, and TurboModules changed.

must hard โฑ 24 min architecturejsifabricbridgethreadinghermes
Mastery:
Why interviewers ask this
This is exactly where your last RN interview went deep. Senior RN roles expect you to explain the runtime, not just the API.

React Native runs your JavaScript in a JS engine and renders real native views (not a WebView). The interesting part is how those two worlds talk to each other โ€” and thatโ€™s the whole architecture story.

The three threads

React Native โ€” threading model
A tap travels JS โ†’ Shadow (Yoga layout) โ†’ UI (native views). Click a stage to see its job. The old bridge serialized JSON between them; the new architecture (JSI) lets JS call C++/native directly.
JS thread
Your React code, business logic, state, diffing
โ‡„
Shadow thread
Yoga computes flexbox layout (x, y, w, h)
โ‡„
UI / main thread
Renders native views, handles gestures & animations
  • JS thread runs your React components, state, and the reconciler. If you block it (heavy loops, big JSON parsing), you drop frames.
  • Shadow thread holds the shadow tree and runs Yoga (a C++ flexbox engine) to compute layout off the main thread.
  • UI / main thread is the only one allowed to touch native views; it handles rendering, gestures, and native-driver animations.

The old architecture: the Bridge

Originally, JS and native communicated over an asynchronous bridge. Every call โ€” โ€œcreate this viewโ€, โ€œthe user tappedโ€ โ€” was serialized to JSON, sent across, and deserialized on the other side, in batches.

Three consequences that interviewers love:

  1. Serialization cost โ€” turning everything into JSON strings and back is expensive at scale (think a long list scrolling fast).
  2. Asynchronous only โ€” JS could never synchronously read a native value mid-render; it had to fire a message and wait for a reply.
  3. Single bottleneck โ€” all traffic funneled through one bridge, which could congest.

The new architecture: JSI, Fabric, TurboModules

The new architecture removes the JSON bridge:

  • JSI (JavaScript Interface) โ€” a lightweight C++ layer that lets the JS engine hold references to native (C++/host) objects and call their methods synchronously, with no serialization. This is the foundation everything else builds on.
  • Fabric โ€” the new rendering system built on JSI. It creates the shadow tree in C++, supports concurrent rendering, and makes JSโ†”UI interactions faster and more consistent.
  • TurboModules โ€” native modules are now lazily loaded on first use (instead of all at startup) and callable synchronously via JSI. Faster startup, less memory.

The crisp contrast
Bridge = async, batched, JSON-serialized message passing (the bottleneck). JSI = a C++ interface enabling synchronous, serialization-free calls between JS and native. Fabric (rendering) and TurboModules (native modules) are the systems rebuilt on top of JSI.

Hermes

Hermes is an open-source JS engine optimized for React Native. Instead of parsing JS source at startup, Hermes precompiles to bytecode at build time, so the app skips parse/compile on launch โ€” meaningfully improving time-to-interactive, memory use, and app size on lower-end Android devices. It pairs naturally with the new architecture.

Say it out loud (30s)

โ€œRN runs JS on a JS thread, computes layout with Yoga on the shadow thread, and renders native views on the UI thread. The old bridge serialized everything to JSON and passed it asynchronously in batches โ€” that serialization and the async-only nature were the bottleneck. The new architecture replaces it with JSI, a C++ interface allowing synchronous, serialization-free calls; Fabric is the renderer and TurboModules are lazily-loaded native modules built on it. Hermes precompiles JS to bytecode for faster startup.โ€

Likely follow-up questions
  • What was serialized over the old bridge, and why was that the bottleneck?
  • What does JSI actually let you do that the bridge couldn't?
  • What are Fabric and TurboModules?
  • How does Hermes improve startup time?

References