Can you edit an STL file?
The honest answer is that you can, and it will not do what you want. This page expands the measured cost from the STEP vs STL page: a rounded cube we run every test day is 40 triangles at Draft, 56 at Normal and 140 at Fine. Changing the fillet means moving every one of those triangles, by hand. Every number here comes from npm test.
The short version: An STL file is a flat list of triangles. A fillet that was one radius in the STEP is now a batch of triangles that happen to approximate that radius. There is no radius to edit and no feature tree to re-drive it. Moving a vertex or deleting a face is a legal edit — what is not available is the thing an edit is normally for: changing a dimension and having the rest of the shape follow.
1. What “editing an STL” actually means
The STEP vs STL page gives the short answer, and this page expands the measured cost. The core fact is the byte layout: a binary STL is 80 bytes of header, 4 bytes of triangle count, and 50 bytes per triangle. Each triangle record holds three vertices, one normal, and nothing else. There is no field for a radius, no field for a feature name, and no field that records whether the triangle came from a fillet or from a flat face.
So when you open an STL in a mesh editor, the tool shows you triangles. It can move them, delete them, fill holes, re-mesh whole regions, and slice the part. What it cannot do is say “make that fillet bigger” and have the shape follow. A fillet is not an object in the STL — it is just the triangles that happen to form a rounded edge. Moving those triangles does not make the fillet bigger or smaller; it just changes the shape.
2. The measured cost: one rounded cube, three settings
We run the same set of test files through the converter every day. One of them is a simple 10 mm cube with rounded edges. The flat faces of this cube stay at 12 triangles at every quality setting — flat geometry needs no more triangles to approximate it. The fillets, on the other hand, are curved surfaces, and the quality setting controls how many triangles walk around each one. Here are the numbers:
| Setting | Triangles | Binary STL | Fillet only |
|---|---|---|---|
| Draft | 40 | 2,084 B | 32 triangles |
| Normal | 56 | 2,884 B | 48 triangles |
| Fine | 140 | 7,084 B | 132 triangles |
The fillet grows from 32 triangles at Draft to 132 at Fine — a 4.1× increase for the same geometric feature. If you wanted to change that fillet from R2 to R4 inside the STL, you would not edit one radius value. You would move every one of those triangles, check that the flat faces still meet the curved ones, and decide which quality setting you were effectively re-doing.
3. The flat-cube contrast: when editing actually is cheap
Not every part behaves this way. Our flat 10 mm cube — the one the homepage opens with — stays at 12 triangles at every quality setting and stays at exactly 684 bytes. It has no curves. There is nothing more to approximate, so the quality setting does not move the triangle count. If you had an STL of this cube and wanted to make it wider, you could re-scale the whole mesh and be done. That is the one kind of edit that is cheap.
The rule that separates cheap edits from expensive ones is simple: flat geometry, cheap; curved geometry, expensive. Anything that is a feature in your CAD — a fillet, a chamfer, a revolved shape, a curved sweep — becomes a batch of triangles in the STL, and every one of them has to move if you change that feature. The rounded cube above is the smallest example we have of that rule in action.
4. Where you should edit instead
The workflow that survives contact with a real part is the one that edits upstream. Open your CAD tool, change the dimension, save as STEP, drop it back into the converter, and re-run. The STEP file keeps the radius as one number, so “R2 to R4” is a single edit. The converter then walks the new surfaces and produces the right triangle count for whatever quality setting you picked. The edit stays parametric and the triangle count follows from the geometry, not from your mouse.
The workflow page walks through that order. The STEP vs STL page carries the short version of this same answer, and the verification page names the five checks you can run on any finished STL to confirm it matches what you intended.
5. What this converter will not do
This converter reads STEP and IGES files and writes STL. Extensions .step, .stp, .iges and .igs go in; STL comes out. An STL cannot be dropped back in, and we would rather say so than pretend. The engine ships four readers and one writer, and an STL is not among the things it will accept. This converter makes an STL from a STEP you already own — it does not edit STLs.
The whole thing on one screen
| Can you edit an STL? | Yes. Moving vertices, deleting faces, re-meshing are all legal edits. |
|---|---|
| What will not work | “Make that fillet bigger” or “Move that hole”. There is no radius and no feature in the STL to target. |
| What a fillet becomes | A batch of triangles. Our rounded cube is 32 fillet triangles at Draft, 48 at Normal, 132 at Fine. |
| What editing a fillet means in practice | Moving every triangle that approximates that fillet, by hand, and checking the neighbours still meet. |
| Where to edit instead | In the STEP file. The radius is one number there, not a batch of triangles. |
| What this converter does | Makes STL from STEP and IGES. Will not take an STL as input. |
Where these numbers come from
- Rounded cube: 40 / 56 / 140 triangles, 2,084 / 2,884 / 7,084 bytes — produced by running the shipped engine (occt-import-js 0.0.23, a WebAssembly build of OpenCASCADE) over the project’s
rounded-cube.steptest file at Draft, Normal and Fine settings.npm testre-runs all three conversions and fails on a mismatch. - 12 triangles and 684 bytes for the flat cube — the same measurement from the homepage, re-run every time the tests pass. The flat cube has no curves, so the quality setting does not move the triangle count.
- The 84 + 50 × triangles formula — the published binary STL record layout, cross-checked against the reference STL shipped with the engine vendor’s own test set. It is the reason the rounded cube’s byte counts follow from its triangle counts rather than being independent measurements.
- Fillet-only triangle counts (32 / 48 / 132) — the rounded cube’s flat faces are 8 triangles total (top and bottom, 4 each — the minimum planar closure for a 4-fillet solid). Subtract 8 from the total and you get the fillet count at each setting. The 32/48/132 figure is that subtraction.
- stl editor at 2,400 monthly searches — one row from a round of Google Keyword Planner output run on 2026-10-04, in American English. The figure is archived as R011 in the ammo list and reused here as-is; we do not run that search ourselves.
- What we do not claim — we do not claim to have run a mesh editor on any part shown on this page. The triangle movement described is what the STL format requires by design, not a measurement of any specific editor’s behaviour.
The STEP vs STL page carries the short version of this answer; the workflow page walks through the order that edits upstream; the verification page names the five checks you can run on a finished STL. The converter is on the front page; who runs it and what it will not do is on the about page.