React Native Comes to Meta Quest
Key Points
- Official React Native support for Meta Quest
- Expo Go + expo-horizon-core enable fast iteration and proper Horizon config
- AOSP-based Horizon OS — avoid Google Play Services and adjust permissions
Summary
React Native now has official support for Meta Quest (Meta Horizon OS). Because Horizon OS is Android-based, existing Android toolchains, debugging workflows, and React Native abstractions carry over with minimal changes. Developers can iterate quickly using Expo Go on the headset and move to Expo development builds or a manual Android configuration (build flavors and manifest changes) for native integrations and store submission.
Key Points
- Quick start with Expo:
- Install Expo Go from the Meta Horizon Store on the headset.
- Typical commands:
npx create-expo-app@latest my-quest-appandnpx expo startthen scan the CLI QR in Expo Go to launch. - Live reloading and edit-refresh workflow work as on Android/iOS.
- When native features are required:
- Use Expo development builds or add the
expo-horizon-coreplugin toapp.json/app.config.jsto sethorizonAppId, default panel size,supportedDevices, and other Horizon-specific metadata. - Update
orientationtodefaultand add Quest build scripts (e.g.expo run:android --variant questDebug).
- Use Expo development builds or add the
- Using React Native without Expo:
- Create a Quest-specific build flavor in
android/app/build.gradle, sethorizonAppId, declare supported devices (e.g.quest2|quest3|quest3s), define panel size in the manifest, remove prohibited permissions, and adjust min SDK. - Implement runtime checks (e.g.
isHorizonDevice()/isHorizonBuild()) to guard platform-specific behavior.
- Create a Quest-specific build flavor in
- Platform constraints and compatibility:
- Horizon OS is AOSP-based: no Google Play Services—avoid direct dependencies on Google Mobile Services or provide platform-specific alternatives.
- Some mobile-only permissions and sensors (SMS, GPS, certain sensors) are unavailable or prohibited; account for these differences at build and runtime.
- Most self-contained React Native libraries that rely on standard RN/Android APIs will work; touch- or GSM-dependent libraries may need adaptation or replacement. Expo offers drop-in replacements for some services (location, notifications).
- VR design and input:
- Design for distance viewing, larger hit targets, readable typography, and controller/hand-tracking input (hover/focus patterns). Prefer input-agnostic, responsive layouts and clear focus states.
Practical next steps for engineers
- Prototype UI and interactions with Expo Go on a Quest device.
- If you need native modules or store-ready builds, add
expo-horizon-coreor mirror its changes in your Android project (build flavor, manifest metadata, scripts). - Audit dependencies for Google services or mobile-only hardware, and add runtime guards for Horizon-specific behavior.
Resources
- expo-horizon-core plugin (inspect implementation for required changes)
- Meta Quest / Horizon OS developer docs
- Reference project and React Conf showcase for concrete examples