Getting Started With Expo on Meta Quest

Authors
Jan Jaworski
Software Engineer
@
Callstack

Do you want to get started with developing React Native apps using Expo for Meta Quest?

Good news! If you already know how to make React Native apps, you’re on the right track to build apps for Meta Horizon OS. If not, this guide will show you everything that you need.

Prerequisites

To get up to speed quickly, we’ll start with Expo Go. It’s a sandbox that allows you to create apps without configuring an entire development setup. In later sections, we will also showcase more advanced setups so you can use the full capabilities of the React Native ecosystem.

If you’ve developed React Native apps before, you can use the same development setup. If you don’t have it yet, everything you need to get started is listed below.

First, install Node on your machine.

Next, install a code editor like VSCode, Zed, or another of your choice. You can also try Expo Snack in your browser, which will allow you to skip the steps above, if you want to try it out even faster.

At the time of writing this article, you’ll need a Meta Quest device to run your apps. The good news is that Meta is working on the Meta Spatial Simulator. It will allow you to build and test 2D apps without physical hardware. Its planned release is for this year, so look out for an announcement.

The last step in basic setup is to install the Expo Go app from the Meta Horizon Store.

Now, you should be ready to create your first app.

Creating an app with Expo Go

Setting up the environment

Open your terminal and run npx create-expo-app@latest to create a new Expo app.

Follow printed instructions and run npx expo start.

Run Expo on Meta Quest

Open Expo Go on your Meta Quest. Approve all camera access permissions and scan the QR code displayed in the terminal on your laptop.

Approve access to virtual cameras, so you can scan QR code displayed by Expo Go
Approve access to virtual cameras, so you can scan QR code displayed by Expo Go
Approve access to virtual cameras, so you can scan QR code displayed by Expo Go
Approve access to virtual cameras, so you can scan QR code displayed by Expo Go

Scan the QR code displayed in your terminal to open the app.

Your app should now open in a new window. You’re ready to develop it further and test changes on Meta Quest.

Congrats! Your app is now running on Meta Quest. Let’s test it by making some changes.

Your app on Meta Quest

Make the first edit in your app

Now, let’s make some changes to the sample app you just created. Open your project in your code editor and familiarize yourself with the structure of the app.

Let’s open app/(tabs)/index.tsx and change “Welcome!” to “Welcome, Meta Horizon OS!”. Save your changes and check them in your Meta Quest. You should see your change being immediately reflected in your app immediately.

Section that we will be changing
This is how it should look after our change
This is how it should look after our change

You’re ready to build awesome apps for Meta Quest!

Important callouts to know about Meta Horizon OS apps

When developing apps for VR devices, you need to take into account some differences from mobile apps. Here’s a list of the most important things that you should pay attention to when developing your app:

Going further with the development build

Expo Go is a great way to start, but if you want to dive deeper and use Expo and the React Native ecosystem's full potential, you’ll need to use a development build.

To be able to use it, you’ll have to do additional setup. Expo documentation includes step-by-step instructions on what you need to do. Follow the setup for Android devices.

After you’ve finished setting up your developer environment, you’ll also need to install the Meta Horizon app on your phone and enable developer mode. This will allow you to connect your VR Headset via ADB to enable debugging. In the future, it will also help you manage and publish your app to the Meta Horizon Store.

With everything in place, start your development server again and make sure you use “development build.” You can verify this in your terminal.

USB debugging is needed when developing Expo apps using development build
Make sure you see “development build”, if not press “s” to switch to it

Confirm the prompt to “Allow USB debugging” on your Meta Quest.

USB debugging is needed when developing Expo apps using development build

Conclusion and next steps

That’s it! You’re now ready to create apps for Meta Quest using Expo! As you can see, there are many similarities between creating apps for Meta Horizon OS and mobile apps using Expo. You should be able to quickly get up to speed and be productive in this new environment.

In the next article, we’ll explore popular libraries, common use cases, and differences with other platforms that you might want to consider.

Insights

Learn more about Virtual Reality

cover

Oct 15Article

