react-brain
Browse decisions
React & language foundations 3App architecture 11UI 13Platform & native 9Build, test, observe, secure 6AI in React apps 3stack composerdecision recordscensusstaleness benchnewsletterarchitecturechangelogmethodologyroadmap

entriesplatform-native · verified 2026-10-08 · react-native

Games, 3D & AR/VR — interactive / real-time rendering

reviewedconfidence: lowtrack: weakenedthis tier holds 64% on the public scorecard (7/14 graded · 0 overturned) →

related decisions: animation

cited by: animation

re-verified 9× — 2026-10-08 · 2026-09-24 · 2026-09-21 · 2026-09-10 · 2026-09-01 · 2026-07-16 +3 · changelog

recommendation

2D / interactive visuals → react-native-skia. Declarative 3D inside a normal app → react-three-fiber (@react-three/fiber + expo-gl). Real game engine → embed Godot (react-native-godot), the weakest leg: dormant since 2025-11, pin it. AR/VR → ReactVision (RN 0.86 + Expo SDK 57 only). RN suits supplemental/interactive experiences more than AAA games; the RN version you are on decides the AR/VR and visionOS picks.

  • simple 2D game loop → react-native-game-engine (only for an existing loop; unmaintained since 2020 — new 2D work goes to react-native-skia)
  • 3D / compute shaders → WebGPU (react-native-webgpu; advanced — not the deprecated react-native-wgpu)
  • 3D product views / scenes in an app → @react-three/fiber + expo-gl (no engine needed; move R3F 9.8 and RN 0.88 together)
  • physically-based rendering of 3D models where R3F-over-GL falls short → react-native-filament (Margelo; quiet since 2026-05, pin it)
  • mobile AR or cross-platform VR incl. Meta Quest, on RN 0.86 → ReactVision (@reactvision/react-viro 3.x; New Arch required)
  • mobile AR / VR on RN 0.83-0.85 or Expo SDK 55-56 → ReactVision (@reactvision/react-viro 2.58.x, the last 2.x line)
  • Meta Quest 2D-panel app, not immersive → expo-horizon-core (first-party config plugin; Expo Go on the Horizon Store)
  • Apple Vision Pro app → @reactvision/react-native-visionos (tracks RN 0.86), else react-native-visionos (Callstack fork; last release 0.79.6)

Low confidence — fast-moving or lightly-vetted domain: treat the pick as a vetted lead and prototype before committing.

Options & tradeoffs

the field considered — and why each one isn’t the default here

optiontradeoffevidence
react-native-skiaGPU 2D drawing loop; the common base for RN games and interactive visuals. Now published by its author as `react-native-skia` (3.x on Graphite, minSdk 26 / iOS 15.1; v2 line as react-native-skia@2); @shopify/react-native-skia stops at 2.14.0 (verified vs npm 2026-10-08), see note: SKIA.
react-native-godot (@borndotcom)Embeds the Godot engine (RTNGodotView; by Born & Migeran), running off RN's JS thread — the only real-game-engine route in RN. WEAKENED (2026-09-10 challenge): 1.0.1 (2025-11-04) is still the last npm publish (2026-09-24, verified vs npm), so adopt it as a dormant dependency and pin it. See note: GODOT.
WebGPU (react-native-webgpu, formerly react-native-wgpu)3D render and compute pipelines on Google's Dawn (by William Candillon, not Software Mansion); UI-thread via Reanimated/worklets; advanced. react-native-webgpu 0.10.2 (2026-09-16, verified vs npm); react-native-wgpu is deprecated, see note: WEBGPU RENAME.7k/wk
react-native-game-engineEntity-component loop for simple 2D games; effectively unmaintained: 1.2.0 (2020-06-09) is the last release (2026-09-24, verified vs npm).2k/wk
@react-three/fiber (three.js)Declarative 3D scenes as React components; v9 runs in RN via expo-gl, the 3D-in-an-app path without a game engine. 9.8.0 (2026-09-22, verified vs the release) is compatible with React 19.3.0; see note: R3F 9.8.
react-native-filament (Margelo)Google's Filament physically-based renderer as declarative React components, GPU-native (Metal on iOS, OpenGL/Vulkan on Android), mobile-first, ~4MB native dep (verified vs the docs); the mid ground between R3F-over-GL and a game engine. 1.11.0, 1.4k★, QUIET since 2026-05-27; see note: FILAMENT.
ReactVision (@reactvision/react-viro)AR/VR from one RN codebase (iPhone/Android AR + Meta Quest), the maintained fork of react-viro; New Architecture (Fabric) required. 3.0.1 (2026-09-21, verified vs npm) peers RN >=0.86 <0.87 and Expo SDK 57 only; see note: REACTVISION 3.6k/wk
react-native-visionos (Callstack)Full RN fork targeting Apple Vision Pro / visionOS (~1.1k★). CAUTION: @callstack/react-native-visionos 0.79.6 (2025-08-23, verified vs npm) is its latest release while RN core is on 0.87; see note: VISIONOS FORKS.
@reactvision/react-native-visionosReactVision's visionOS fork (out-of-tree platform: ios/, android/ and visionos/ from one JS codebase), which exists so ViroReact renders on visionOS. 0.86.4 (2026-09-20, verified vs npm), tracking RN 0.86; see note: VISIONOS FORKS.6k/wk

