A-Frame

A-Frame and WebXR-First Frameworks

A-Frame 172,534 (github.com/aframevr/aframe (https://github.com/aframevr/aframe 17,644 ), MIT, 1.8.0 of June 2026) is "a thin framework on top of three.js 30,815 " for VR, AR and 3D: a scene is HTML custom elements whose attributes are components, and it adds the WebXR session handling and the enter-VR button itself. It does not use the vanilla package: its dependency is super-three, a maintained fork (github.com/supermedium/three.js) that version 1.8.0 pins at r184.

Three BookNest books in A-Frame markupHTMLLive
<script src="https://cdn.jsdelivr.net/npm/aframe@1.8.0/dist/aframe-master.min.js"></script>
<style>body { margin: 0 }</style>
<a-scene embedded style="width: 480px; height: 150px" background="color: #eceff1">
  <a-entity camera="fov: 35" position="0 0.5 3.4"></a-entity>
  <a-box position="0 0 0" width="3" height="0.06" depth="0.8" color="#8a6240"></a-box>
  <a-box position="-0.35 0.45 0.1" color="#1f5f8b"
    width="0.15" height="0.84" depth="0.62"></a-box>
  <a-box position="-0.1 0.47 0.1" color="#5b3f99"
    width="0.18" height="0.89" depth="0.62"></a-box>
  <a-box position="0.15 0.5 0.1" color="#e09a10" width="0.13" height="0.94" depth="0.62"
    animation="property: rotation; to: 0 0 -12; dur: 600"></a-box>
  <a-entity light="type: directional; intensity: 2.5" position="2 3 4"></a-entity>
  <a-entity light="type: hemisphere; groundColor: #8d6e63; intensity: 1.2"></a-entity>
</a-scene>
<script>
const scene = document.querySelector('a-scene');
scene.addEventListener('loaded', () => {
  console.log(AFRAME.version, 'on three r' + AFRAME.THREE.REVISION);
  setTimeout(() => { window.__done = true; }, 1000);   // let the animation finish
});
</script>
Browser output of Listing 5.60
Browser output of 60
Output of 60
A-Frame Version: 1.8.0 (Date 2026-06-23, Commit #47a08f1c)
THREE Version (https://github.com/supermedium/three.js): 184
1.8.0 on three r184

A-Frame logs its own banner and adds its enter-VR button (bottom right) unasked. Because AFRAME.THREE is the fork, mixing in add-ons from three@0.186.1 risks version mismatches: use A-Frame's components, or add-ons of its revision. In the R3F 32,576 world, @react-three/xr (pmndrs, 6.6.30) plays the same role, and Babylon.js 89,603 has WebXR built in (WebXR).