API

Feature Comparison — Babylon Lite vs Babylon.js

This page maps the feature gap between Babylon Lite and Babylon.js (BJS), category by category. It is the honest, detailed view of what Lite supports today, what is partially supported, and what it intentionally won't support — so you can decide whether Lite fits your project.

Babylon Lite is not a replacement for Babylon.js. The two engines move forward side by side. Lite optimizes for the smallest bundle and the highest performance on WebGPU; Babylon.js optimizes for the broadest, most mature feature set with WebGL and WebGPU support. Closing the gap below is our top priority — features land in Babylon.lite as isolated, tree-shakable modules, so the engine grows without bloating your bundle.

Legend

SymbolMeaning
✅
Supported
⚡
Partial — a subset is implemented; see notes
—
Not yet available
🚫
Won't support — out of scope by design
★
Lite advantage — area where Lite leads Babylon.js

<!-- AUTOGEN:feature-comparison START — generated from lab/lite/docs/feature-comparison.html by scripts/gen-feature-comparison.ts. Do not edit between these markers by hand. -->

Rendering API

FeatureLiteBJSNotes
★ WebGPU
✅
✅
Lite is WebGPU-exclusive — zero abstraction overhead
WebGL 2.0
🚫
✅
Not planned — WebGPU only by design
WebGL 1.0
🚫
✅
Not planned — WebGPU only by design
4× MSAA
✅
✅
 
Depth / Stencil Buffer
✅
✅
depth24plus-stencil8
HDR Rendering
✅
✅
 
Tone Mapping
✅
✅
Image processing pipeline
Exposure / Contrast
✅
✅
Via ImageProcessingConfig
Canvas Resize Handling
✅
✅
Automatic per-frame
Draw Call Counting
✅
✅
 
EffectRenderer / EffectWrapper
✅
✅
Scenes 74-76 — direct swapchain renderer plus RTT task path
Fullscreen Effect Passes
✅
✅
Single fullscreen triangle, no vertex/index buffers
Effect RenderTarget Output
✅
✅
Scene 75 — render effect into texture, then use it in a material
Effect Texture Bindings
✅
✅
Scene 76 — Texture2D + sampler binding via setEffectTexture()
Frame-Graph RTT Material Override
✅
✅
Scene 110 — offscreen pass renders selected meshes with an override material and camera, then samples the RTT in the main pass

Materials

FeatureLiteBJSNotes
PBR Metallic-Roughness
✅
✅
Full GGX / Smith / Schlick BRDF
PBR Specular-Glossiness
✅
✅
KHR_materials_pbrSpecularGlossiness
Standard Material (Blinn-Phong)
✅
✅
Diffuse, specular, ambient, emissive
Mesh Vertex Colors
✅
✅
PBR automatic; Standard via enableStandardVertexColors() opt-in (Scene 267)
Background Material
✅
✅
Ground plane + skybox rendering
Normal Mapping
✅
✅
Cotangent frame, invertNormalMapX
Emissive Textures
✅
✅
 
Occlusion (AO) Maps
✅
✅
ORM texture packing
Metallic Reflectance Map
✅
✅
metallicReflectanceTexture support
Specular Anti-Aliasing
✅
✅
getAARoughnessFactors when normal map present
Alpha Blend / Alpha Test
✅
✅
OPAQUE, BLEND, MASK modes
Double-Sided Rendering
✅
✅
 
Opacity Textures
✅
✅
With depth-write disabled for transparent
Bump / Height Mapping
✅
✅
 
Lightmap Textures
✅
✅
Standard material UV2; PBR via opt-in enablePbrLightmap() + setPbrLightmap()
Ambient Textures
✅
✅
 
Reflection Textures
✅
✅
Spherical + planar coord modes
UV Scaling / Offset
✅
✅
 
