Free online STL to GLB converter
STL to GLB, and why your part now reads 0.04
Drop an .stl and download a .glb, built in the page itself with no upload step at all. This is the conversion that takes a model out of the printing world and into the web one, and the first thing it changes is the unit: glTF counts in metres, so a 40 mm part is written as 0.04 and every glTF viewer will say so afterwards. That is correct, and the factor is printed so you can confirm it. The second change is structural — the loose triangles become an indexed mesh, which is usually why the GLB is smaller than the STL was.
- 100% free
- No signup
- One binary file
- Metres out
- Nothing uploaded
Drag a file anywhere on this page to open it. F fits the view, W switches shading, G the grid, R spins it.
How to convert STL to GLB
Three steps, and one number that surprises everybody once.
Drop the .stl
Either flavour opens. Coincident corners are welded and the result written as the indexed mesh glTF stores, which is why the GLB usually lands smaller than the STL despite carrying more.
Accept the small numbers
glTF counts in metres, so a 40 mm part is written as 0.04 and every glTF viewer will report it that way from now on. That is the specification working, not a mistake. The panel prints the factor so you can check the arithmetic against a dimension you know.
Point a viewer at it
The output is standard binary glTF. Drop it beside your page and give its path to a model-viewer element, or to three.js, Babylon or Godot — none of them need a build step or a conversion service to load it.
Technical specifications
| Reads | .stl — binary or ASCII |
|---|---|
| Writes | .glb — binary glTF, self-contained |
| Unit | Millimetres in, metres out — factor ×0.001, printed in the panel |
| Gained | An indexed mesh, a base material, and a format browsers load natively |
| Not gained | Colour or texture — the STL carried none to convert |
| Loads in | model-viewer, three.js, Babylon, Godot, Android Scene Viewer |
| File size | No fixed limit — past 100 MB you are told what it will cost this tab, then it opens |
Frequently asked questions
Why not just serve the STL?
Because a browser has no native STL support and no library loads it as cheaply. An STL repeats every vertex once per triangle, has no index buffer, and forces the loader to rebuild the mesh before the GPU can touch it. A GLB stores the vertex data in the layout the GPU consumes and is loaded by every web 3D framework as the first-class case. For a page with several models on it, that difference is visible.
Why does my 40 mm part show as 0.04?
Because it is 0.04 metres, and glTF is a metre-based format by specification. Every viewer that reads the file will agree. The alternative — writing 40 into a glTF and letting each viewer guess — is how models end up forty metres tall in an AR scene. If you need the millimetres back, the reverse conversion multiplies by a thousand and says so.
Can I give it a colour?
The GLB gets a base material, which is more than the STL had, but not a colour anyone chose. STL stores no colour at all, so anything specific would be invented. The practical route is to set the material in whatever renders the file — model-viewer, three.js and Babylon all let you override it — or to author the colour upstream in a format that can carry it.
Why is the GLB smaller than my STL?
Two reasons together. A binary STL spends 50 bytes on every triangle regardless of how much its corners are shared; glTF stores each position once and refers to it by index, which removes roughly five sixths of the vertex data on a typical closed mesh. And the per-triangle normals STL insists on are dropped, because a renderer computes shading from the geometry anyway.
Is it good enough for AR?
On Android, yes — Scene Viewer takes a GLB directly. On iOS, Quick Look wants USDZ, which is a different package with different rules. Converting a GLB to USDZ is one more step and it is on this site.
Is my file uploaded?
No. The STL is parsed and the GLB assembled in this tab, which matters when the model is a product you have not launched yet.
About showing a printable part to somebody who is not printing it
The reason this conversion exists is that STL is a manufacturing format and the web is not a manufacturing context. A customer looking at a product page, a client reviewing a design, a maker browsing a listing — none of them are slicing anything, and all of them benefit from turning the model around in a browser instead of downloading a file they have no software for. GLB is what that costs: one conversion, one file, no plugin.
The unit change is worth internalising rather than fighting, because it is the whole reason glTF models behave predictably. A format that declares its scale can be placed in a scene, lit at the right distance and anchored in AR at life size. A format that declares nothing — STL, OBJ, PLY — leaves every consumer to assume, and assumptions do not agree. The thousandfold factor looks alarming exactly once.
If the destination is an iPhone rather than a web page, USDZ is the package Quick Look opens. And if a model came back to you from the web and needs printing, the return trip multiplies by a thousand and checks whether the mesh closes.
Where the conversion happens
Every number on this page is worked out by JavaScript running in the tab you are reading it in. The model you open is read straight off your own disk — it is never uploaded, logged or kept, which is also why these tools carry on working after you disconnect from the network.
Worth adding here: a model heading for a web page is usually one that is not public yet, and uploading it to a converter is the step that makes it somebody else's copy. Nothing was handed over here; the model is still only on your machine.