evidence: npm weekly downloads (signals snapshot) · “ships in n/D” = adoption across the production-app census, honest denominators

npm weekly downloads (from the corpus's last signals run): @reactvision/react-viro 6k · @react-three/fiber 7.1M · @borndotcom/react-native-godot 246 · react-native-wgpu 7k · react-native-game-engine 2k

Verified notes

THE PICTURE: React Native suits supplemental and interactive experiences more than AAA games, so each leg of the default is the lightest renderer that does the job: Skia for 2D, R3F over expo-gl for 3D inside a normal app, and a real engine (Godot) only when you need game-engine semantics. AR/VR and visionOS run on forks of RN itself, so there the RN version you ship is the constraint that decides the pick. REACTVISION 3 (2026-09-24, verified vs npm): @reactvision/react-viro 3.0.0 (2026-09-20) and 3.0.1 (2026-09-21) peer react-native >=0.86.0 <0.87.0, expo >=57.0.0 <58.0.0, react >=19.0.0 and @reactvision/react-native-visionos >=0.86.0 <0.87.0; the last 2.x (2.58.1, 2026-08-18) peered RN >=0.83.0 <0.87.0 and Expo >=55.0.0 → 3.0 raises the floor to RN 0.86 / SDK 57, and neither line admits RN 0.87 (current stable 0.87.1) → RN 0.87+ apps cannot take ReactVision today. VISIONOS FORKS (2026-09-24, verified vs npm and the ReactVision README): @callstack/react-native-visionos last released 0.79.6 on 2025-08-23; @reactvision/react-native-visionos 0.86.4 shipped 2026-09-20 and is the fork ReactVision 3 requires → for a new Vision Pro app the ReactVision fork is the one tracking a recent RN. WEBGPU RENAME (2026-09-24, verified vs npm): react-native-wgpu 0.5.17 (2026-07-08) carries an npm deprecation ("renamed to react-native-webgpu") → install react-native-webgpu and update imports. GODOT (2026-09-10 challenge, re-verified 2026-09-24 vs npm): @borndotcom/react-native-godot reached 1.0.1 on 2025-11-04 and has not published since; the migeran/react-native-godot repo showed ~0 stars (2026-09-10) → the off-thread embed is still the only real-game-engine route, but treat it as a deliberately adopted dormant dependency, not a maintained default. R3F 9.8 (2026-09-22, verified vs the release): @react-three/fiber 9.8.0 is "now compatible with React 19.3.0", the React line RN 0.88 syncs in, though the maintainers say not all new 19.3 APIs are supported yet → move R3F and RN 0.88 together. It also configures roots synchronously (gated on the renderer when async, e.g. WebGPURenderer) and stops Strict Mode breaking the canvas. FILAMENT (2026-09-24, verified vs npm and GitHub): react-native-filament 1.11.0 was published 2026-05-27 and the repo was last pushed the same day (1,415 stars) → about four months quiet; check pulse before betting on it. SKIA (2026-09-21, pointer): RB-E-ANIMATION owns the react-native-skia stewardship thread, its receipts and its tripwire. Shopify sponsors Skia through the end of 2026; the author will fork and republish under a new name and the Shopify repo is then archived. Nothing is deprecated today (2.12.0 shipped 2026-09-16) → no reason to leave Skia, but this entry's 2D default is what changes name. 2026-10-08: it changed — `react-native-skia` 3.x (Graphite) by its author, v2 continuing as react-native-skia@2, @shopify stops at 2.14.0; 3.1.0 shares one Dawn device with react-native-webgpu (RB-E-ANIMATION owns the receipts and the migrate rule). QUEST (2026-07-10, verified vs the official RN blog): React Native supports Meta Quest / Horizon OS directly via the expo-horizon-core config plugin, with Expo Go on the Horizon Store → a first-party 2D-panel path beside ReactVision's immersive AR/VR. HISTORY: 2026-10-08 REOPENED: Skia pointer — the rename landed (react-native-skia 3.x / @2; @shopify stops at 2.14.0). 2026-09-24 CORRECTED: ReactVision 3.0 raises the peer floor to RN 0.86 / Expo SDK 57 (it was recorded as a version-line move with no new floor); Callstack visionOS latest is 0.79.6 (2025-08-23), not 0.78 (2025-03); react-native-wgpu now carries an npm deprecation. 2026-09-24 REOPENED: R3F 9.8.0 React 19.3 compatibility. 2026-09-21 REOPENED: Skia stewardship pointer (the 2D default changes owner and package name). 2026-09-10 CHALLENGED → WEAKENED: Godot leg (npm quiet since 2025-11-04, ~0-star repo); the ReactVision leg was rated healthy in the same challenge. 2026-09-01 REOPENED: react-native-filament recorded as quiet since 2026-05. 2026-07-10 GAP CLOSED: first-party Meta Quest path (expo-horizon-core). 2026-07-09 GAP CLOSED: AR/VR + 3D options added (ReactVision, react-native-visionos, react-three-fiber), from Native Weekly #15.

Canonical reading

Editorial annotations on why each piece matters — the articles themselves are the originals; read them there.

React Native Skia — For Us, For You, and For FunColin Gray (Shopify)

The foundational architecture of react-native-skia: JSI for direct C++/JS communication, a custom React reconciler powering the declarative API, and Reanimated-driven animation. The enduring design under RN's 2D GPU drawing — the base for RN games and interactive visuals.

Sources

Depth (in-domain rules) is owned by the react-native-best-practices skill — this entry is selection breadth.

The full explanation

The reviewed long-form essay behind this entry — the why, not a how-to. Also on GitHub.

About games, 3D & AR/VR — interactive / real-time rendering

Diataxis: Explanation. This page builds understanding of the games/3D/AR-VR decision — why the shelf splits by what you are drawing, and where each option puts the render loop. It is not an engine-setup guide and not a graphics API reference. The candidate list and one-line tradeoffs live in the index entry RB-E-GAMES; render-performance depth is owned by the react-native-best-practices skill. Read this for the why.

The one idea that organises everything: a game is a render loop, not a component tree

React's unit of work is the component tree; a game's unit of work is the loop. The entry's own vocabulary says so, option by option: react-native-skia is a "GPU 2D drawing loop", react-native-game-engine is an "entity-component loop", WebGPU is "3D render pipelines", and Godot is a whole engine that "runs off-thread (separate from RN's JS thread)". So the organising question for this shelf is not which component library but where does the loop live, and who drives it — React orchestrates, the loop draws:

  • Skia gives the loop a declarative face. The Shopify architecture piece under this entry spells out how: JSI for direct C++/JS communication, a custom React reconciler powering the declarative API, and Reanimated-driven animation. Your components describe; Skia draws.
  • Godot doesn't share the loop with React at all: the engine is embedded (RTNGodotView, by Born & Migeran) and runs off-thread, separate from RN's JS thread.
  • WebGPU (react-native-webgpu, formerly react-native-wgpu; by William Candillon, not Software Mansion) builds 3D render pipelines on Google's Dawn, driven UI-thread via Reanimated/worklets — the entry's own label: advanced.
  • react-three-fiber keeps the scene in the component tree — declarative 3D scenes as React components, v9 running in RN via expo-gl — the 3D-in-an-app path without a game engine.
  • react-native-game-engine names the loop in its API — an entity-component loop for simple 2D games — and is effectively unmaintained (last release v1.2.0, 2020).