UV2 Channel
✅
✅
For lightmaps and AO
Node Material
✅
✅
NME snippet parser with lab-proven core, compatibility, PBR, math/modes, color, UV/texture/procedural, normal/screen/depth/matrix/scene-state, loop, and storage blocks (Scenes 60-89)
Shader Material
✅
✅
WGSL-only ShaderMaterial with typed uniforms, samplers, defines, alpha blend/test (Scenes 159-163)
Material Plugins
✅
✅
Opt-in enableMaterialPlugins() — custom WGSL injection on PBR/Standard, zero bundle cost when unused (Scene 217)
Material Stencil
✅
✅
Opt-in enableMaterialStencil() — per-material stencil write/test (mask & discard) on Standard/PBR/Shader; zero bundle cost when unused
PBR Clear Coat
✅
✅
Scene 19
PBR Sheen
✅
✅
Scene 21
PBR Anisotropy
✅
✅
Scene 23
PBR Subsurface / Translucency
✅
✅
Scene 26 — thickness map, translucency, tint
Material Variants (KHR_materials_variants)
✅
✅
Scene 27 — runtime variant selection
PBR Iridescence
✅
✅
Native PBR thin-film iridescence (Scene 177); NME iridescence remains covered separately by Scene 87
Grid Material
✅
✅
Procedural GridMaterial parity with @babylonjs/materials (Scene 213)

Lights

FeatureLiteBJSNotes
Hemispheric Light
✅
✅
 
Directional Light
✅
✅
 
Point Light
✅
✅
 
Spot Light
✅
✅
With cone angle + exponent falloff
Multi-Light (N lights)
✅
✅
Dynamic UBO packing
Per-Mesh Light Inclusion
✅
✅
Scene 111 — includedOnlyMeshIds-style light selection across Standard, PBR, NME, and supported shadow generators
Light Intensity / Color
✅
✅
Diffuse + specular per light
Area Lights
—
✅
 

Cameras

FeatureLiteBJSNotes
Arc Rotate Camera
✅
✅
Orbit / zoom / pan / inertia
Auto-Framing (fitToScene)
✅
✅
Default camera for loaded models
Free Camera
✅
✅
Scene 18, 24, 25 — WASD/arrow controls
Geospatial Camera
✅
✅
Globe-orbit camera (center/yaw/pitch/radius) with fly-to + controls (Scene 225)
Orthographic Projection
✅
✅
Any camera via enableOrthographicCamera() opt-in; live/animatable bounds, aspect-derived or off-center (Scene 268)
Follow Camera
—
✅
 
Universal Camera
—
✅
 
VR / XR Camera
—
✅
 
Device Orientation Camera
—
✅
 

Mesh & Geometry

FeatureLiteBJSNotes
Sphere
✅
✅
Configurable segments
Box
✅
✅
 
Torus
✅
✅
Configurable thickness/tessellation
Ground Plane
✅
✅
 
Ground from Heightmap
✅
✅
GPU texture → vertex displacement
Thin Instances
✅
✅
add / remove / set / flush API
Observable Transforms
✅
✅
ObservableVec3 auto-dirty on mutation
Transform Hierarchy
✅
✅
Version-based lazy world matrix, IWorldMatrixProvider on all entities
Clone Transform Node
✅
✅
 
Cylinder
✅
✅
Cylinder / cone / prism via diameterTop/Bottom
Plane
✅
✅
size or width/height
Disc / Ring
✅
✅
Configurable arc & tessellation
Polyhedra
✅
✅
15 BJS presets, flat & smooth normals
Ribbon / Tube / Extrude
✅
✅
Path3D parallel-transport frames, closePath/closeArray, cap modes
CSG / CSG2 (Boolean Ops)
✅
✅
Scenes 90/91 — legacy mesh CSG plus Manifold-backed CSG2 subtract, intersect, and union/add operations
Instanced Meshes
🚫
✅
Won't support BJS InstancedMesh API; use thin instances instead

Skeleton & Animation

FeatureLiteBJSNotes
Skeletal Animation
✅
✅
GPU bone textures (rgba32float)
4-Bone Skinning
✅
✅
JOINTS_0 / WEIGHTS_0
8-Bone Skinning
✅
✅
JOINTS_1 / WEIGHTS_1
Morph Targets
✅
✅
Up to 4 targets, position + normal deltas
Animation Groups
✅
✅
play / pause / stop / seek / loop / speed
Linear Interpolation
✅
✅
 
Step Interpolation
✅
✅
 
Cubic Spline
✅
✅
 
Deterministic Seek
✅
✅
Fixed-timestep for parity testing
Animation Blending
✅
✅
Weighted blend, cross-fade, and additive animation groups (Scenes 155-158)
Animation Masking
✅
✅
AnimationGroupMask include/exclude target-name filtering; opt-in, zero bundle cost when unused (Scene 251)
Animation Events
—
✅
 
