Open-source and written for JavaScript and TypeScript, Babylon.js is a 3D engine that renders real-time scenes in the browser through WebGL or WebGPU. Physics, a GUI system and WebXR support come from the same project, so teams use it for browser games and product configurators, and for simulations too.

The standard Engine class renders through WebGL. WebGPU needs the separate WebGPUEngine class and an awaited initAsync() call, according to the official documentation (2026), which contradicts guides that call WebGPU the default.

Microsoft employees released the project in 2013. These days the Apache License 2.0 covers it, and that permits commercial use.

What Is Babylon.js?

Everything runs on an HTML canvas, and the engine draws to it with WebGL or WebGPU. Physics, a GUI system, animation and WebXR support ship in the same package set, so a first scene needs no extra libraries.

The engine’s source is TypeScript (86.8% of the repository, according to GitHub) and gets compiled to plain JavaScript for end users. You can write your own project in either language.

Inside the engine you get a scene graph with meshes, cameras and lights, plus physically based rendering (PBR) materials and a node-based material editor. Animation, particle systems and post-processing are there as well. Physics goes through Havok, the GUI system is built in, and the Playground, Inspector and Sandbox handle tooling.

Is Babylon.js a game engine or a library?

Its own GitHub description calls it a game and rendering engine delivered as a JavaScript framework.

Wikipedia says JavaScript library and 3D engine, and tutorials swap between all three words. The wording matters less than the scope. A thin renderer stops at drawing, while Babylon.js carries physics, GUI and debugging tools inside the same project.

It isn’t a visual game editor, though. The Babylon.js Editor is a separate desktop application built by community member Julien Moreau Mathis (Windows Developer Blog, March 2026), and the engine itself is driven by code.

Who Created Babylon.js and What License Does It Use?

David Catuhe created Babylon.js at Microsoft in 2013. The engine is released under the Apache License 2.0, which allows commercial use and modification, and you can redistribute it without paying royalties.

Catuhe started it as a side project with fellow Microsoft employee David Rousset. The first release shipped under the Microsoft Public License before the project moved to Apache 2.0 (Wikipedia).

Development happens in the BabylonJS/Babylon.js repository on GitHub, and the README links to an official community forum for support. Outside developers can contribute through published contributing guidelines and a code of conduct. Some parts came from the community too, namely the Babylon.js Editor and the Playground’s 9.0 upgrade (Windows Developer Blog, 2026).

Is responsive design still a top priority?

Explore the latest responsive design statistics: adoption rates, performance impact, user behavior, and trends shaping modern websites.

See the Numbers →

Version history

Babylon.js gets one major version a year, released at the end of March in 2025 and 2026, plus frequent point releases in between. The project forum describes each big annual release as its main marketing moment, and GitHub lists more than 640 releases in total.

  • The first release came in 2013, built by Catuhe and Rousset (Wikipedia)
  • Version 5.0 landed in May 2022 with a backward-compatible WebGPU backend (Babylon.js documentation)
  • Version 8.0 shipped on March 27, 2025, with core shaders in both GLSL and WGSL (Windows Developer Blog)
  • On March 26, 2026, version 9.0 added clustered lighting and volumetric lighting, along with the Frame Graph system (Windows Developer Blog)

How Does Babylon.js Render 3D Graphics?

Every frame gets drawn onto an HTML canvas inside a render loop that calls scene.render(). The standard Engine class renders through WebGL, and a separate WebGPUEngine class runs the same scene code on WebGPU.

An Engine object binds to the canvas and talks to the browser’s WebGL layer, which does the GPU work. The README sample pairs it with engine.runRenderLoop and a resize handler that keeps the canvas sized.

The backend choice comes down to the class you pick. For WebGL that’s Engine, and its constructor has a disableWebGL2Support option. WebGPU goes through WebGPUEngine, created with new WebGPUEngine(canvas) and followed by await engine.initAsync(), and it has been available since version 5.0 in May 2022. Shaders are a separate matter. The core engine shaders exist in both GLSL and WGSL, and a Node Material generates GLSL unless its shaderLanguage is set to WGSL.

WebGPU adds compute shaders and lower-level control over graphics resources, according to the Babylon.js documentation.

Some third-party guides call WebGPU the default renderer. The official documentation says otherwise: migrating means switching to the WebGPUEngine class and awaiting initialization, while WebGL stays supported side by side for the foreseeable future (as of October 2026).

There’s a catch. A browser without WebGPU cannot run the WebGPU engine, and an existing WebGPU scene cannot be swapped to WebGL afterwards.

