ViroReact AR and VR rendering

One codebase, native on every device.
Open source and built for agents.

ViroReact is the most widely used open-source library for building AR and VR with React Native and Expo. One codebase runs natively on iPhone, Android, Meta Quest, and Apple Vision Pro. It is MIT licensed and free forever, and your coding agent builds with it through the ReactVision MCP Server.


What is ViroReact?

ViroReact is an open-source React Native library for building native AR, VR and mixed reality apps, powered by ReactVision's ViroCore engine. It is MIT licensed, free forever, and had 140k+ installs in 2025. Unlike WebXR solutions that render into a browser canvas, ViroReact converts your React Native code into true native draw calls, giving you access to ARKit on iOS and ARCore on Android at full hardware speed, with device-specific features intact. Write once, ship natively across the full extended reality (XR) spectrum: augmented reality on phones, virtual reality on Meta Quest, and mixed reality passthrough on Quest 3 and 3S, and fully immersive apps on Apple Vision Pro.

PlatformStatus
iOS (ARKit)Supported
Android (ARCore)Supported
Meta Horizon OS (OpenXR)Supported
visionOS (Apple Vision Pro)Supported
Android XRComing Soon

visionOS runs fully immersive ViroReact scenes: PBR materials, particles, custom shaders, skeletal animation, physics, and 360 images. AR perception features such as plane detection, image tracking, and anchors are iOS and Android; mixed reality passthrough is Meta Quest.

Free and open-source (MIT)

ViroReact is licensed under the MIT License. No paywalls, no feature tiers, no runtime fees, no strings attached. The full source is on GitHub: fork it, extend it, or contribute back. A community of developers collaborates with the ReactVision team to keep things stable and moving forward.

ViroReact requires a development build and cannot run in Expo Go. AR features need a physical device, simulators and emulators are not supported.

Spatial infrastructure from ReactVision Spatial

Cloud Anchors and Geospatial Anchors connect to ReactVision Spatial by default, alongside Co-Location, replicated state, asset hosting with over-the-air updates, and Spatial Intelligence. It is the same infrastructure behind the ReactVision Editor, and it makes persistent, shared, and location-based AR easy to set up and scale with no backend to run. Spatial features need an rvApiKey and rvProjectId from your free ReactVision account.

Design in the Editor, load with one component

Build AR and VR scenes visually in the ReactVision Editor, then drop them into your app with a single StudioSceneNavigator component. ViroReact loads the scene at runtime from ReactVision Spatial, so you can update scenes centrally without rebuilding and shipping a new app. No scene graph to hand-write, no asset pipeline to wire up.

App.tsx
import { StudioSceneNavigator } from '@reactvision/react-viro';

// Design the scene visually in the ReactVision Editor, then
// load it at runtime with a single component. Credentials
// live in app.json, so there's nothing to wire up here.
export default function App() {
  return <StudioSceneNavigator />;
}

What you can build

ViroReact gives you a production-grade 3D rendering engine through standard React Native components. Here is what ships out of the box, no third-party plugins, no paid add-ons.

AR plane detection & anchors

Detect horizontal and vertical surfaces via ARKit and ARCore. ViroARPlaneSelector lets users tap to place content precisely. Cloud Anchors persist content across restarts and share it between users in the same space.

Trigger images & image markers

Trigger AR experiences when the camera sees a specific image: packaging, posters, business cards. Register targets with ViroARTrackingTargets, then attach scene content to a ViroARImageMarker.

Physics engine

Add a physicsBody prop to any object to bring it into the simulation. Dynamic bodies respond to gravity and forces, static bodies act as surfaces, and collision callbacks fire on impact.

Particle system

Create fire, smoke, rain, snow, and confetti with configurable quad-based emitters. Control spawn rate, lifetime, volume shape, velocity, and opacity, all through React Native props.

PBR lighting & materials

Physically-based rendering and HDR lighting bring 3D content to life with accurate reflections and real-time shadow casting from directional, omni, and spot lights.

Animation system

Declare named animations with ViroAnimations and run them on any object. Animate position, rotation, scale, opacity, and materials, sequenced and chained for complex choreography.

Spatial audio

Background stereo via ViroSound, positioned 3D audio with distance attenuation via ViroSpatialSound, and ambisonic 360 sound fields via ViroSoundField.

Portals

ViroPortal punches a hole in the real world and renders a fully immersive 3D environment on the other side. Works for showrooms, brand experiences, and games.

360 media & video

Wrap users in 360 photo or video environments with Viro360Image and Viro360Video. Play standard video on any surface, or project a live feed as a material texture.

3D objects & custom geometry

Load OBJ, FBX, and GLTF/GLB models with Viro3DObject, including embedded animations. ViroGeometry handles fully custom procedural meshes defined by vertex arrays.

Input events & interaction

Handle tap, drag, pinch, rotate, fuse, hover, and click on any 3D object with the familiar React Native event pattern. AR hit testing maps a touch to a 3D world position.

On-device YOLO object detection

ViroObjectDetector runs YOLOE through ONNX Runtime on the device, no cloud round-trip. Each detection reports a label, confidence, and bounding box, with a screen-space overlay on iOS and Android and a 3D world position on iOS. On Quest 3 and 3S it runs via the Meta Passthrough Camera API.

Game loop & on-screen controls

ViroGameLoop drives variable and fixed-step updates for game logic, and ViroVirtualJoystick and ViroVirtualButton add on-screen controls. Pair them with the physics engine and animation system to build full interactive experiences.

Cloud Anchors & Geospatial AR

Powered by ReactVision Spatial, which handles anchor hosting, resolution, and geospatial infrastructure. Anchor content to real-world coordinates using GPS and VPS, with no backend to run.

Editor scene integration