Animation Weights
✅
✅
AnimationGroup weight control through AnimationManager
Vertex Animation Textures (VAT)
✅
✅
Baked skeletal animation played on the GPU, incl. per-instance thin-instanced VAT (Scenes 218-219)

Environment & IBL

FeatureLiteBJSNotes
Babylon .env Files
✅
✅
RGBD cubemap decode
HDR Panoramas (.hdr)
✅
✅
Equirect → cubemap → prefiltered IBL
Image-Based Lighting
✅
✅
Split-sum approximation
BRDF Lookup Table
✅
✅
Pre-baked PNG, RGBD compute decode
Spherical Harmonics
✅
✅
Irradiance from environment
DDS Cube Skybox
✅
✅
 
Cubemap Skybox
✅
✅
6-face cube texture
HDR Skybox
✅
✅
 
Ground + Skybox Background
✅
✅
Fresnel ground opacity, premultiplied alpha
Fog (Linear / Exp / Exp²)
✅
✅
 
Environment Rotation
✅
✅
 
Environment Skybox Blur
✅
✅
Continuous fractional cubemap LOD
Reflection Probes
—
✅
 

Shadows

FeatureLiteBJSNotes
ESM Shadows (Directional)
✅
✅
Depth + Gaussian blur passes
Shadow Map Size Config
✅
✅
 
Shadow Bias / Darkness
✅
✅
 
Frustum Edge Falloff
✅
✅
 
PCF Shadows
✅
✅
Spot + directional PCF (Scenes 18, 111)
Cascaded Shadow Maps
✅
✅
Directional CSM, up to 4 cascades, PCF5, Standard + PBR receivers (Scenes 214-215)
Point Light Shadows
—
✅
 
Spot Light Shadows
✅
✅
Scene 18 (PCF)
Material-Aware Shadow Depth
✅
✅
Shadow material views and alpha-discard casters for Standard, PBR, and NodeMaterial (Scenes 116, 140, 141)
Contact Hardening Shadows
—
✅
 

Loaders

FeatureLiteBJSNotes
glTF 2.0 / GLB
✅
✅
Meshes, materials, skins, morphs, animations
.babylon Format
✅
✅
Meshes, standard materials, lights
Environment .env
✅
✅
 
HDR Panorama .hdr
✅
✅
 
Skybox Cube Textures
✅
✅
 
2D Texture Loading
✅
✅
With mipmap generation
OBJ / MTL
—
✅
 
STL
—
✅
 
FBX
—
✅
 
KTX1 Compressed Textures
✅
✅
Scene 25 — ASTC / BC / ETC2 auto-format + PNG fallback
KTX2 Textures
✅
✅
Scene 112 — KHR_texture_basisu glTF texture sources
Basis Universal (.basis)
✅
✅
Scene 36 — transcoder fetched from BJS CDN; BC7 / ASTC / ETC2 / BC3 auto-select + RGBA32 fallback

glTF 2.0 Extensions (Khronos + vendor)

