Bond a symbiote

Native apps
for React.

One native core. The framework you already know, bonded on top — no WebView, no rewrite, no React Native fork.

Core

Stock native stack

Fabric, JSI, Yoga, Hermes, and the iOS/Android host stay ordinary React Native dependencies. SymbioteNative swaps the JavaScript renderer, never the native stack.

Adapter

Thin per-framework skin

Each framework maps its lifecycle and renderer operations onto one small engine mutation API. Clone-on-write Fabric persistence lives in a single shared place.

Output

Real native views

The result is the same Fabric shadow tree React Native already paints. No DOM, no WebView escape hatch, no fake native component layer.

Not just multi-platform

Every adapter keeps the accent of its framework.

Cross-surface content sharing, real framework sugar instead of a flattened callback surface, and CSS you can actually write — each landing framework by framework, not diluted into a shared subset.

Composition

Reach across the tree — or across surfaces

createPortal renders into another node in the same tree — a real Fiber-level portal, possible because Fabric runs in mutation mode here (React, Angular today). createTunnel goes further, and reaches every adapter: content painted by one independently mounted surface, registered from a totally different one, joined by nothing but a shared store.

  • React
  • Vue
  • Angular
  • Svelte
Idiom

Sugar where the framework expects it

v-model and v-show work on native views in Vue. Angular gets real @Output() EventEmitters and [(value)] two-way binding. Svelte 5's own $bindable() rune gives bind:value the same sugar, no adapter plumbing involved. Neither is a callback surface borrowed from React — each adapter speaks its own framework's grammar.

  • Vue
  • Angular
  • Svelte
Styling

Write CSS. Ship zero CSS engine.

A Vue SFC <style> block compiles to native style objects at build time — add scoped and it's scoped to the component, :global(...) still escapes out, the same semantics real Vue gives you in the browser. Svelte's own <style> block is scoped by default, through the same compile-time pipeline. CSS Modules and plain .css imports go further: import styles from './Card.module.css' resolves through the same shared class registry from React, Vue, Angular, or Svelte.

  • React
  • Vue
  • Angular
  • Svelte
Testing

One e2e spec, four adapters

Headless vitest covers component and integration logic with no simulator involved. Detox drives the real app end to end — and because it attaches below the renderer SymbioteNative replaces, the identical spec file runs unmodified against the React, Vue SFC, Vue TSX, and Svelte canaries. Angular has its own real-device Detox suite too.

  • React
  • Vue
  • Angular
  • Svelte
Same surface, different host

Four symbiotes, one native core.

React is the reference canary. Vue proves the native core is no longer tied to React's reconciler. Angular proves it again, through a completely different rendering model. Svelte proves it a third time, with no host-renderer seam to hook at all. All four flow through the same engine and the same stock Fabric host.

React · live adapter
Vue · live adapter
Angular · live adapter
Svelte · live adapter
The seam

Framework → adapter → engine → Fabric.

  1. React · Vue · Angular · Svelte
  2. thin reconciler
  3. @symbiote-native/engine
  4. nativeFabricUIManager
  5. stock React Native
Where things stand

Small surface, real pipe.

Read the roadmap →