Pick the engine before the scene and its resources exist, and keep a WebGL path for older browsers.

Which Features Are Built Into Babylon.js?

The basics of a 3D web project live in one place: scene graph, PBR materials, animation, particle systems, post-processing, a GUI library and audio. Physics gets added through an official plugin.

Scene and rendering features

Scene objects include lights, cameras, meshes, sprites, layers, animations and audio clips (babylonjs.com specifications). Interaction runs through ray casting, behaviors and mesh picking, and materials come as PBR, standard or node-based. Version 9.0 brought clustered lighting, volumetric lighting and area lights with emission textures (Windows Developer Blog, 2026).

The built-in GUI system supplies the user interface controls a game or viewer needs, such as buttons and panels.

Particle systems gained flow maps and gravity attractors in 9.0.

Physics with Havok

Havok runs as a WebAssembly module and is free to use under the MIT license, according to the Babylon.js documentation.

The integration has two parts. The @babylonjs/havok package holds the engine, and the HavokPlugin class connects it to a scene. Version 8.0 added Havok’s character controller (Windows Developer Blog, 2025).

Havok also needs WebAssembly SIMD, so iOS versions before 16.4 are out.

The official specifications page lists Havok as the physics engine. Older write-ups, including the Wikipedia article, still describe physics through Cannon.js and Oimo only, and the ES6 documentation marks the Ammo.js, Cannon.js and Oimo.js plugins as deprecated Physics V1 plugins.

Asset formats and glTF

The loader documentation lists glTF first, including its binary .glb form, and the Khronos Group maintains that specification. The README also points to Khronos tooling for producing glTF files and to a Blender exporter for the engine’s own .babylon format.

  • .gltf and .glb
  • .usd, .usda, .usdc and .usdz
  • .obj
  • .stl
  • .ply, .compressed.ply, .splat and .spz (Gaussian splatting)

Calling registerBuiltInLoaders, imported from @babylonjs/loaders/dynamic, downloads each importer only when a model of that type first loads.

The UMD package does not support that dynamic loading, so it needs the static import. The documentation otherwise advises against the static import because every loader then lands in the main bundle.

Which Developer Tools Come With Babylon.js?

The Babylon.js editor and inspector

Prototyping happens in the Playground. Debugging goes through the Inspector, and the Node Material Editor covers shaders. For a quick look at a model there’s the Sandbox, and the Babylon.js Editor handles scene building on the desktop.

  • The Playground is a browser editor that runs code instantly and shares scenes by link. Version 9.0 added multi-file editing, ESM module imports and local session history, contributed by community member knervous (Windows Developer Blog, 2026).
  • The Inspector opens with scene.debugLayer.show() and lets you select and edit scene objects, node materials included. Version 9.0 ships Inspector v2.
  • The Node Material Editor builds GPU shaders by connecting blocks instead of writing GLSL or WGSL, and saves work as immutable snippet URLs. The WebGL or WebGPU choice made in the editor is not stored in the material’s JSON file, so the target engine gets chosen at runtime (Babylon.js documentation).
  • Drag and drop .babylon and glTF files into the Sandbox to check how a model renders (GitHub README).
  • Microsoft’s developer blog presents the Babylon.js Editor, a desktop application, as the more artist-friendly way to build scenes.

The Playground is also where the documentation sends you to test WebGPU, and it notes that the WebGL and WebGPU demos differ only in initialization.

For a first hour with the engine, the Playground beats any local setup. No tool here replaces the engine API, though. They shorten setup, shader work and debugging, and application logic still lives in code.

Babylon.js on Mobile, XR and Native Platforms

Desktop and mobile browsers are the main target, and XR headsets work through WebXR. For native apps there are two companion projects, Babylon Native and Babylon React Native. Everything else builds on the browser, according to the Babylon.js cross-platform documentation.

Babylon.js wraps the WebXR device API in two helpers. The basic helper creates the XR camera and features manager and gives you enter and exit calls. The default helper adds an enter-XR button, controllers, pointer selection and teleportation through scene.createDefaultXRExperienceAsync(), which makes it the shorter route.

Sessions open in immersive VR with a local-floor reference space. One option, uiOptions.sessionMode set to immersive-ar, switches to AR.

In a browser without XR support, the basic helper throws and the default helper returns no baseExperience, so check for it before showing an XR button.