Multi-Window React Native Apps With the Meta VR Layout SDK

Build multi-window React Native apps for Meta Quest with the Meta VR Layout SDK. Learn shared state, fallbacks, positioning, and simulator testing.

cover

Dec 8Article

Mobile vs. VR: Key Differences in Features, UI, and UX

Explore how VR reshapes layout behavior, typography, spacing, accessibility expectations, and interaction patterns in React Native.

cover

Dec 4Live Stream

React Native on Meta Quest: What We Learned About Building for VR

See Meta Quest used as a practical dev setup and watch the team build and test React Native features directly inside a VR workspace.

cover

Nov 26Podcast

Bringing React Native to VR on Meta Quest

Learn how Meta Quest uses React Native for 2D panels in 3D spaces, why AOSP matters, and how developers can bring existing RN apps to VR with minimal friction.

cover

Nov 20Article

How to Release a React Native App on the Meta Horizon Store

Learn how to build, submit, and publish your React Native app on the Meta Horizon Store.

cover

Nov 6Article

What You Can Build With React Native on Meta Quest

Get React Native app ideas for Meta Quest, inspired by Meta's $1.5M developer competition. Explore VR/MR concepts for meditation, games, and social apps.

cover

Oct 30Article

Using Expo Libraries on Horizon OS: A Guide to Compatibility

Learn how to use Expo libraries for React Native development on Meta's Horizon OS. This guide covers compatibility differences, what works out-of-the-box, and what requires specific alternatives like expo-horizon-core and expo-iap.

cover

Oct 8Article

Learn Once, Write for VR: A React Native Showcase for Meta's HorizonOS

Learn how a React Native app was built for Meta's HorizonOS, proving its viability for creating performant, cross-platform mixed reality experiences.

cover

Mar 19Tutorial

The Hard Way vs. The React Native AI SDK Way: Stop Writing Custom Modules for Every Model

Learn how React Native AI uses a unified provider model to switch between cloud and on-device LLMs without rewriting application logic, enabling reliable AI experiences online and offline.

cover

Mar 12Tutorial

Build Smarter Apps: Tool Calling & AI Orchestration Explained

Learn how on-device models in React Native can call tools, interact with external APIs, and return structured outputs you can use directly in application logic.

cover

Mar 5Tutorial

MLC LLM + React Native: On-Device AI Without the Pain

Learn how to run third-party on-device LLMs in React Native using MLC LLM. Choose your models, run them efficiently across platforms, and keep a unified JavaScript API with React Native AI.

cover

Feb 24Tutorial

Intelligent Fallbacks with Apple Intelligence in React Native

Learn how to use Apple’s built-in Foundation Models in React Native apps, reduce memory usage, and enable fast, fully on-device AI with React Native AI Apple.

cover

Feb 10Tutorial

What Is the React Native AI SDK? A Complete Intro & Quickstart

Learn why on-device AI matters for React Native apps, how local LLMs behave offline, and what problems React Native AI is designed to solve from day one.

cover

Jan 29Tutorial

Implementing an Android TurboModule with Kotlin

Learn how to implement a React Native TurboModule on Android, from the TypeScript spec and Codegen to the Kotlin implementation and package registration.

cover

Jan 19Tutorial

Working with Different Threads in Swift TurboModules

Learn how JavaScript, native module, background, and main threads interact in React Native TurboModules, and how to use GCD queues to run async work safely in Swift.

cover

Jan 9Tutorial

How to Add Type-Safe Constants to Swift TurboModules

Learn how to expose typed, immutable constants from a Swift TurboModule using Codegen, and get full end-to-end type safety between native and JavaScript.

cover

Dec 30Tutorial

Adding Event Emitters to Your TurboModule in Swift

Learn how to emit native events from a Swift TurboModule and subscribe to them in JavaScript, including proper memory management and Codegen integration.

cover

Dec 22Tutorial

Writing Your First TurboModule in Swift

Learn how to build a fully working TurboModule in Swift, integrate it with Codegen, and bridge it through Objective‑C inside an Expo app.