FORMAT COMPARISON
STL vs OBJ
The print-only triangle list and the universal mesh file — what each stores, when to use which, and how to convert between them.
The short answer
Use STL when the destination is a slicer or a print service. It is a raw triangle list — no UVs, no color, no materials — and every tool since 1987 reads it. Use OBJ when you are exchanging a mesh with an editor, a scanner, or a game tool: faces, UVs, normals, and an optional MTL sidecar. STL is smaller and simpler. OBJ is more flexible. In practice you will keep both: OBJ in the modeling pipeline, STL on the way to the printer.
Feature comparison
The gap is not “old vs new.” Both formats are decades old. STL won printing by storing the smallest thing a stereolithography machine needed: triangles. OBJ won interchange by storing a mesh the way a modeler thinks about it: vertices, faces, UVs, and a material file on the side.
| Feature | STL | OBJ |
|---|---|---|
| File structure | Raw triangle list (binary or ASCII) | Text: v / vt / vn / f lines + optional MTL |
| Geometry | Triangles only | Triangles, quads, n-gons (indexed vertices) |
| UV / texture coordinates | No | Yes (vt) |
| Vertex / facet normals | Facet normal per triangle | Yes (vn); smoothing groups in some exporters |
| Color / materials | No | MTL sidecar + image maps (referenced, not embedded) |
| Animation | No | No — static geometry only |
| Units | None — slicers assume mm | None — destination tool decides |
| Typical file size | Smaller (50 bytes × triangles) | Larger as ASCII; indexed, but text |
| Human-readable | ASCII STL yes; binary no | Yes — plain text |
| Typical use | 3D printing, slicers | Modeling, scanning, general interchange |
| First released | 1987 (3D Systems) | 1980s (Wavefront Technologies) |
| Spec owner | 3D Systems (de facto public) | Wavefront / open de facto |
Where each wins
STL's advantage is simplicity. One file, triangles only, every slicer and print bureau on earth accepts it. The file is small, the parser is trivial, and there is nothing to lose in transit because there was nothing extra to begin with. The cost is that you cannot carry a look: no UV atlas, no painted vertices, no named materials.
OBJ's advantage is flexibility. Indexed vertices keep the mesh editable. UVs let you re-apply maps. An MTL file can name Kd/Ks/map_Kd even if this site's converters do not write one. The cost is a text format with no units, no animation, and a sidecar that is easy to misplace. It is a mesh interchange file, not a scene file and not a print file.
When to use STL
- Sending a mesh to a slicer (PrusaSlicer, Bambu Studio, Cura, OrcaSlicer)
- Uploading to a print service that lists STL
- A quick geometry check in a viewer — no materials to wait on
- When you want the smallest, most compatible print file and do not need UVs
When to use OBJ
- Exchanging a mesh with CAD, sculpting, or scanning tools
- Keeping UVs so you can re-assign textures later
- Opening an archive or photogrammetry export that already shipped as OBJ
- When the destination tool does not speak STL and you do not need animation
Converting between them
OBJ → STL triangulates faces and drops UVs, MTL and smoothing groups. STL → OBJwrites indexed vertices and faces; it cannot invent UVs or materials that STL never stored. Neither direction creates data that wasn't there.
For the formats themselves, see What is an STL file and What is an OBJ file.
FAQ
Is OBJ better than STL?+
For different jobs. OBJ stores indexed vertices, UVs, normals and an optional MTL material file — that is what editors and scanners need. STL stores a raw triangle list with no UVs, color or materials — that is what slicers have spoken since 1987. Neither replaces the other.
Can STL store textures or vertex colors?+
No. Binary STL is 50 bytes per triangle: three vertices, a facet normal, and a 2-byte attribute that almost nobody uses for color. There are no UV coordinates and no material references. If you need maps or a painted mesh, use OBJ, GLB or 3MF — not STL.
Which file is smaller?+
STL, usually, for the same triangle count as a binary file: no UVs, no normals-as-attributes, no comments. ASCII OBJ is text, so it is often larger than binary STL. An indexed OBJ can beat ASCII STL because shared vertices are stored once. For print-bound meshes, binary STL is the small, simple default.
Does converting OBJ to STL keep UVs?+
No. Conversion extracts triangles and drops everything STL cannot store: UVs, MTL references, smoothing groups, vertex colors. Geometry survives. The other direction — STL to OBJ — writes faces and recomputed normals; it cannot invent UVs that were never there.
Which format do print services accept?+
STL. Some also take 3MF or OBJ, but STL is the safe upload. OBJ is the format you send to a modeler, a game tool, or a scanner pipeline — not the format you put on the plate unless the service explicitly lists it.