Design AR and VR scenes visually in the ReactVision Editor and load them at runtime with a single StudioSceneNavigator component. Update scenes centrally, no app rebuild required.

Familiar APIs, spatial results

Declarative JSX, typed props, familiar component patterns. The example below puts plane detection, image recognition, physics, and particle effects in a single TSX file. No engine-specific scripting, just components.

ARProductViewer.tsx
import {
  ViroARScene, ViroARSceneNavigator,
  ViroAmbientLight, Viro3DObject,
  ViroARPlaneSelector, ViroARImageMarker,
  ViroARTrackingTargets, ViroParticleEmitter,
} from '@reactvision/react-viro';

ViroARTrackingTargets.createTargets({
  packaging: {
    source: require('./assets/product-box.png'),
    physicalWidth: 0.15, // metres
  },
});

const ARScene = () => (
  <ViroARScene physicsWorld={{ gravity: [0, -9.8, 0] }}>
    <ViroAmbientLight color="#ffffff" intensity={200} />
    <ViroARPlaneSelector>
      <Viro3DObject
        source={require('./assets/chair.glb')}
        type="GLB"
        animation={{ name: "spin", run: true, loop: true }}
        physicsBody={{ type: 'Dynamic', mass: 1 }}
      />
    </ViroARPlaneSelector>
    <ViroARImageMarker target="packaging">
      <ViroParticleEmitter run={true} />
    </ViroARImageMarker>
  </ViroARScene>
);

export default () => (
  <ViroARSceneNavigator initialScene={{ scene: ARScene }} />
);

Built for agents: the ReactVision MCP Server

Plug ViroReact into the AI coding agent your team already uses. The ReactVision MCP Server gives any agent the live renderer API: components, prop schemas, event handlers, valid scene patterns, and working examples, so it writes ViroReact code that runs first time. Agents go beyond writing code, too: they run, validate, and render-test their scenes, and reach the rest of the stack, from ReactVision Spatial to Editor scenes, through the same connection.

The ReactVision MCP Server in use during a Claude Code session

How ViroReact compares

If you have a React Native team shipping a mobile app, ViroReact is a much better fit than a C# game engine, and ReactVision Spatial gives you managed Cloud Anchor and Geospatial infrastructure out of the box.

FeatureViroReactUnity AR FoundationNiantic Lightship
LanguageTypeScript / React NativeC# (Unity)C# (Unity)
Open sourceMIT LicenseProprietaryProprietary
CostFree foreverFree to $200K, then paidFree tier, then quoted (ARDK 3.x ends Feb 2027)
React Native integrationFirst-classNative bridgeNative bridge
Expo supportFull supportNot compatibleNot compatible
Cloud AnchorsReactVision Spatial (default)Self-managedLightship VPS
Team ramp-upDaysMonthsMonths

This table is the short version. The dedicated comparison pages go line by line, with honest concessions: ReactVision vs Unity, vs Niantic Lightship, vs Unreal Engine, and vs 8th Wall. Shipping to phones and Quest from one codebase? See how one API maps onto ARKit, ARCore, and OpenXR.

What people have built with ViroReact

Real products shipped to iOS and Android from a single React Native codebase, no game engine required. Here is how teams are using ViroReact in production. Planning your own? See ReactVision for startups, enterprise and defence.

Get started

Add ViroReact to an existing project, or spin up a fresh one with the Starter Kit.

Install the package

Drop ViroReact into any existing React Native or Expo project.

$npm install @reactvision/react-viro

Start with the Starter Kit

An Expo + TypeScript template with working AR demos ready to run.

Connect your agent

Give your AI coding agent the live ViroReact API and the tools to test what it writes, so its spatial code runs first time.

Read the docs

Full API reference, guides, and code samples.

ViroReact questions, answered

What is ViroReact?
ViroReact is the most widely used open-source library for building AR and VR apps with React Native and Expo. ViroReact renders natively through ARKit on iOS, ARCore on Android, OpenXR on Meta Quest, and visionOS on Apple Vision Pro from one TypeScript codebase, and it is powered by ReactVision's own ViroCore engine.
Is ViroReact free?
Yes. ViroReact is open source under the MIT licence and free forever, with no paywalls, feature tiers, or runtime fees. ViroReact had 140k+ installs in 2025, and the full source is on GitHub.
Which devices does ViroReact support?
ViroReact supports iPhone and iPad (ARKit), Android (ARCore), Meta Quest 3 and 3S (OpenXR, with VR and passthrough mixed reality), and Apple Vision Pro (visionOS immersive apps). Android XR support is coming soon.
Does ViroReact work with Expo?
Yes. ViroReact has full Expo support through a development build. ViroReact cannot run in Expo Go, and AR features need a physical device rather than a simulator or emulator.
Can AI coding agents write ViroReact code?
Yes. The ReactVision MCP Server gives Claude, Claude Code, Cursor, Codex, Windsurf, or any MCP-compatible agent the live ViroReact APIs, docs, and examples, plus tools to validate and render-test the scenes it writes, so ViroReact code runs first time.
How does ViroReact add Cloud Anchors and Geospatial AR?
ViroReact connects Cloud Anchors and Geospatial Anchors to ReactVision Spatial by default, alongside Co-Location, replicated state, and asset hosting. Add an rvApiKey and rvProjectId from a free ReactVision account and there is no backend to build or run.

Support

Community

Have a quick question or need feedback? Jump into our Discord for real-time chat, or post on r/ReactVision to get answers, code samples, and tips from thousands of fellow builders.

ReactVision Partners

Need deeper help? Engage a trusted ViroReact Partner. Certified agencies and consultants can architect, build, or optimise your XR app, run performance audits, and guide store launches so you ship faster with confidence.