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

entriesplatform-native · verified 2026-07-16 · react-native

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

reviewedconfidence: lowearly: 2/14 of this tier graded so far (0 overturned) — the public scorecard →

re-verified 4× — 2026-07-16 · 2026-07-10 · 2026-07-09 · 2026-07-06 · changelog

recommendation

2D / interactive visuals → react-native-skia. Declarative 3D inside a normal app → react-three-fiber (+expo-gl). Real game engine → embed Godot (react-native-godot). AR/VR → ReactVision. RN suits supplemental/interactive experiences more than AAA games.

  • simple 2D game loop → react-native-game-engine
  • 3D / compute shaders → WebGPU (react-native-wgpu), advanced
  • 3D product views / scenes in an app → @react-three/fiber + expo-gl (no engine needed)
  • mobile AR or cross-platform VR incl. Meta Quest → ReactVision (@reactvision/react-viro; New Arch required)
  • Apple Vision Pro app → react-native-visionos (Callstack fork; check its RN-version lag first)

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; common base for RN games/visuals
react-native-godot (@borndotcom)embed the Godot engine (RTNGodotView; by Born & Migeran); runs off-thread (separate from RN's JS thread)
WebGPU (react-native-webgpu, formerly react-native-wgpu)3D render pipelines on Google's Dawn (by William Candillon, not Software Mansion); UI-thread via Reanimated/worklets; advanced12k/wk
react-native-game-engineentity-component loop for simple 2D games; effectively unmaintained (last release v1.2.0, 2020)1k/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
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; active (2.57.x, 2026-07)2k/wk
react-native-visionos (Callstack)full RN fork targeting Apple Vision Pro / visionOS SDK (~1.1k★); CAUTION: pinned to RN 0.78 (2025-03), lags core by ~a year — verify parity before betting

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 2k · @react-three/fiber 4.2M · @borndotcom/react-native-godot 900 · react-native-wgpu 12k · react-native-game-engine 1k

Verified notes

Niche; RN suits supplemental/interactive experiences more than AAA games. AR/VR + 3D options added 2026-07-09 (gap flagged by Native Weekly #15's ReactVision feature, promoted on user's call): ReactVision is the maintained Viro lineage (verified vs npm — Fabric required, published 2026-07); react-native-visionos verified vs the Callstack repo (latest v0.78.0, 2025-03 — the version-lag caveat is the load-bearing fact); react-three-fiber v9 verified vs npm. FIRST-PARTY 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 beside ReactVision's immersive AR/VR.

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 itReact 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 (+expo-gl). Real game engine → embed Godot (react-native-godot). AR/VR → ReactVision. RN suits supplemental/interactive experiences more than AAA games.

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); an Apple Vision Pro app → react-native-visionos, checking its RN-version lag first.

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.

@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.

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.

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.

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 (2.57.x, 2026-07, verified vs npm).

react-native-visionos (Callstack) — a full RN fork targeting Apple Vision Pro / the visionOS SDK (~1.1k★). CAUTION, and the entry calls this the load-bearing fact: pinned to RN 0.78 (2025-03), lagging core by about a year — verify parity before betting.

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 the visionOS fork without checking the lag. Pinned to RN 0.78 (2025-03), about a year behind core — the entry marks this version-lag caveat as the load-bearing fact. Verify parity before betting.
  • 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: visionos pinned to RN 0.78, ReactVision requiring Fabric. 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, active 2.57.x). WebGPU (Dawn, UI-thread via worklets) is the advanced 3D/compute path; react-native-game-engine still answers "simple 2D loop" but is unmaintained since 2020; react-native-visionos is pinned to RN 0.78 and lags core by about a year — verify before betting; 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