Build your first AR app
in an afternoon.
The ViroReact Starter Kit is a free, open source Expo and TypeScript project with seven working AR scenes ready to run on your device: plane detection, draggable 3D models, a physics bowling game, custom GLSL shaders, and geospatial anchors. Learn by tweaking real examples.
Up and running in minutes
Clone the repo, install, generate the native projects, and run on a physical device. Six of the seven demos work with zero configuration, straight out of the clone.
git clone https://github.com/ReactVision/expo-starter-kit-typescript.git
cd expo-starter-kit-typescript
yarn install
npx expo prebuild --clean
npx expo run:ios # or: npx expo run:androidSeven example scenes, ready to run
Each scene is a self-contained lesson in one ViroReact concept, from your first anchored model to physics and custom shaders. Open the source, change a value, rebuild, and see what happens.
Opening Scene
The navigation hub. Clickable 3D text buttons float in front of you, and tapping one pushes the matching demo through ViroARSceneNavigator. Every scene's Back button pops you home again, so it doubles as a working example of multi-scene navigation.
Auto Plane Scene
Automatic surface detection. ViroARPlane watches for horizontal planes at least 0.1m square and fires onAnchorFound when it locks on, anchoring a robot GLB model to the surface. Drag the robot and the FixedToPlane drag type keeps it glued to the plane.
Manual Plane Scene
You pick the surface. ViroARPlaneSelector shows every detected plane and waits for a tap; onPlaneSelected then places a dog GLB model exactly where you chose. The pattern to reach for when placement matters more than speed.
No Plane Scene
AR with no anchoring at all. A lime green ViroBox floats in space, styled with ViroMaterials.createMaterials, and the FixedToWorld drag type lets you move it freely through 3D world coordinates. No plane detection required.
Physics Demo
A playable AR bowling game. The scene turns on Earth gravity through physicsWorld, the alley and its invisible boundary walls are static ViroBox bodies, and the ball and pins are dynamic bodies with mass, friction, and restitution. Drag the ball with FixedDistance, let go to throw, and a keyed ViroNode remounts the pins for a clean reset.
Shaders Scene
Custom GLSL on real materials. Spheres show rim lighting, a crystal shell, ocean water, and glass, all built with shaderModifiers on ViroMaterials. A time uniform pushed through updateShaderUniform drives the animation, with a ViroSpotLight bringing out the surfaces.
Geospatial Anchor Scene
AR content anchored to real world GPS coordinates. Host an anchor at your current location, then resolve every anchor within 500m through the ReactVision Geospatial API. This is the only demo that needs API keys (ReactVision and Google Cloud, set in app.json); the other six run with zero configuration.
Browse the full source
Everything lives in one small repo: the scenes, the Expo Router setup, the Metro config that registers GLB and GLTF assets, and the README that documents every demo in depth.
The components you will learn
The Starter Kit covers the core of the ViroReact API. By the time you have poked through all seven scenes, these are the building blocks you will know how to use.
Mounts AR in the app and manages the scene stack. Every demo navigates with sceneNavigator.push() and returns with pop().
The root container of every AR scene. The Physics Demo configures gravity on it with physicsWorld={{ gravity: [0, -9.8, 0] }}.
3D text with styling, positioning, and onClick support. The whole menu system, plus every Back and Reset button, is built from it.
Loads external models. The kit ships robot and dog GLB files and registers .glb and .gltf with Metro so require() just works.
Built-in primitives. They cover the free floating box, the bowling alley, pins, ball, and the shader demo spheres.
Automatic plane detection and anchoring, with minWidth and minHeight thresholds and an onAnchorFound callback.
Shows detected planes and lets the user tap to pick one, reported through onPlaneSelected. Used for the dog model and the bowling alley.
The material system: diffuse colours, blend modes, and custom GLSL shaderModifiers, animated at runtime with updateShaderUniform.
Scene lighting. Ambient light keeps the 3D models visible everywhere; the spotlight gives the shader materials their highlights.
Groups objects into one transform. The Physics Demo keys a ViroNode so Reset remounts the ball and pins without touching the selected plane.
Already have an app?
Add ViroReact to an existing project
Already have a React Native or Expo project? Install the package directly and keep the Starter Kit around as a reference.
Read the docs
Full API reference, guides, and code samples, from basic scenes to Cloud Anchors and particle effects.
Starter Kit FAQ
What is the ViroReact Starter Kit?
Can I run the Starter Kit in Expo Go?
Do the demos need any API keys?
Which ViroReact components does the Starter Kit teach?
Does the Starter Kit work on both iOS and Android?
Can I use ViroReact in an existing app instead?
Clone it and start building
Seven working AR scenes, MIT licensed, in TypeScript. The fastest way to see ViroReact running before you wire it into your own project.
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.