aframe is a free, open source gaming project written in JavaScript and released under MIT. It has 17,635 GitHub stars, 4,396 forks and 338 open issues, and was last pushed 2 months ago. On this registry it ranks #9 of 18 tracked projects in Gaming, with 5 head-to-head comparisons available.

What is aframe?

A-Frame is an MIT-licensed JavaScript web framework built on top of three.js that lets anyone who can write HTML build browser-based 3D, augmented reality and virtual reality experiences running on desktop, mobile and any WebXR-capable headset.

What it is

A-Frame is a declarative framework for building browser-based 3D, AR and VR experiences. It lives in the web and WebXR ecosystem, sits as a thin layer on top of three.js, and is delivered as a JavaScript library used either from HTML markup or from a module bundler. The entity-component architecture gives every object in a scene a composable, reusable structure, while developers keep unlimited access to JavaScript, DOM APIs, three.js, WebXR and WebGL. Scenes can be authored entirely in HTML tags, which makes the framework readable and copy-pasteable for people who are not JavaScript engineers.

The concrete problem it solves is boilerplate. A-Frame handles the 3D and WebXR setup required to get a scene running across mobile, desktop and headsets, so a scene starts from a single markup tag rather than from renderer, camera, resize and device-session plumbing. It also replaces the plain three.js authoring path for teams that want a declarative, composable structure on top of that renderer without giving up direct access to it. Example projects and further scenes are published on the homepage, the A Week of A-Frame blog, and the WebVR Directory.

Key capabilities

  • Declarative HTML authoring: scenes are written in markup instead of imperative WebGL or three.js code.
  • Cross-platform output: one scene targets desktop, smartphones, and any headset compatible with a WebXR-capable browser.
  • Built-in components covering geometries, materials, lights, animations, models, raycasters, shadows, positional audio and tracked controllers.
  • Community components pulled in from the ecosystem, including particle systems, physics, multiuser, oceans, mountains, speech recognition and teleportation.
  • A built-in visual 3D inspector, opened from any A-Frame scene, with a workflow similar to browser developer tools and an interface similar to Unity.
  • Distribution as aframe.min.js (stable build 1.8.0) plus a dist/ folder for stable and master builds.
  • Entity-component architecture that keeps performance viable because the framework uses the DOM without touching the browser layout engine.

Who uses it and how

  • Web developers, VR and AR enthusiasts, educators, artists, makers and kids use it, since HTML authoring keeps the entry barrier low.
  • Game and gamedev teams use it as a game-engine option for browser-delivered 3D and metaverse scenes.
  • Teams targeting headsets such as Oculus Rift and Daydream, or mobile and desktop browsers, ship one scene across all of them through WebXR.
  • Front-end projects using Webpack or Vite import AFRAME as a module, while simpler projects drop in the script tag.
  • Developers testing in a headset run the local server over https and load the network URL through the hmd.link service.

Getting started

Install with npm install --save aframe or yarn add aframe, or include the stable build aframe.min.js from the 1.8.0 release directly in a page. For local development, clone the repository, run npm install, then npm start and open http://localhost:8080; use npm run start:https to test in VR, and npm run dist to generate builds.

How it compares

Three.js is the closest tool named in the project's own documentation, and A-Frame is positioned as a thin, declarative framework layered on top of it rather than a replacement for it. Teams that want direct renderer control work in three.js; teams that want composable HTML scenes and built-in WebXR handling while retaining access to three.js work in A-Frame.

When to use it — and when not to

A-Frame suits teams that want browser-first 3D and VR without writing WebXR boilerplate, and that are comfortable treating the framework as a thin layer over three.js for anything the built-in components do not cover. Headset testing requires serving over https and accepting a self-signed certificate warning, which adds friction to local development. Support runs through the community and StackOverflow under the aframe tag rather than a commercial channel, and the project carries 338 open issues, so teams needing guaranteed response times or a heavyweight native engine should look elsewhere.

project readme (upstream, from github) — read inline

A-Frame

A-Frame

A web framework for building browser based 3D, AR and VR experiences.

Coverage Status Downloads Version License

SiteDocsExamplesSchoolCommunity

Examples

Supercraft A-Painter Supermedium A-Blast A-Saturday-Night Musical Forest by @googlecreativelab

Find more examples on the homepage, A Week of A-Frame, and WebVR Directory.

Features

:eyeglasses: Virtual Reality Made Simple: A-Frame handles the 3D and WebXR boilerplate required to get running across platforms including mobile, desktop, and all headsets (compatible with a WebXR capable browser) just by dropping in <a-scene>.

:heart: Declarative HTML: HTML is easy to read and copy-and-paste. Since A-Frame can be used from HTML, A-Frame is accessible to everyone: web developers, VR and AR enthusiasts, educators, artists, makers, kids.

:electric_plug: Entity-Component Architecture: A-Frame is a powerful framework on top of three.js, providing a declarative, composable, reusable entity-component structure for three.js. While A-Frame can be used from HTML, developers have unlimited access to JavaScript, DOM APIs, three.js, WebXR, and WebGL.