The AR/VR shelf is the scoping caveat: the entry describes ReactVision, react-native-visionos, and the first-party Quest path in platform-target terms (which headset, which fork, which architecture requirement), not loop terms. The loop lens above covers the 2D/3D options; the AR/VR facet is organised by target instead, and this doc says so rather than stretching the metaphor.

The default, and why

2D / interactive visuals → react-native-skia. Declarative 3D inside a normal app → react-three-fiber (@react-three/fiber + expo-gl). Real game engine → embed Godot (react-native-godot), the weakest leg: dormant since 2025-11, pin it. AR/VR → ReactVision (RN 0.86 + Expo SDK 57 only). RN suits supplemental/interactive experiences more than AAA games; the RN version you are on decides the AR/VR and visionOS picks.

Four shelves, split by what you are drawing, plus a ceiling the entry states twice: RN suits supplemental/interactive experiences more than AAA games. The when-clauses refine the shelves: a simple 2D game loop → react-native-game-engine (with its maintenance caveat); 3D or compute shaders → WebGPU, explicitly "advanced"; 3D product views / scenes in a normal app → @react-three/fiber + expo-gl, no engine needed; mobile AR or cross-platform VR including Meta Quest → ReactVision (New Architecture required; 3.x on RN 0.86, 2.58.x on RN 0.83-0.85); an Apple Vision Pro app → ReactVision's @reactvision/react-native-visionos fork (tracks RN 0.86), else Callstack's react-native-visionos.