WebGPU rendering inside XR is experimental as of October 2026. It needs a WebGPUEngine created with xrCompatible set to true and the WebXR Layers feature enabled, and the underlying WebXR/WebGPU Binding is an Editor’s Draft dated June 15, 2026, per a Babylon.js forum thread.

Outside the browser, the options look like this.

RouteTargetsLimits
Babylon NativeWindows, macOS, iOS, Android, LinuxPublic preview, source only; no Inspector or Node Material Editor
Babylon React NativeAndroid, iOS (Windows experimental)Touch input and a single view only
Web code in a wrapperIonic, Electron, WebView in React NativeSame code as the web build

Babylon Native is MIT-licensed and aims to run the same JavaScript as web apps inside native ones. Its README calls the project a public preview and lists audio, particles and serializers as not yet supported.

Babylon React Native sits on top of Babylon Native. Its README warns that React Native on JavaScriptCore or Hermes runs without JIT, which can slow script-heavy scenes, and Expo gets no official support.

Ionic is the documented route for one web codebase that ships as a progressive web app and as mobile apps, while Electron covers desktop.

What Is Babylon.js Used For, and Where Does It Fall Short?

It fits browser games, product configurators, simulations and XR experiences that need physics, GUI and debugging tools in one engine. A page that shows one model and needs the smallest bundle possible is a poor fit.

Projects where Babylon.js fits

In May 2014, Microsoft and Ubisoft released Assassin’s Creed Pirates as an HTML5 browser game built on Babylon.js, the first web game on the engine (MCV).

Product configurators are one use. The documentation’s Vaporwear dev story embeds a configurator in an existing site built with WordPress and React. Wikipedia’s list of documented uses also includes medical education, military training and historic-site models. Large scenes got attention in 9.0, which added Large World Rendering with a floating origin, plus 3D Tiles support (Windows Developer Blog, 2026).

When Babylon.js is the wrong choice

Weight is the first constraint. The documentation’s own sample shrinks from about 2.3 MB with the bundled package to about 700 KB with ES6 tree shaking.

Three.js’s core measures 184.9 kB gzipped in version 0.186.1 (Bundlephobia, 2026). The two figures use different measuring bases, so no like-for-like number exists in the published sources.

In its favor, physics, GUI, the Inspector and the Node Material Editor ship with the engine. Scene code stays the same across the WebGL and WebGPU engines after initialization, the source is TypeScript with bundled type declarations, and native and XR routes come from one scene codebase.

Against it, bundles run larger than a lean renderer’s unless imports are narrowed file by file. The install base and community output are smaller than Three.js has, Babylon Native lacks audio, particles and the Inspector, and tutorials mix current and deprecated APIs.

That last point shows up in physics. The Wikipedia article still describes Cannon.js and Oimo.js plugins, while the official specifications page lists Havok and the ES6 documentation marks AmmoJSPlugin, CannonJSPlugin and OimoJSPlugin as deprecated Physics V1 plugins in favor of Havok.

Where older sources disagree with the documentation, follow the documentation. New projects start on Havok.

My rule of thumb: if the scene needs physics, GUI and debugging tools in one place, Babylon.js saves integration work. If it shows a single model on a marketing page, a lean renderer ships less code.

How Does Babylon.js Compare With Three.js, PlayCanvas and Unity?

Babylon.js wins when physics, GUI and debugging tools must live in one engine. Three.js wins on install base and a lean core, and PlayCanvas wins when a browser-based editor drives the workflow.

AttributeBabylon.jsThree.jsPlayCanvas
ScopeFull engine with physics, GUI, toolsLightweight general-purpose 3D libraryGame engine plus browser-based Editor
LicenseApache 2.0MITMIT
LanguageTypeScript sourceJavaScriptTypeScript or JavaScript scripts
WebGPU pathWebGPUEngine, chosen by youWebGPURenderer with WebGL 2 fallbackBuilt on WebGL2 and WebGPU
Weekly npm downloads369,374 (@babylonjs/core)20,521,33497,339

Download counts come from the npm registry for October 3 to 9, 2026. The legacy babylonjs package is tallied separately, so any single Babylon.js download figure depends on which package it counts.

Three.js describes itself as a lightweight, general-purpose 3D library, so it renders and leaves physics and interface layers to add-ons. Its install base is far larger than that of @babylonjs/core.

Third-party comparisons sometimes call the Three.js WebGPURenderer production-ready, but the Three.js manual still labels it experimental and says some scenes run better on WebGLRenderer (as of October 2026).