:zap: Performance: A-Frame is a thin framework on top of three.js. Although A-Frame uses the DOM, A-Frame does not touch the browser layout engine. Performance is a top priority, being battle-tested on highly interactive WebXR experiences.

:globe_with_meridians: Cross-Platform: Build VR and AR applications for any headset compatible with a WebXR capable browser. Don't have a headset or controllers? No problem! A-Frame still works on standard desktop and smartphones.

:mag: Visual Inspector: A-Frame provides a built-in visual 3D inspector with a workflow similar to a browser's developer tools and interface similar to Unity. Open up any A-Frame scene and hit + + i.

:runner: Features: Hit the ground running with A-Frame's built-in components such as geometries, materials, lights, animations, models, raycasters, shadows, positional audio, tracked controllers. Get even further with community components such as particle systems, physics, multiuser, oceans, mountains, speech recognition, or teleportation!

Usage

Example

Build VR and AR scenes in the browser with just a few lines of HTML! To start playing and publishing now, remix the starter example on:

Remix

<html>
  <head>
    <script src="https://aframe.io/releases/1.8.0/aframe.min.js"></script>
  </head>
  <body>
    <a-scene>
      <a-box position="-1 0.5 -3" rotation="0 45 0" color="#4CC3D9"></a-box>
      <a-sphere position="0 1.25 -5" radius="1.25" color="#EF2D5E"></a-sphere>
      <a-cylinder position="1 0.75 -3" radius="0.5" height="1.5" color="#FFC65D"></a-cylinder>
      <a-plane position="0 0 -4" rotation="-90 0 0" width="4" height="4" color="#7BC8A4"></a-plane>
      <a-sky color="#ECECEC"></a-sky>
    </a-scene>
  </body>
</html>

With A-Frame's entity-component architecture, we can drop in community components from the ecosystem (e.g., ocean, physics) and plug them into our objects straight from HTML:

See example

<html>
  <head>
    <script src="https://aframe.io/releases/1.8.0/aframe.min.js"></script>
    <script src="https://cdn.jsdelivr.net/gh/c-frame/[email protected]/dist/aframe-particle-system-component.min.js"></script>
    <script src="https://cdn.jsdelivr.net/gh/c-frame/[email protected]/dist/aframe-extras.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@fern-solutions/aframe-sky-background/dist/sky-background.umd.min.js"></script>
  </head>
  <body>
    <a-scene>
      <a-entity id="rain" particle-system="preset: rain; color: #24CAFF; particleCount: 5000"></a-entity>

      <a-entity id="sphere" geometry="primitive: sphere"
                material="color: #EFEFEF; shader: flat"
                position="0 0.15 -5"
                light="type: point; intensity: 15.7"
                animation="property: position; easing: easeInOutQuad; dir: alternate; dur: 1000; to: 0 -0.10 -5; loop: true"></a-entity>

      <a-entity id="ocean" ocean="density: 20; width: 50; depth: 50; speed: 4"
                material="color: #9CE3F9; opacity: 0.75; metalness: 0; roughness: 1"
                rotation="-90 0 0"></a-entity>

      <a-sky-background top-color="#EBEBF5" bottom-color="#B9B9D2"></a-sky-background>

      <a-entity id="light" light="type: ambient; color: #888"></a-entity>
    </a-scene>
  </body>
</html>

Builds

To use the latest stable build of A-Frame, include aframe.min.js:

<head>
  <script src="https://aframe.io/releases/1.8.0/aframe.min.js"></script>
</head>

To check out the stable and master builds, see the dist/ folder.

npm

npm install --save aframe
# Or yarn add aframe
import AFRAME from 'aframe';  // e.g., with Webpack or Vite.

Local Development

git clone https://github.com/aframevr/aframe.git  # Clone the repository.
cd aframe && npm install  # Install dependencies.
npm start  # Start the local development server.

And open in your browser http://localhost:8080.

If you want to test the examples in VR, you need to run it with https:

npm run start:https

Look at the "On Your Network (IPv4)" line in the console, and copy and paste the url to https://hmd.link service. Then open the browser in your headset and type hmd.link in the address bar then click on the copied url that will show up if you're connected to the same network as your machine. You will see a message about the page being dangerous because we're using a self-signed certificate, you can ignore that warning and continue to the page.

Generating Builds

npm run dist

Questions

For questions and support, ask on StackOverflow.

Stay in Touch

And get in touch with the maintainers!

Contributing

Get involved! Check out the Contributing Guide for how to get started.

You can also support development by buying a gorgeous A-Frame t-shirt with exclusive designs

License

This program is free software and is distributed under an MIT License.

Frequently asked questions

Is aframe free to use?

aframe is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does aframe do?

:a: Web framework for building virtual reality experiences.

What is aframe written in?

aframe is primarily written in JavaScript. Its source is publicly available at https://github.com/aframevr/aframe, and it has 17,635 GitHub stars.