The landscape, facet by facet

react-native-skia — the common base for RN games and interactive visuals: a GPU 2D drawing loop under a declarative API. The enduring design (per the Shopify reading): JSI, a custom React reconciler, Reanimated-driven animation. It is changing hands (2026-09-21; RB-E-ANIMATION owns the thread): Shopify sponsors it through the end of 2026, then the author forks and republishes under a new name. Nothing is deprecated today, so there is no reason to leave it.

@react-three/fiber (three.js) — declarative 3D scenes as React components; v9 runs in RN via expo-gl (verified vs npm). The path for 3D inside an app when you don't need an engine. 9.8.0 (2026-09-22) is compatible with React 19.3.0, the React line RN 0.88 syncs in, but not every new 19.3 API is supported yet — upgrade R3F and RN 0.88 together.

react-native-godot (@borndotcom) — embed the Godot engine itself (RTNGodotView; by Born & Migeran), running off-thread from RN's JS thread. The "real game engine" answer, and the weakest leg of the default: a 2026-09-10 challenge rated it WEAKENED because 1.0.1 (2025-11-04) is still its last npm publish. Adopt it as a pinned, dormant dependency.

WebGPU (react-native-webgpu) — 3D render pipelines on Google's Dawn, UI-thread via Reanimated/worklets. Advanced; note the identity details the entry pins down: formerly react-native-wgpu, by William Candillon, not Software Mansion. The old name now carries an npm deprecation ("renamed to react-native-webgpu"): install react-native-webgpu and update imports.

react-native-filament (Margelo) — Google's Filament physically-based renderer as declarative React components, the mid ground between R3F-over-GL and a game engine. Quiet since its 1.11.0 publish on 2026-05-27; check pulse before betting on it.

react-native-game-engine — entity-component loop for simple 2D games; effectively unmaintained (last release v1.2.0, 2020).

ReactVision (@reactvision/react-viro) — AR/VR from one RN codebase: iPhone/Android AR plus Meta Quest. The maintained fork of react-viro; New Architecture (Fabric) REQUIRED; active (3.0.1, 2026-09-21, verified vs npm). The 3.0 major raised its peer range to react-native

=0.86.0 <0.87.0 and Expo SDK 57 (2.58.1 accepted RN 0.83-0.86 and SDK 55+); neither line admits RN 0.87, so an app on 0.87+ cannot take ReactVision today.

react-native-visionos (Callstack) — a full RN fork targeting Apple Vision Pro / the visionOS SDK (~1.1k★). CAUTION, and the load-bearing fact: its latest npm release is 0.79.6 (2025-08-23) while core is on 0.87 — verify parity before betting.

@reactvision/react-native-visionos — ReactVision's visionOS fork, an out-of-tree platform (ios/, android/ and visionos/ from one JS codebase) that exists so ViroReact renders on visionOS. 0.86.4 (2026-09-20) tracks RN 0.86 and is the fork ReactVision 3 requires.

First-party Meta Quest (2026-07-10, verified vs the official RN blog) — React Native now supports Meta Quest / Horizon OS directly via the expo-horizon-core config plugin, with Expo Go on the Horizon Store. A first-party 2D-panel path that sits beside ReactVision's immersive AR/VR, not in competition with it.

