mrkeyoor.com_
Tue 01 Sept 17:41 UTC
Webevaluationupdated 26 Aug 2026

three.js review

three.js is a JavaScript library for drawing and animating 3D scenes in the browser through WebGL and WebGPU. It handles cameras, geometry, materials, lighting, loaders, animation, and renderer details so web developers can build 3D experiences without programming directly against low-level graphics APIs.

+201stars / 7d
Verdict

Our three.js run built in 10 seconds and passed all 1,315 tests in 29 seconds with 0 known npm vulnerabilities. It remains the default recommendation for teams that want a flexible browser 3D library and can own their rendering architecture. Choose a fuller engine for editor-led production, and treat WebGPU or WebXR features as paths that deserve device-specific tests.

We ran it

Lab card: what happened when we ran three.jsScreenshot of three.js (threejs.org)
Install✓ · 30s235 packages · 147 MB
Build✓ · 10s
Tests✓ · 29s1315 passed · 0 failed of 1315 (node:test)
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo5886 files~580,345 lines of source · 594.5 MB · 6 CI workflows · tests dir

Answers from our run

Does three.js build from source?

Dependencies installed in 30 seconds (235 packages), and the build succeeded in 10 seconds. We cloned commit cbba126 into a clean Debian container with 3 CPUs and no project-specific setup.

Do three.js's tests pass?

Yes: 1315 of 1315 passed when we ran the project's own test command (node:test). Some failures need services or credentials a bare container does not have.

Does three.js have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use three.js?

Teams wanting a full game engine with an editor, physics, networking, and scene-management conventions included.

What are the alternatives to three.js?

Babylon.js, PlayCanvas Engine, React Three Fiber. Our three.

Setup5/530-second install with a clean build, tests, and audit
Docs5/5Manual, API docs, examples, migration notes, forum, and wiki
Community5/5114,816 stars and same-day maintainer activity
Maturity5/515 years of releases with 1,315 passing tests in our run

Discussed on

  1. hnRealtime Three.js Coding261 points
  2. hnThree.js editor242 points
  3. hn3D CSS Periodic table with three.js191 points
  4. hnThree.js Shading Language160 points
  5. hnPR converts the Three.js codebase to ES2015 modules134 points

Who it’s for

Web developers who need direct control over a browser 3D scene and render loop.
Product teams building configurators, data graphics, games, art, or WebXR experiences.
Engineers who want a large addon and example collection around a small scene API.
Teams prepared to pin releases and follow the migration guide during upgrades.

Who it’s NOT for

Teams wanting a full game engine with an editor, physics, networking, and scene-management conventions included.
React teams that prefer declarative components and lifecycle integration over direct scene mutation; React Three Fiber is a closer fit.
Projects unable to budget for browser and GPU-specific testing: current issue activity includes WebGPU, WebXR, shader, disposal, and rendering fixes.
Maintainers expecting every registered unit file to assert behavior: issue #34371 identifies empty QUnit scaffolds in the suite.

Setup reality

Our sandbox installed 235 npm packages in 30 seconds and used 147 MB. The build passed in 10 seconds. Node's test runner passed all 1,315 tests in 29 seconds, and npm audit found 0 known vulnerabilities.

Using the library itself needs no service credentials. Real projects still need an asset pipeline, browser targets, GPU fallbacks, and decisions about WebGL versus WebGPU. Loaders and controls live in addons rather than the core import.

The repository checkout was 594.5 MB with 5,886 files and about 580,345 source lines. A full-history clone is much larger according to the README, which recommends a shallow clone. There is no Dockerfile, and browser or visual behavior needs more than the Node suite we ran.

A small scene API opens into a very large graphics toolkit

The basic three.js program is still easy to explain: create a scene, camera, geometry, material, mesh, and renderer, then update the mesh inside an animation loop. That direct model helps newcomers see where pixels come from. It also stays useful as projects grow because the application owns scene structure and timing instead of conforming to an editor's object model.

Beyond the core, addons cover controls, asset loaders, post-processing, helpers, effects, and alternate renderers. The current builds focus on WebGL and WebGPU, while SVG and CSS3D renderers remain available as addons. This split keeps the main package from pretending every renderer has equal status. It also means developers must read import paths carefully and decide which examples are suitable foundations rather than production-ready modules.

The repository is large because examples are part of the product

