Free tool

LDraw 3D Viewer

Open an LDraw model and turn it around in 3D, zoom in on any corner and step through the build the way its instructions do. Large models, such as a whole mosaic, stay smooth to move.

Drag to turn the model, scroll or pinch to zoom, and right-drag to move it. Click a part to see what it is.

Getting an LDraw file

Most LEGO building programs can save or export a model as LDraw, usually as an .ldr file, or as an .mpd file when the model has submodels. To list a model's parts with links, check which bricks connect, or compare two versions of a build, open it in the LDraw Model Checker.

Under the hood

How the 3D viewer draws a model Your LDraw file goes to the three.js LDraw loader in your browser, which fetches each part shape once from the LDraw parts library on this site's CDN. The loaded model is regrouped into batches, one draw per part and colour, and drawn on a WebGL canvas. Your browser Your LDraw file a sample, or a file you open LDraw loader builds each part once Batches one draw per part and colour WebGL canvas turn, zoom, step through LDraw parts library mirrored on this site's CDN part shapes, fetched once

Measured performance

Measured on October 6, 2026 in Google Chrome 154 on a 13-inch MacBook Pro (2020) with a 2.3 GHz quad-core Intel Core i7 and Intel Iris Plus Graphics, drawing generated models of growing size around the same camera path. Each frame includes the graphics card's work, and the chart shows the middle (p50) frame.

Time per frame by model size Batched drawing stays at 20.9 ms per frame at 10,000 parts. At 2,500 parts, a frame takes 8.6 ms batched and 49.5 ms with one draw per part. BatchedOne draw per part 0 ms20 ms40 ms60 ms 100 parts, batched: 5.1 ms per frame (p50), 60 draw calls100 parts, one draw per part: 5.6 ms per frame (p50), 300 draw calls100 500 parts, batched: 4.6 ms per frame (p50), 52 draw calls500 parts, one draw per part: 13.6 ms per frame (p50), 1,500 draw calls500 1,000 parts, batched: 7 ms per frame (p50), 52 draw calls1,000 parts, one draw per part: 17.1 ms per frame (p50), 3,000 draw calls1,000 2,500 parts, batched: 8.6 ms per frame (p50), 52 draw calls8.6 ms2,500 parts, one draw per part: 49.5 ms per frame (p50), 7,500 draw calls49.5 ms2,500 10,000 parts, batched: 20.9 ms per frame (p50), 52 draw calls20.9 msnot run10,000 Placed parts in the model
The same measurements as a table
PartsDrawingDraw callsFrame, p50CPU, p50
100 batched 60 5.1 ms 0.7 ms
100 one draw per part 300 5.6 ms 1.2 ms
500 batched 52 4.6 ms 0.3 ms
500 one draw per part 1,500 13.6 ms 4.8 ms
1,000 batched 52 7 ms 0.3 ms
1,000 one draw per part 3,000 17.1 ms 9 ms
2,500 batched 52 8.6 ms 0.3 ms
2,500 one draw per part 7,500 49.5 ms 24.9 ms
10,000 batched 52 20.9 ms 0.5 ms

Your device will differ. The benchmark further down runs the same models on yours.

Watch it fail

Each button breaks something on purpose, on this page only, so you can see how the viewer copes.

Without WebGL 2 the page loads nothing heavy: it says so up front and points to the LDraw Model Checker, which can still list a model's parts and draw a flat view.

Run it on your device

The benchmark draws generated models of growing size, batched and then one draw per part, on a hidden canvas of the same size every time. Each frame waits for the graphics card to finish, so the timings include its work. It takes a minute or two, and the results stay in your browser.