Provenance: the AR/VR + 3D options were added 2026-07-09 — a gap flagged by Native Weekly #15's ReactVision feature and promoted on the user's call — each verified against npm, the Callstack repo, or the RN blog as noted above. The entry's detect rows also make this shelf a doctor signal: any of @reactvision/react-viro, @react-three/fiber, @borndotcom/react-native-godot, react-native-wgpu, or react-native-game-engine in package.json routes advice here.

Tradeoffs and failure modes to name out loud

  • Pitching RN at an AAA game. The ceiling appears in both the recommendation and the note: RN suits supplemental/interactive experiences more than AAA games. This shelf is for visuals, scenes, and embedded engines inside apps — niche by the entry's own word.
  • Betting on a visionOS fork without checking the lag. Callstack's last release is 0.79.6 (2025-08-23); ReactVision's fork tracks 0.86. Check which RN line each fork is on before betting.
  • Upgrading RN past 0.86 with ReactVision installed. Both ReactVision lines peer react-native <0.87.0; the RN upgrade and the AR/VR dependency must move together.
  • ReactVision on the old architecture. New Architecture (Fabric) is REQUIRED — a hard precondition, not a preference.
  • Reaching for react-native-game-engine as if it were current. It is the when-clause answer for a simple 2D game loop, and it is effectively unmaintained — last release v1.2.0, in 2020. Both facts travel together.
  • Treating WebGPU as a default. The entry labels it advanced, twice (option row and when-clause). It is the 3D/compute-shaders answer, not the starting point.
  • Assuming immersive is the only Quest path. Since 2026-02 there is a first-party 2D-panel path (expo-horizon-core, Expo Go on the Horizon Store) beside ReactVision's immersive AR/VR — pick by whether you need immersion, not by which library you found first.

How it interacts with the rest of the stack

  • Animation (RB-E-ANIMATION). The same machinery drives both shelves: Skia's animation is Reanimated-driven (per the Shopify reading) and WebGPU runs UI-thread via Reanimated/worklets. That entry's doc pairs RB-E-GAMES with GPU drawing explicitly.
  • SVG (RB-E-SVG). The sibling GPU-drawing shelf — declarative vector drawing where this entry is loops and engines. (Pairing inherited from the animation doc, not this entry's text.)
  • RN versions (RB-E-RN-VERSIONS). Two of the AR/VR options are version/architecture gates in disguise: the visionOS forks track specific RN lines (0.79 for Callstack, 0.86 for ReactVision), and ReactVision requires Fabric and peers RN 0.86 exactly. What your app can adopt depends on where core is.
  • Performance depth (react-native-best-practices). The defer skill; the entry names it without scoping. Render-perf rules and thresholds live there, not here.

In one paragraph

Games, 3D, and AR/VR in React Native organise around one idea: a game is a render loop, not a component tree — React orchestrates, the loop draws. The default splits by what you draw: 2D / interactive visuals → react-native-skia (a GPU 2D drawing loop with a declarative face — JSI, a custom React reconciler, Reanimated-driven animation); declarative 3D inside a normal app → react-three-fiber v9 via expo-gl, no engine needed; a real game engine → embed Godot (RTNGodotView, off-thread from RN's JS thread); AR/VR → ReactVision, the maintained react-viro fork (Fabric required, 3.x peers RN 0.86 + Expo SDK 57). WebGPU (Dawn, UI-thread via worklets; install react-native-webgpu, the old react-native-wgpu name is deprecated) is the advanced 3D/compute path; react-native-game-engine still answers "simple 2D loop" but is unmaintained since 2020; Godot's embed is dormant since 2025-11; for Vision Pro, ReactVision's fork tracks RN 0.86 while Callstack's last release is 0.79.6; and Meta Quest now has a first-party 2D-panel path via expo-horizon-core. The ceiling is stated twice in the entry: RN suits supplemental/interactive experiences more than AAA games.


See also: RB-E-ANIMATION (Reanimated/worklets — the shared drive train), RB-E-SVG (the declarative GPU-drawing sibling), RB-E-RN-VERSIONS (the visionos pin and the Fabric gate are version questions). Render-performance depth: the react-native-best-practices skill. Background reading: Shopify on react-native-skia's architecture — the enduring design under RN's 2D GPU drawing.

Related in platform-native: native · media · storage · native-ui · keyboard · payments · brownfield · alt-frameworks