This page gets you to a React Native app running on Meta Horizon OS. Start from the sample project for the fastest path, or add Horizon OS support to a new Expo project.
Start from the sample project
The easiest way to get started is to use the React Native Horizon OS sample as your template. It provides a working Expo project configured for Meta VR devices.
Use the quest variants for Meta VR devices and the mobile variants for other Android devices.
With a device connected and in developer mode, build, install, and run the Quest development client:
npm run quest
This command also starts Metro. After the first build, JavaScript changes update through Fast Refresh. Rebuild when native dependencies or Expo configuration change.
Test your app
Choose the development loop that fits what you are testing:
Meta Horizon OS is based on AOSP and does not include Google Mobile Services. Some mobile hardware and Android permissions are also unavailable on Meta VR devices.
If your app also targets mobile devices, use isHorizonDevice() from expo-horizon-core to select a Horizon OS integration or a mobile fallback.
Use Horizon-compatible integrations where available:
Some location functionality, including GPS, heading, geocoding, and background location, is not available on Meta Quest. Provide a fallback when your app depends on these capabilities.
Remove prohibited permissions before building. See Unsupported permissions for the requirements and review process.
Add spatial windows
To add spatial windows without converting your app into a fully immersive experience, use the Meta VR Layout SDK. It preserves your existing React Native app structure and the Standard Android build path.
Look and Pinch
Look and Pinch uses your app’s UI structure, text, and buttons to deliver standard input events. Test your app with Meta Spatial Simulator and follow the Look and Pinch design guidance, including using touch targets that are at least 48dp.