FeatureLiteBJSNotes
KHR_materials_pbrSpecularGlossiness
✅
✅
Archived ext — mapped to metallic-roughness (Scene 6)
KHR_materials_variants
✅
✅
Scene 27 — runtime variant selection
KHR_materials_unlit
✅
✅
Scene 32 — base color output, no lighting
KHR_materials_clearcoat
✅
✅
Scene 28 — glTF loader auto-wires clearcoat + roughness + normal textures
KHR_materials_sheen
✅
✅
Scene 29 — glTF loader with BJS-spec albedo scaling
KHR_materials_anisotropy
✅
✅
glTF loader auto-wires strength + rotation (manual API: Scene 23)
KHR_materials_volume
✅
✅
glTF loader auto-wires attenuation + thickness (Scene 30); manual API Scene 26
KHR_materials_transmission
✅
✅
Frame-graph scene-texture transmission (Scenes 30/33/112)
KHR_materials_ior
✅
✅
Index of refraction override (Scene 30)
KHR_materials_specular
✅
✅
Dielectric specular intensity/color (Scene 30)
KHR_materials_iridescence
✅
✅
glTF loader auto-wires factor/IOR/thickness and packed texture channels (Scene 178)
KHR_materials_emissive_strength
✅
✅
HDR emissive multiplier (Scene 31)
KHR_materials_dispersion
✅
✅
Scene 212 — wavelength-dependent (chromatic) refraction on volumetric glass
KHR_lights_punctual
✅
✅
Scene 33 — point / spot / directional lights from glTF
KHR_texture_transform
✅
✅
Material-wide UV offset / scale / rotate resolved at load (Scene 29)
KHR_texture_basisu
✅
✅
Scene 112 — FlightHelmetKTX from BabylonJS/Assets
KHR_draco_mesh_compression
✅
✅
Draco-compressed mesh geometry (Scene 30)
KHR_mesh_quantization
✅
✅
Scene 211 — 8/16-bit quantized vertex attributes dequantized at load
KHR_animation_pointer
✅
✅
Scene 34 — animate arbitrary JSON pointers (e.g. node visibility)
KHR_node_visibility
✅
✅
Scene 34 — per-node visibility flag
KHR_audio / KHR_audio_emitter
—
✅
Positional / ambient audio
KHR_xmp_json_ld
✅
✅
Scene 210 — XMP JSON-LD metadata parsed and exposed
EXT_mesh_gpu_instancing
✅
✅
Scene 35 — per-node instance transforms (TRS accessors → thin instances)
EXT_meshopt_compression
✅
✅
Scene 211 — meshoptimizer bitstream decode (BrainStem skinned + animated)
EXT_texture_webp
✅
✅
Scene 37 — EXT_texture_webp source selection with browser-native decode
EXT_texture_avif
—
✅
AVIF texture source
EXT_lights_image_based
—
✅
IBL specified in glTF asset
MSFT_lod
—
✅
Discrete level-of-detail
MSFT_minecraftMesh
—
✅
Minecraft-style voxel meshes
MSFT_audio_emitter
—
✅
Legacy positional audio
ExtrasAsMetadata
✅
✅
Promote glTF extras to metadata.gltf.extras

Textures

FeatureLiteBJSNotes
2D Textures
✅
✅
 
Cube Textures
✅
✅
 
Solid Color Textures
✅
✅
Procedural 1×1 fill
GPU Mipmap Generation
✅
✅
Compute shader mipmaps
sRGB Handling
✅
✅
Format-based gamma correction
Sampler Configuration
✅
✅
Filter, address mode, anisotropy
InvertY Control
✅
✅
 
Procedural Textures
—
✅
 
Video Textures
—
✅
 
Dynamic Textures
—
✅
 
Render Target Textures
✅
✅
Frame-graph RTT + sampled Texture2D, including pass-local material override (Scenes 75, 110)
Multi-Render Targets
—
✅
 

Math Utilities

FeatureLiteBJSNotes
Vec3 / Vec4
✅
✅
add, sub, scale, dot, cross, normalize, lerp
Mat4 (4×4 Matrix)
✅
✅
Multiply, inverse, lookAt, perspective, compose
Quaternion
✅
✅
Slerp, toMatrix, from Euler
Color3 / Color4
✅
✅
 
ObservableVec3
✅
—
Auto-dirty on mutation (Lite-specific)
LH Column-Major Layout
✅
✅
Aligned with WGSL/WebGPU conventions
★ High-Precision / Floating-Origin Matrices
✅
⚡
Scenes 200/201 — F64 matrix caches + eye-relative floating-origin upload remove far-from-origin jitter at ~5e6 world units; BJS offers useHighPrecisionMatrix but not the eye-relative floating-origin path

Architecture & Developer Experience

FeatureLiteBJSNotes
★ 100% Tree-Shakable
✅
⚡
Zero module-level side effects in Lite
★ Minimal Bundle Size
✅
—
Dramatically smaller than BJS for same scene
★ Zero Side Effects
✅
—
No register*() at import time, no globalThis
★ One-Way Data Ownership
✅
—
Components are plain data; scene is sole owner
★ Materials Own Shaders
✅
—
Self-contained material + pipeline units
TypeScript
✅
✅
Strict typing throughout
Vite Native
✅
⚡
First-class Vite integration
Familiar BJS-like API
✅
✅
Easy migration for BJS developers
Hot Material Swap
✅
✅
Object.defineProperty setter + rebuild queue
Dispose / Cleanup
✅
✅
Full GPU resource cleanup on dispose
GPU Frame Timer
✅
✅
Optional zero-cost GPU frame profiling via WebGPU timestamp queries (setGpuTimingEnabled)
Multi-Canvas / Multi-Scene
✅
✅
One engine drives many canvases/scenes via createSurface; GPU resources are device-scoped (Scenes 227-228)