The manual adds that WebGPURenderer falls back to a WebGL 2 backend automatically and that WebGLRenderer gets no larger new features. Babylon.js handles the same choice by letting you pick the engine class yourself.

PlayCanvas pairs its engine with a browser-based Editor and integrates the ammo.js physics engine, where Babylon.js ships Havok.

For a 3D application with physics, GUI and built-in debugging, I’d go with Babylon.js. A creative site where bundle size and community examples matter most is Three.js territory. PlayCanvas makes sense when artists and developers share a browser editor, and Unity does when the web is just one build target among several.

Unity sits in a different category. Its Web option publishes content as JavaScript programs that use WebAssembly and the WebGL rendering API (Unity 6.0 manual), which adds an export step that a web-native engine skips.

How to Start a Babylon.js Project

A first scene needs very little: a canvas, an Engine, a Scene with a camera, a light and a mesh, and a running render loop. Here’s the order.

  1. Install the modular package with npm install @babylonjs/core, which also adds the TypeScript declarations.
  2. Put a full-size canvas element in the HTML page.
  3. Create an Engine on that canvas, then a Scene from the engine.
  4. Add a camera, a light and a mesh, importing the builder module for the shape you create so its method exists.
  5. Start engine.runRenderLoop with a function that calls scene.render().
  6. Call engine.resize() from a window resize listener.

The render loop in step 5 is the engine’s take on a JavaScript game loop: one function that runs every frame.

For quick experiments, skip the steps entirely. The Playground only needs a createScene function that returns a scene. Its New button inserts a basic function with a camera, and delayCreateScene lets you create the camera later (Babylon.js documentation).

On packages, the modular route is @babylonjs/core, in the @babylonjs scope. It’s tree-shakeable and comes with add-ons such as @babylonjs/loaders, @babylonjs/gui and @babylonjs/havok. The older babylonjs package bundles the whole library. A CDN script is fine for learning and small experiments only, per the documentation and README.

The GitHub README lists npm install babylonjs first, while the documentation recommends the ES6 packages for tree shaking. With a bundler, use @babylonjs/core.

TypeScript needs no extra typings package with @babylonjs/core. With the legacy package, add babylonjs to the types array in tsconfig.json (README).

Newcomers hit the same problems early on.

  • Importing from the package index follows every import and pulls the whole library into the bundle
  • A missing side-effect import (a mesh builder, standardMaterial, physicsEngineComponent) surfaces as a TypeError saying a method is not a function
  • The CDN Inspector does not work with ES6 builds, so install @babylonjs/inspector and import it for side effects

Since version 7.23, the documentation describes pure imports that register optional features without side effects, which reduces the manual import list.

One popular tutorial verifies the install with babel –version, which prints the Babel version, not Babylon.js. Run npm ls @babylonjs/core instead.

Babylon.js FAQ

Does Babylon.js work with React, Vue and Angular?

Yes. The documentation says Babylon.js fits into just about any web workflow and includes a dev story that embeds a scene in a React.js site.

The pattern is the same everywhere. The framework owns a canvas element and the Babylon.js Engine renders into it.

Do I need to know WebGL or shader programming?

Not really. The Node Material Editor builds shaders from connected blocks, so writing GLSL or WGSL is optional.

You do need working JavaScript or TypeScript. The Playground gets a first scene running from a single createScene function.

Can Babylon.js run in Node.js?

Yes, without a screen. The NullEngine runs scenes with no rendering, and the documentation’s Node.js example uses it to load and decode a Draco-compressed .glb file on the server.

Where can I get help with a Babylon.js problem?

The official forum, linked from the GitHub README, is the main channel, and Babylon Native questions are tagged babylon-native there.

Post a Playground link with the question. A reproducible scene gets answered faster than a code paste.

What to Prototype Before Committing to Babylon.js

Build one scene around your heaviest asset, bundle it for production, and run it on the weakest device you must support. That single test shows whether Babylon.js fits, because bundle weight and graphics backend are the two variables that change from device to device.

  • Production bundle size with file-level imports
  • Engine class on the lowest-end target device
  • WebGPUEngine on newer devices, then Havok and loaders

That order puts the cheapest failure first. A bundle that misses the load budget ends the evaluation before any backend work starts.

Choosing Babylon.js trades a heavier build for physics, GUI and debugging tools that arrive integrated, so the prototype should exercise at least one of them.

The advice holds as of October 11, 2026, and changes once WebGPU rendering in XR leaves experimental status.

Bogdan Sandu
Latest posts by Bogdan Sandu (see all)