Our shallow checkout contained 5,886 files, roughly 580,345 source lines, and 594.5 MB. The README warns that cloning all Git history is about 2 GB and recommends git clone --depth=1 when history is unnecessary. That size is unusual for a JavaScript library, but three.js ships years of examples, test assets, docs, an editor, and renderer work in one repository.

The examples are often the quickest route to a technique such as glTF loading, shadows, post-processing, WebXR, or GPU computation. Copying one blindly is risky. An example may prioritize showing one API over cleanup, asset licensing, responsive layout, accessibility, or low-power devices. Start from the smallest relevant case, then add explicit disposal, loading states, resize handling, and a reduced-motion or static fallback where the product needs one.

What happened when we ran it

Our sandbox installed 235 npm packages in 30 seconds and used 147 MB on disk. The build completed successfully in 10 seconds. Node's test runner then passed 1,315 of 1,315 tests in 29 seconds. Npm audit reported 0 known vulnerabilities across critical, high, moderate, and low severities for the dependency set at commit cbba126.

The measured repository had 6 CI workflow files and a tests directory, with no Dockerfile. The green Node suite is meaningful for core logic and packaging, but it cannot cover every browser, graphics driver, extension, or visual output. Our 3-CPU, 8 GB unprivileged container did not judge frame rate, memory use in a scene, WebXR comfort, or image correctness. Those require a chosen workload and target devices.

WebGPU is usable, while its edges move daily

Release r185 contains extensive WebGPU renderer, node, compute, texture, binding, and XR work. On August 26, 2026 alone, pull requests addressed stale bind-group reuse, render-target dimensions, disposed GPU buffers, clustered-light cleanup, and stereo camera handling. That activity is good for fixes and a warning against assuming the newer renderer behaves identically to WebGL across every feature.

The issue trail gives concrete test cases. Issue #34343 described severe pose-linked world drift in desktop PCVR on the WebGPU path while WebGL worked on the same hardware; it was closed after follow-up. Pull request #34378 fixed an uncaught compileAsync() failure when a material was disposed during compilation. If WebGPU or XR is central, maintain a device matrix and reproduce the exact renderer, browser, headset, and disposal sequence before release.

A passing suite still has known coverage holes

Our run passed 1,315 tests, yet issue #34371 found unit files that registered QUnit modules without any assertions. Pull request #34372 proposes adding 276 tests across 17 of those files. This does not invalidate the passing cases. It shows why a large count should be read as evidence for covered behavior, rather than proof that every renderer subsystem has a meaningful unit test.

Visual regression tests and live examples add another layer, but application-specific scenes remain your responsibility. Test asset loading failures, context loss, resizing, device-pixel ratios, color management, disposal, and tab suspension. For interactive work, keyboard operation and alternative content should be product requirements, because a canvas alone offers little structure to assistive technology. three.js gives rendering primitives; it does not supply an accessible interface around them.

Monthly releases make pinning and migration routine

The latest published release was r185 on July 1, 2026, while the default development branch was pushed on August 26. GitHub listed 114,816 stars and 379 combined issues and pull requests. Those figures describe one of the largest active browser graphics communities, with a queue that includes feature work, defects, docs, and experimental renderer changes rather than 379 confirmed bugs.

Release notes and the migration guide are required reading because deprecated APIs are removed and renderer internals evolve. Upgrade in a branch, run representative scenes, compare screenshots, and watch the console for warnings. Teams that cannot schedule that work should pin a known release. For teams that can, three.js offers unusual freedom without forcing the rest of the application into a game-engine architecture.

Alternatives

ProjectWhat it isPick it when
Babylon.jsA browser 3D engine with a broader built-in engine and tooling layer.pick this instead when you want more game-engine features and official visual tools out of the box.
PlayCanvas EngineA WebGL and WebGPU game engine that can pair with the PlayCanvas editor.pick this instead when an engine and collaborative scene editor fit the team better than a library.
React Three FiberA React renderer that expresses three.js scenes as components.pick this instead when the application is already React-first and component lifecycles should own the scene.

What people are saying

  1. [github-trending] mrdoob/three.js

Sources

  1. three.js README
  2. three.js r185 release
  3. Issue 34371: empty unit test scaffolds
  4. Pull request 34372: additional unit coverage
  5. Issue 34343: WebGPU XR pose drift
  6. three.js migration guide

More web reviews

axios · super-productivity · Graphite · fastify · tabler · go-zero · the whole board →