What sets them apart
STL and OBJ are both standard 3D file formats, but they answer different questions. STL stores triangle geometry and nothing else, which makes it the universal language of 3D printing. OBJ stores geometry plus materials, textures, smooth-shading normals, and UV coordinates, which makes it the universal language of 3D rendering and asset interchange. Both can describe the same physical shape. They just disagree on what counts as everything you need to know about it.
The right choice depends on what is downstream. Anything heading to a slicer wants STL. Anything heading to a render engine, a game engine, or another modelling package wants OBJ.
STL, the printing standard
STL (Stereolithography) was invented by 3D Systems in 1987 for their early SLA printers and has been the default 3D-printing format ever since. It represents an object as a collection of triangular faces, and that is all it stores: no colour, no texture, no smooth-shading normals, no curves. Everything is tessellated into triangles ahead of time.
That simplicity is exactly why it wins for printing. Every slicer reads it (Cura, PrusaSlicer, Bambu Studio, OrcaSlicer), parsing is trivial, and the binary variant is compact. The downsides only matter outside the printing context. Each triangle stores its own three vertices independently, so vertices on shared edges get stored multiple times, which inflates files for very dense models. And anything richer than geometry, such as materials, UVs, or animations, simply is not there.
OBJ, the interchange format
OBJ came out of Wavefront Technologies and has become the lingua franca of 3D model interchange. It is a text format (with binary variants) that stores geometry alongside vertex normals, UV texture coordinates, and references to a companion .mtl file describing materials. Vertices are shared across faces rather than duplicated, so the geometry storage is more efficient than STL once you account for indexing.
The trade-offs run the other way. OBJ files are bulkier per triangle than binary STL, the text format can balloon for high-resolution models, and it depends on external .mtl and texture files that have to travel with it. There is also no animation support and no scene hierarchy. For those you want glTF.
For a hundred-thousand-triangle model, expect roughly 5 MB for binary STL, 8 MB for OBJ, and 20 MB for ASCII STL. OBJ with textures attached can be much larger depending on the texture resolution.
Which one to reach for
Pick STL when you are sending a model to a 3D printer, when you only have geometry to convey, or when you need maximum compatibility with manufacturing software. Pick OBJ when you are moving a model between modelling tools (Blender, Maya, 3ds Max), when materials and textures matter, when you want smooth shading from real vertex normals, or when the destination is a renderer rather than a fabricator.
Two alternatives are worth knowing about. glTF (and its binary variant GLB) is the modern web-ready format with PBR materials, animations, and scene hierarchy, which makes it the right pick for web viewers, AR, and game engines. 3MF is the modern replacement for STL in 3D printing: it supports colour, materials, and metadata that STL cannot carry, and most current slicers prefer it where it is available.
If you do not have a model yet, Mesh Studio builds one from a single photo and exports STL, OBJ, GLB, PLY, or DXF, so you can hand the right format to whatever comes next. When you already have a file and need a different one, the LaserTools converters handle STL to OBJ and STL to GLB (and back) in the browser, and the files never leave your machine.