What's New
This page contains news for recent luma.gl releases. For older releases (through v8.5) refer to the Legacy What's New page.
Version 9.3 (In Development)
Target Date: TBD
@luma.gl/gltf
- glTF Skeleton Animation Support
- glTF Mesh Target Animation Support
- glTF and PRB now supported on WebGPU
- Improved documentation
Version 9.2
Release Date: Sep 24, 2025
Production quality WebGPU backend
General
- All luma.gl examples now run under both WebGPU and WebGL
- API updates to cover new Chrome WebGPU features
- TypeScript v5.7, and all
"strict"TypeScript options are now enabled. - Documentation improvements
@luma.gl/core
-
[
Buffer]- [
Buffer.mapAndReadAsync()] New method that reads directly from buffer memory without performing a copy. - [
Buffer.mapAndWriteAsync()] New method that writes directly to buffer memory.
- [
-
[
Texture]Textureclass refactors complete, see upgrade guide.
-
Shader type APIs have been improved.
-
CommandEncoder/CommandBufferAPI improvements -
CanvasContextAPI simplifications (see upgrade guide). -
Texture Formats. Adds support for the new texture formats added in Chrome 132 (currently require setting chrome://flags/#enable-unsafe-webgpu)
'r16unorm','rg16unorm','rgba16unorm'(feature'chromium-experimental-unorm16-texture-formats')'r16snorm','rg16snorm','rgba16snorm'(feature'chromium-experimental-snorm16-texture-formats')
-
Vertex Formats (added in Chrome v133 and v119)
- Single component 8 and 16 bit formats are now supported by WebGPU:
'uint8','sint8','unorm8','snorm8','uint16','sint16','unorm16','snorm16', and'float16'. - Note: 3 component formats are still missing in WebGPU.
'unorm8x4-bgra'- WebGPU only. Simplifies working with BGRA data.'unorm10-10-10-2- Exposed since available in all WebGPU backends. Also supported by WebGL2.
- Single component 8 and 16 bit formats are now supported by WebGPU:
@luma.gl/engine
DynamicTexture- now supports mipmap generation for WebGPU textures
@luma.gl/effects
- More postprocessing effects ported to WGSL
@luma.gl/shadertools
- More shader modules ported to WGSL
@luma.gl/gltf
- glTF and PRB now supported on WebGPU (in progress)
Version 9.1
Target Date: Dec, 2024
Enhanced WebGPU support.
Highlights
- GPU backend management is streamlined via the new
AdapterAPI. - GPU connection to HTML DOM (via
canvaselements) improved viaCanvasContextAPI changes. Textures are now immutable, however a newAsyncTextureclass offers a higher-level, mutable texture API.ShaderModuletype safety improvements (shader uniforms can now be strictly typed in JavaScript)
@luma.gl/core
Adapter- New class for singleton objects representing pluggable GPU backends.
- Singleton
Adapterobjects are exported by the@luma.gl/webgpuand@luma.gl/webglmodules.
luma- Now relies on
Adapterinstances to define which GPU backends are available. - Adapter can be supplied during device creation, avoiding the need for global registration of GPU backends.
CreateDeviceProps.adaptersprop to supply list of GPU backend adapters toluma.createDevice().luma.registerAdapters()New method for global registration of adapters (in case it still desired).
- Now relies on
DeviceDeviceProps.createCanvasContext- New prop for creating a defaultCanvasContext.DeviceProps.onResize- New callback tracking size changes toCanvasContexts.DeviceProps.onVisibilityChange- New callback tracking visibility toCanvasContexts.DeviceProps.onDevicePixelRatioChange- New callback tracking device pixel resolution (DPR) changes toCanvasContexts.DeviceProps.debug*- New debug options, please refer toDevicePropsdocumentation.
CanvasContext- Now calculates exact "device pixel content box" size enabling pixel perfect sized drawing buffers (no moire etc).
- Now tracks size, visibility and DPR changes (see the new
DevicePropscallbacks).
Texture- Textures are now immutable and synchronous. See upgrade guide, and the new
AsyncTextureclass in@luma.gl/engine. Texture.copyExternalImage()New function that works on both WebGPU and WebGL.Texture.copyImageData()New function that works on both WebGPU and WebGL.
- Textures are now immutable and synchronous. See upgrade guide, and the new
SamplerSamplerProps.mipmapFilterNew value'none'providing more explicit control over mipmap filtering.
RenderPipelineParameters.blend- New parameter that provides more explicit control over color blending activation.
RenderPassRenderPassProps.clearColors- New prop enables specification of clear colors for multiple color attachments.
@luma.gl/engine
makeAnimationLoopTemplate- Accepts a new
.adaptersprop. (Avoids need for global registration of adapters).
- Accepts a new
AsyncTexture](/docs/api-reference/engine/async-texture)- New class allows that applications to work withcreate textures from a Promise.
ShaderPassRenderer- New class that helps applications apply a
ShaderPasslist to a texture.
- New class that helps applications apply a
@luma.gl/shadertools
- [
ShaderModule](/docs/api-reference/shadertools/shader-module)- New improvements to type safety, in particular for uniforms and bindings.
- New simplified API, no longer required to instantiate modules into
ShaderModuleInstances.
getShaderModuleUniforms(module: ShaderModule, ...)New functiongetShaderModuleDependencies(module: ShaderModule)New function
@luma.gl/webgl
webglAdapter- New object representing the WebGL backend
- New: adds mock WEBGL1 extensions to WebGL2 contexts for better compatibility with old WebGL libraries
- Big texture refactor to align WebGL implementation with WebGPU APIs
RenderPipeline- WebGL render pipelines now support frame buffers with multiple color attachments.
RenderPass- Now supports framebuffers with multiple color attachments.
@luma.gl/webgpu
webgpuAdapterNew object representing the WebGPU backend- Numerous under-the-hood improvements and bug fixes
Version 9.0
Target Date: Feb 2024
luma.gl v9 contains significant API changes and requires existing luma.gl v8 applications to be upgraded.
luma.gl v9 is a major release that adds experimental WebGPU support to the luma.gl API.
WebGPU Support
The biggest change is that the core API is now portable (no longer WebGL-specific), and plug-in backends are provided for WebGL 2 and WebGPU:
- Portable GPU API:
@luma.gl/corenow provides a portable GPU resource management API. - WebGL bindings:
@luma.gl/webglnow provides a WebGL backend for the core API. - WebGPU bindings:
@luma.gl/webgpuprovides a new experimental WebGPU backend for the core API.
WebGL Support
luma.gl v9 drops support for WebGL 1 functionality.
- WebGL1 WebGL 1 support is dropped.
- GLSL 1.00 is no longer supported. GLSL shaders need to be ported to GLSL 3.00.
- headless-gl The Node.js WebGL 1 integration is no longer supported
On the upside this means that all features requiring WebGL 2 are now available and luma.gl also brings support for a range of new WebGL 2 extensions, see more below.
New module structure
| Module | Impact | Description |
|---|---|---|
@luma.gl/core | New API | The new portable luma.gl GPU API. Applications can run on both WebGPU and WebGL2 devices. |
@luma.gl/engine | Light API updates | Classic luma.gl engine classes ()Model, AnimationLoop etc), which work portably on both WebGPU and WebGL 2. |
@luma.gl/gltf | Renamed module | New module that exports the glTF classes (moved from @luma.gl/experimental). |
@luma.gl/shadertools | Light API updates | The shader assembler API and the shader module library. |
@luma.gl/webgl | WebGL backend | Optional "GPU backend module". Importing this module enables the application to create WebGL 2 Devices. |
@luma.gl/webgpu | WebGPU backend | Experimental "GPU backend module". Importing this module enables the application to create WebGPU Devices. |
General improvements
- TypeScript: All APIs now rigorously typed.
- ES modules - Modern ES module and CommonJS entry points for maximum interoperability.
- Website - New Docusaurus website with more embedded live examples and improved documentation.
- Debugging - SpectorJS integration. Shader debugger UI.
New features
@luma.gl/core
- Exports the new
Deviceclass is the entry point to the luma.gl API, used to create other GPU resources.
@luma.gl/engine
- NEW: Scenegraph classes:
ModelNode,GroupNode,ScenegraphNode, moved from@luma.gl/experimental. - NEW:
ShaderInputs- Class that manages uniform buffers for aModel - NEW:
ShaderFactory- Creates and caches reusableShaderresources - NEW:
AnimationLoopTemplate- Helper class for writing cleaner demos and applications in TypeScript. - New
Computation- Class that manages aComputePipelinesimilar toModelandTransform.
@luma.gl/gltf
- New module that exports the glTF classes (moved from
@luma.gl/experimental).
@luma.gl/shadertools
- All shader modules now use uniform buffers.
- New
ShaderAssemblerclass that provides a clean entry point to the shader module system. - New
CompilerMessagetype andformatCompilerLogfunction for portable shader log handling. - Shader assembly now supports WGSL and single shader source (compute or single vertex+fragment WGSL shaders)
@luma.gl/webgl
- The new bindings API now supports WebGL 2 Uniform Buffers.
WebGL 2 Extension support: WebGL is not dead yet! Browsers (Chrome in particular)
are actively developing "extensions" for WebGL 2,
and luma.gl is exposing support for many of the new WebGL extensions through the
DeviceFeatures API.
New Device.features that improve application performance in WebGL:
compilation-status-async-webgl: Asynchronous shader compilation and linking is used automatically by luma.gl and significantly speeds up applications that create manyRenderPipelines.
New Device.features that enable additional color format support in WebGL:
rgb9e5ufloat-renderable-webgl:rgb9e5ufloatis renderable.snorm8-renderable-webgl:r,rg,rgba8snormare renderable.norm16-renderable-webgl:r,rg,rgba16normare renderable.snorm16-renderable-webgl:r,rg,rgba16snormare renderable.
New Device.features that expose new GPU parameters in WebGL:
depth-clip-control:parameters.unclippedDepth- depth clipping can now be disabled.provoking-vertex-webgl:parameters.provokingVertex- controls which primitive vertex is used for flat shading.polygon-mode-webgl:parameters.polygonMode- enables wire frame rendering of polygons.polygon-mode-webgl:parameters.polygonOffsetLine- enables depth bias (polygon offset) for lines.shader-clip-cull-distance-webgl:parameters.clipCullDistance0-7, also see GLSL effects below.
New Device.features that enable new GLSL syntax
shader-noperspective-interpolation-webgl: GLSL vertex outputs and fragment inputs may be declared with anoperspectiveinterpolation qualifier.shader-conservative-depth-webgl: GLSLgl_FragDepthqualifiersdepth_anydepth_greaterdepth_lessdepth_unchangedcan enable early depth test optimizations.shader-clip-cull-distance-webgl: Enablesgl_ClipDistance[] / gl_CullDistance[].