OBJ File
An OBJ file is a plain-text 3D model format, first developed by Wavefront Technologies, that describes an object's surface as vertices and polygon faces, with optional normals and texture coordinates. Colours and textures live in a companion MTL file, and the format stores no units.
Updated 28 Sep 2026 · 4 min read · By Wyntek
What an OBJ file stores
An OBJ file is a list of text lines, each starting with a keyword. Lines starting with v give vertex positions, vt gives texture coordinates, vn gives normals, and f builds a face by pointing to vertices by number, counting from 1. A face can have three corners or more, so OBJ holds quads and larger polygons as well as triangles. Lines starting with # are comments.
The format also defines freeform curves and surfaces, including NURBS, but many programs read only the polygon mesh. OBJ was first used by Wavefront Technologies around 1990 for its Advanced Visualizer software, and its published specification made it a common vendor-neutral format. A file can hold several named objects or groups, but it has no structured metadata.
Colour, materials, and textures
OBJ keeps appearance in a separate Material Template Library (.mtl) file. The OBJ names the library with an mtllib statement and applies a named material to faces with usemtl. The MTL file defines colours and can point to image files for textures. All of those files have to travel together, or the colours are lost.
Some programs also accept per-vertex colour, written as red, green, and blue values after each vertex's X, Y, and Z. It is a widely supported convention rather than part of the original specification, and it suits 3D scans, where every point has a measured colour.
Units and scale
OBJ coordinates have no units, and programs do not agree on what a coordinate means. Onshape, for example, writes OBJ files in metres only, so a 50 mm part is written as 0.05; software that assumes millimetres shows it at a thousandth of its size. Check one known dimension after every import.
Axes can differ too. Some programs treat Z as up and others Y, so a model can arrive lying on its side. Most exporters let you choose the up axis.
OBJ for 3D printing and machining
For single-colour printing, OBJ works much like STL: the slicer turns its polygons into triangles, and some slicers, PrusaSlicer among them, ignore the materials and textures. OBJ has also been widely used for multi-colour printing, because unlike STL it can carry colour. For CNC machining it is the wrong format, since it only approximates the surface with facets. Send STEP instead.
| Feature | OBJ | STL | 3MF |
|---|---|---|---|
| Encoding | Plain text | Binary or text | ZIP archive of XML |
| Face shapes | Triangles, quads, and larger polygons | Triangles only | Triangles only |
| Units | None | None | Declared, millimetre by default |
| Colour and textures | Through an MTL file and images | No standard support | Built in, with extensions for textures |
| Several objects | Yes, as named objects or groups | No object structure | Yes, with a build list |
| Metadata | Comments only | An 80-byte header | Structured fields |
How to export a good OBJ
- Export only the objects you want made, as closed meshes.
- Set the export scale so one unit is one millimetre, or note the unit you used.
- Triangulate the mesh if the receiving software needs it. Some programs have only basic OBJ support and read triangles only.
- Keep the .obj, .mtl, and texture images together, for example in one ZIP file, if colour matters.
- Reopen the export to check its size, orientation, and any holes.
At Wyntek
Wyntek accepts OBJ uploads, along with STL, 3MF, STEP, IGES, SLDPRT, F3D, and DXF. Maximum upload size depends on your plan, up to 250 MB. STL or 3MF is fine for FDM and SLA printing; for CNC machining, send STEP. Upload the file and you see the price in US dollars before you submit.
Upload a file for printing