pmndrs
xr
TypeScript

๐Ÿคณ VR/AR for react-three-fiber

Last updated Jul 1, 2026
2.6k
Stars
201
Forks
62
Issues
0
Stars/day
Attention Score
85
Language breakdown
TypeScript 81.1%
JavaScript 17.5%
Dockerfile 1.3%
HTML 0.1%
โ–ธ Files click to expand
README

xr

Turn any R3F app into an interactive immersive experience.


NPM NPM Twitter Discord

npm install three @react-three/fiber @react-three/xr@latest

What does it look like?

| A simple scene with a mesh that toggles its material color between "red" and "blue" when clicked through touching or pointing. | recording of interacting with the code below | | ---------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |

import { Canvas } from '@react-three/fiber'
import { XR, createXRStore } from '@react-three/xr'
import { useState } from 'react'

const store = createXRStore()

export function App() { const [red, setRed] = useState(false) return ( <> <button onClick={() => store.enterAR()}>Enter AR</button> <Canvas> <XR store={store}> <mesh pointerEventsType={{ deny: 'grab' }} onClick={() => setRed(!red)} position={[0, 1, -1]}> <boxGeometry /> <meshBasicMaterial color={red ? 'red' : 'blue'} /> </mesh> </XR> </Canvas> </> ) }

How to enable XR for your @react-three/fiber app?

  • const store = createXRStore() create a xr store
  • store.enterAR() call enter AR when clicking on a button
  • <XR>...</XR> wrap your content with the XR component
... or read this guide for converting a react-three/fiber app to XR.

Tutorials

External Tutorials

Roadmap

  • ๐Ÿคณ XR Gestures
  • ๐Ÿ•บ Tracked Body

Migration guides

Sponsors

This project is supported by a few companies and individuals building cutting-edge 3D Web & XR experiences. Check them out!

Sponsors Overview

ยฉ 2026 GitRepoTrend ยท pmndrs/xr ยท Updated daily from GitHub