Oliver Edis

One Codebase for AR on Phones and VR on Headsets: Cross-Platform XR in 2026

One Codebase: AR on Phones, VR on Headsets: one codebase node linked to two phones, a Meta Quest and an Apple Vision Pro on a wireframe floor

Short answer: to ship one app that is AR on phones and VR or mixed reality on headsets, you need a framework that targets ARKit, ARCore, OpenXR, and visionOS from one project. Unity can do it in C#, with separate build setups and a paid plan for visionOS. WebXR can do it in a browser, with limited support on iPhone. ViroReact does it natively from one React Native and TypeScript codebase: a single ViroXRSceneNavigator serves an AR scene on iPhone and Android and a VR or MR scene on Meta Quest and Apple Vision Pro, and the web gets the same scenes through ReactVision Editor Scene Links.

The comparison

UnityWebXRViroReact
Phone AR (iPhone and Android)Yes, AR FoundationAndroid browsers; no WebXR AR in iPhone SafariYes, native ARKit and ARCore
Meta Quest VR and MRYesIn the Quest browserYes, native OpenXR with passthrough MR
Apple Vision ProYes, paid Unity planLimitedYes, immersive and mixed (Expo)
LanguageC#JavaScriptTypeScript and React Native
Licence and feesFree tier, paid above revenue thresholdsOpen standardsMIT, no runtime fees

The one-codebase pattern

import { ViroXRSceneNavigator } from "@reactvision/react-viro";

export default function App() {
  return (
    <ViroXRSceneNavigator
      arInitialScene={{ scene: PhoneARScene }}
      vrInitialScene={{ scene: HeadsetScene }}
    />
  );
}

Shared components (your 3D models, materials, animations, game logic, React state) live once and are used by both scenes. A new device is a build target, not a new project.

Sharing the space, not just the code

Cross-platform is more than rendering. ReactVision Spatial adds what multi-device apps need: Cloud Anchors so content stays put between sessions, Geospatial Anchors for location-based AR, co-location so several people in one room see the same content (phones, Quest, and Vision Pro, within the same device family), and asset hosting with over-the-air updates.

Build it with your agent

Connect the ReactVision MCP server (https://mcp.reactvision.xyz/viro) and ask for the app you want, for example "an AR furniture viewer for phones with a VR showroom on Quest". The agent checks per-device support, writes both scenes, validates them, and renders them for review. Prefer no code? Build the scene in the ReactVision Editor and embed it with StudioSceneNavigator.

Next steps

Oli

Frequently asked questions

Can one app run as AR on mobile and VR on Meta Quest?
Yes. With ViroReact, one React Native codebase runs native AR on iPhone and Android and native VR and mixed reality on Meta Quest, using ViroXRSceneNavigator.
What is the best cross-platform XR framework for iOS, Android, Quest, and Vision Pro?
For C# teams, Unity. For React, React Native, and TypeScript teams, and for AI-agent-led development, ViroReact: native on all four, plus the web, MIT licensed, no runtime fees.
Do I need separate projects for AR and VR?
Not with ViroReact. One project, one navigator, two scenes that share components.