Skip to main content

luma.gl Documentation

luma.gl is a TypeScript toolkit for high-performance GPU rendering and compute on the web. It provides one application-facing API with pluggable WebGPU and WebGL2 backends, plus higher-level building blocks for models, animation, shader composition, and GPU data processing.

Start with a live scene, follow the ideas behind a single rendered frame, and choose how much of the GPU you want to control. You can explore the examples and tutorials right here in your browser.

npm package version MIT license TypeScript strict mode

Choose your starting point

When you are ready to turn an idea into your own application, the Installing guide walks through your first project, device adapters, and your first rendered frame.

Why luma.gl?

  • Portable GPU API — write against luma.gl resources and select WebGPU, WebGL2, or both at application startup.
  • Low-level access without raw-API duplication — retain explicit buffers, textures, shaders, bindings, passes, and pipelines while sharing most application code.
  • Engine building blocks — use Model, AnimationLoop, geometry, transforms, and scenegraph helpers when raw resource management is unnecessary.
  • Composable shaders — package shader functions, typed inputs, hooks, and injections into reusable modules and plugins.
  • Visualization-scale data — luma.gl is the rendering foundation for deck.gl and includes dedicated support for GPU tables and Apache Arrow workflows.

Is luma.gl the right level?

ChooseWhen
luma.glYou are building a renderer, GPU compute workflow, visualization framework, or custom GPU feature and want explicit resource control.
deck.glYou need high-level geospatial or large-data visualization layers, picking, cameras, and interaction.
A complete scene engineYou need a batteries-included scene engine with an extensive asset and material ecosystem.
Raw WebGPUYou need exact control over one backend and do not need luma.gl's portability, lifecycle, or shader tooling.

Three cooperating APIs

Engine API

The Engine API provides Model, AnimationLoop, geometry, scenegraph, dynamic texture, and GPU transformation helpers. It is the recommended starting point for applications.

Portable GPU API

The Core API exposes devices, buffers, textures, shaders, bindings, pipelines, and render or compute passes. @luma.gl/webgpu and @luma.gl/webgl provide the concrete backends.

Shader API

Shadertools assembles WGSL and GLSL from reusable shader modules and application-defined hooks. It is used by luma.gl, deck.gl, and custom renderers.

Explore how the three APIs fit together for the complete object model and guidance on choosing the right layer.

Supported environments

luma.gl targets current evergreen browsers. WebGPU feature availability varies by browser and platform; WebGL2 provides the compatibility path for portable rendering. Compute shaders, storage textures, and some advanced features remain WebGPU-only.

Server-side rendering and compute are also possible when the host supplies a compatible GPU implementation. Browser-specific image, canvas, and video APIs may require environment-specific replacements.

Project and releases

This documentation describes luma.gl v9.3. See What's New for current features and the Upgrade Guide for breaking changes.

luma.gl is an MIT-licensed OpenJS Foundation project governed by the vis.gl community. Use GitHub Discussions for design and usage questions, and GitHub Issues for confirmed bugs.

Older documentation remains available in the corresponding GitHub release branches: v9.2, v9.1, v9.0, and v8.5.