Advanced Features

FeatureLiteBJSNotes
Physics Engine
⚡
✅
Havok Physics V2 subset (Scene 40); no Ammo.js/Cannon.js/Oimo compatibility layer
Particle System
—
✅
CPU + GPU particles
Post-Processing Pipeline
✅
✅
Frame-graph tasks include generic fullscreen passes, Bloom, depth of field, TAA, SMAA, and final image processing/tone mapping. Scene 187 covers SMAA.
GUI (2D / 3D UI)
—
✅
 
Sprites / SpriteManager
⚡
✅
2D layers, depth-hosted sprites, facing/axis-locked/cutout billboards (Scenes 50-57); not the full BJS SpriteManager API
Gaussian Splatting
✅
✅
.ply / .splat / .sog / .spz loaders, transform baking, material plugin fragments, depth rendering, and GPU picking (Scenes 120-129)
Octree / Frustum Culling
—
✅
 
Level of Detail (LOD)
—
✅
 
Ray Casting / Picking
✅
✅
GPU ID pass + CPU ray/triangle details, normal/UV helpers, thin-instance and deformed mesh coverage (Scenes 113-115)
WebXR / VR / AR
—
✅
 
Glow / Highlight Layer
—
✅
 
Screen-Space Reflections
—
✅
 
SSAO
—
✅
 
Lens Flare
—
✅
 
Volumetric Light Scattering
—
✅
 
Decals
—
✅
 
Solid Particle System
—
✅
 
Fluid Rendering
—
✅
 
Bones IK
—
✅
 
Navigation Mesh
⚡
✅
Recast V2 navmesh, crowd pathing, tile-cache obstacles, off-mesh links, and raycast (Scenes 170-175)
Device Lost Recovery
✅
✅
Opt-in per-kind WebGPU device-loss recovery via enableDeviceLost*Recovery APIs (Scene 164: Scene)
OffscreenCanvas / Worker Rendering
✅
✅
Engine runs unchanged on a DOM canvas or an OffscreenCanvas transferred to a Web Worker (Offscreen demo)
Text Rendering
✅
✅
GPU text renderer with layered layout + editor (Scenes 180-181)
Gizmos
✅
✅
Position / rotation / scale, bounding-box, camera + light gizmos on a utility layer (Scenes 221-224)
Geometry Buffer Renderer
✅
✅
Frame-graph geometry renderer producing normal / depth / position textures; feeds DoF + CoC (Scenes 145-149)
Large World Rendering (Floating Origin)
✅
✅
Camera-relative rendering + multi-region physics for huge world coordinates (Scenes 200-209)
Scene Optimizer
—
✅
 
Asset Manager
—
✅
 
Scene Serialization
—
✅
 

<!-- AUTOGEN:feature-comparison END -->


How to read the gap

  • ✅ on both sides means the feature is covered in Lite to parity with Babylon.js — validated by a pixel-diff against Babylon.js where a parity scene exists.
  • ⚡ on Lite means a meaningful subset is available today; the notes describe exactly what is and isn't covered. These are the most likely candidates to fully finish next.
  • — on Lite means the feature isn't available yet. If your project depends on one of these, Babylon.js is the right option today — and let us know, because your feedback will help shape the Lite roadmap.
  • 🚫 on Lite means the feature is intentionally out of scope (e.g. WebGL, the classic InstancedMesh API). These reflect deliberate design trade-offs that buy Lite its size and speed; use the noted alternative (e.g. thin instances).

This table tracks the current state and will be updated regularly as the gaps close between Babylon.lite and Babylon.js.

Next steps

  • 🚀 Getting Started — install Lite, learn the mental model, and render your first scene.
  • 🛝 Lite Playground — try covered features live in your browser, no setup required.
  • 🔁 Porting Guide — translate a Babylon.js scene to Babylon Lite, side by side.
  • 🧱 Architecture docs — deep dives into the engine internals.
  • 🏠 Welcome — the big-picture introduction and "which engine should I use?" decision tree.