About Let VR
What this site is
Let VR is a reference site about WebXR and three.js. Each page takes a single concept — how an immersive session starts, how controller input is read, how a hand pose becomes a pinch gesture — and treats it properly: an interactive demo you can tune with real parameters, followed by an explanation of what is happening underneath.
Most WebXR material assumes you already own a headset. This site does not. Every demo is written for an ordinary desktop browser first, driven by mouse and keyboard, and switches to a real immersive session only when the device you are reading on supports one.
Who writes it
This is an independent site, written and maintained by one developer. It is not affiliated with the W3C Immersive Web Working Group, the three.js project, or any headset manufacturer.
If something here is wrong, incomplete, or out of date, please say so: [email protected].
What the demos do and do not show
Each demo simulates the visible consequence of a concept rather than the mechanism underneath it. A desktop browser cannot lower a GPU's shading rate or hand you a real depth buffer from a room, so the demos reproduce what you would see if it did. Where that distinction matters, the page says so.
The parameters on each demo are the ones the real API exposes, with the same ranges. Dragging a slider to an extreme is meant to be informative: most of these values have a setting that looks fine in a screenshot and is unusable in a headset, and seeing where that line falls is most of the point.
How it is built
Let VR is a static site built with Astro and deployed on Cloudflare Pages. The demos are plain JavaScript and three.js running in your browser — nothing is sent to a server for processing.
Every explanation is server-rendered HTML. Turn JavaScript off and the demo goes away while the whole written page remains, which is deliberate: content that only exists inside a canvas cannot be searched, quoted, or read on a bad connection.
The site is bilingual in English and Chinese, and both versions are written rather than translated field by field. Where an explanation reads better with a different example in one language, it gets one.
How pages get updated
Compatibility tables carry the date they were last checked, because they expire. A statement about what shipped in which browser is accurate for a period and then quietly stops being accurate, and an undated one gives you no way to tell which you are reading.
When a page changes materially, the date at the top changes with it. Corrections sent by readers are the main source of those changes, which is the honest answer to how a one-person site keeps a fast-moving API current: it does not, on its own.