STEP→STL Your file stays in this tab · nothing is uploaded

What is the difference between STEP and STL?

This is the most-asked question on this site's subject and there is a short honest answer: STEP describes surfaces, STL describes triangles. Every number below was measured on the machine that wrote this page and is re-checked by npm test. Nothing here is a rule of thumb.

The short version

A STEP file stores geometry as exact mathematical surfaces. A cylinder in a STEP file is a radius, a height and a position — no approximation involved, and the file is often human-readable text you could open in a text editor. An STL file stores a flat list of triangles, each one three points and a normal. The cylinder is gone. What remains is whatever number of flat facets the tessellator chose to approximate it with.

So the difference is not quality, not precision settings, not file format generation. It is what kind of thing the file knows about the part. One knows the exact shape; the other knows a finite set of flat panels that come close.

The same cylindrical surface as an exact description and as a triangle approximation On the left a smooth cylinder outline labelled STEP, stored as a radius and a height. On the right the same outline rebuilt from straight line segments labelled STL, where each straight segment is one flat triangle edge. STEP: an exact description radius and height stored once, exactly change the radius, it is still one exact number STL: an approximation 8 straight segments drawn how many you get is a quality choice, and the surface is now only near the real one
The difference in one picture. The left outline is the kind of thing a STEP file can write down: a radius, and it stays exact no matter how big. The right outline is the kind of thing an STL file can write down: a run of straight segments, and how many of them is a decision somebody made before you ever opened the file. Every figure in this page follows from that one asymmetry.

Where the difference shows up as a number

Since the two formats describe different kinds of thing, their file sizes are not comparable and a ratio between them means very little on its own. But side by side over the same seven test files, the sizes tell you something concrete: the direction of the size change depends on the shape, not on the quality of the conversion. Flat geometry shrinks dramatically, because a plane costs the same few bytes whether the file describes it as a surface or as two triangles. Curved geometry grows, because describing it as triangles costs more bytes than describing it as a radius.

Source bytes against output STL bytes at Normal, measured by npm test over the project's own test files. The last column is output divided by input and is recomputed from the raw byte counts.
Test fileSource bytesNormal triOutput STLOutput ÷ source
simple-cube.stp8,24712684 B0.08×
cube-10x10.stp9,40412684 B0.07×
cube-10x10.igs (IGES)11,56212684 B0.06×
rounded-cube.step21,070562,884 B0.14×
conical-surface.step9,64051625,884 B2.69×
as1_pe_203.stp (18 parts)139,7526,088304,484 B2.18×
as1-oc-214.stp (18 parts)441,9687,372368,684 B0.83×

Read the first three rows and the last two rows as two different phenomena. The cubes are 8–12 KB of exact geometry that collapses into 684 bytes of triangles, because a box has six planes and each plane is two triangles. The cone and the assemblies run the other way: an output larger than its input, because the exact surface was cheap to describe and the triangles are not. The 18-part assembly is the clearest case. Its STEP file is 139,752 bytes and the STL that comes out is 304,484 bytes, a factor of 2.18, and the same part through a different AP protocol lands at 441,968 bytes of STEP for 368,684 bytes of STL. Neither number says anything about whether the conversion was good.

Output size against source size for a flat cube and a conical surface, drawn to one byte scale Both pairs are drawn to the same scale of 25 pixels per kilobyte. A cube with a 9,404-byte source has a teal bar of 235 pixels and produces a 684-byte STL, an orange bar of 17 pixels, roughly one fourteenth the size. A cone with a 9,640-byte source has a teal bar of 241 pixels and produces a 25,884-byte STL, an orange bar of 647 pixels, roughly two and a half times larger. Flat geometry shrinks. Curved geometry grows. both pairs drawn to one scale: 25 px = 1,000 B cube-10x10.stp 9,404 B STEP in 684 B STL out — 0.07× conical-surface.step 9,640 B STEP in 25,884 B STL out — 2.69×
Two files of almost the same source size, opposite outcomes. The top pair is the teal STEP input with the orange STL it produces; the bottom pair is the same drawing for a curved part. Both pairs are drawn to the same scale — 25 pixels per kilobyte — so the orange bar really is fourteen times shorter on the cube and two and a half times longer than its teal bar on the cone. Same converter, same preset, same format pair, and the two sources differ by 236 bytes. The size difference is telling you about the shape, not about the conversion.

The number that actually matters: triangle count

If you keep one idea from this page, keep this one. An STL is a triangle count. A binary STL stores an 80-byte header, a 4-byte triangle count, and then exactly 50 bytes per triangle, so the whole file size is decided by the triangle count and nothing else:

The binary STL size identity
Identitybytes = 84 + 50 × triangles
Invertedtriangles = (bytes − 84) ÷ 50
Worked exampleA 10 mm cube converts to 12 triangles, so 84 + 50 × 12 = 684 bytes. The IGES file describing the same solid also comes to 684 bytes, from the same 12 triangles.
Why it is trustworthyThe engine vendor ships a reference cube-10x10.stl next to the cube-10x10.stp it converts from. Our run of that STEP gives 12 triangles, and the vendor’s own file is 684 bytes on disk. Two independent artefacts, one identity.

This is also why a bigger STL is not a better one. If two files of the same part differ in size, they differ in triangle count, which means a finer setting ran — not that the conversion was more correct.

Why the triangle count is a choice, not a fact

Because surfaces are being sampled, the number of triangles is set by how finely you asked. This converter offers three settings, and they diverge exactly where you would expect: on curvature.

Triangle counts at each quality setting, measured by npm test. Fine ÷ Draft is recomputed from the raw counts rather than trusted.
Test fileShapeDraft triNormal triFine triFine ÷ Draft
simple-cube.stpFlat cube1212121.0×
cube-10x10.stpFlat cube1212121.0×
cube-10x10.igs (IGES)Flat cube1212121.0×
rounded-cube.stepRounded edges40561403.5×
conical-surface.stepCurved surface2865162,1427.5×
as1_pe_203.stp (18 parts)Assembly3,8486,08817,8484.6×
as1-oc-214.stp (18 parts)Assembly4,9007,37221,1164.3×

Two things to take from it. A flat part cannot identify the setting — all three cubes read 12 across every quality, because a flat face needs exactly two triangles no matter how precisely you ask. And the settings separate fastest on the hardest geometry: Draft to Fine multiplies the cone by 7.5 and the rounded cube by 3.5, while leaving the flat cubes untouched. If you want to know which setting actually ran, convert something curved.

Triangle counts for a flat cube, a rounded cube and a cone at three quality settings, each row scaled to its own Draft bar Each row is scaled so its own Draft bar is the same length, which is what makes the rows comparable. The flat cube reads 12, 12 and 12, so all three bars are equal length and the row is labelled 1.0 times. The rounded cube goes 40, 56, 140, so its bars are 1.0, 1.4 and 3.5 times its Draft bar. The cone goes 286, 516 and 2,142, so its bars are 1.0, 1.8 and 7.5 times its Draft bar and the Fine bar is the longest in the whole figure. Each row scaled to its own Draft bar, so the ratios are comparable Draft Normal Fine Fine ÷ Draft Flat cube 12 12 12 1.0× — no difference at all Rounded cube 40 56 140 3.5× Cone 286 516 2,142 7.5× Bar length is relative to each shape’s own Draft count, not to the shapes above it. 2,142 and 12 cannot share one axis, so the three rows are never on the same scale.
The quality setting is invisible until the geometry curves. Each row is scaled to its own Draft bar, because a flat cube and a cone cannot share an axis — 12 against 2,142 would hide the flat cube entirely. Read the ratios instead. The flat cube is three identical bars: 12, 12, 12, a factor of 1.0, so on a box you cannot tell the settings apart at all. The rounded cube separates to 3.5× and the cone to 7.5× — 286 triangles against 2,142 for the same cone. If a setting seems to make no difference, check whether your part has any curved surface to give it something to spend triangles on.

Why there is no way back

Reading the question “can I convert STL to STEP?” as a request for a missing feature would be a mistake, so here is the actual reason it is not a feature.

STEP to STL is sampling: the exact surfaces already exist and you are deciding how finely to walk them. STL to STEP is reconstruction: you have a list of flat triangles and you would have to work out which surfaces a human author originally intended. Many different surfaces fit the same triangles. A tessellator that chose 12 panels around a curve and one that chose 2,142 produce triangles that differ slightly, and both are perfectly good tessellations of the same cone. Nothing in the STL file records which one happened, so there is no correct answer to recover.

What that means in practice is a housekeeping point rather than a limitation to work around: keep the STEP file. The STL is disposable, because you can regenerate it from the STEP in seconds with the converter on the front page. The reverse is not true of the STEP file, and it never was.

The unit surprise, which is really the format talking

An STL record is 50 bytes of coordinates and a normal. There is nowhere in that record to say whether a coordinate of 10 means 10 mm or 10 inches. That is not an oversight in your file; it is the format. Which is why unit errors are recognisable when they happen: they arrive as a clean factor of 25.4, the number of millimetres in an inch, rather than as a vague drift.

Unit handling measured from the test files
Unit hereEverything is measured in millimetres, the engine default. The unit declared inside your STEP file is applied before you see a number.
Proof pairTwo geometrically identical cubes: one declares UNIT('INCH') and writes its coordinates as multiples of 39.370078740157 (= 1000 ÷ 25.4), the other declares millimetres and writes 1000. Both measure 1000 × 1000 × 1000 mm after the declared unit is applied.
OrientationNothing is rotated, aligned, centred or re-scaled. Coordinates land in the STL in the system the model already used, so laying the part flat for printing is your slicer’s job.
Large assembliesThe 18-part AP203 model measures 5080 × 2209.8 × 3810 mm and the AP214 model 200 × 150 × 84 mm. Both declare millimetres and neither is rescaled on the way out.

One more difference worth knowing: the mesh can be open

A STEP file can describe a solid that is not actually closed, and this converter triangulates rather than repairs. So a gap in the source leaves as the same gap in the STL, and a file that looks fine can still be unprintable. There is a number that settles it: count the mesh edges. A closed shell has every edge shared by exactly two triangles.

Our IGES test cube is a solid, so it should close, and it does — 18 distinct edges across 12 triangles, every one of them used exactly twice, forming one connected piece. The arithmetic generalises: 12 triangles carry 12 × 3 = 36 edge-uses, and a closed mesh uses each edge twice, so 36 ÷ 2 = 18. Any edge used exactly once is a hole, and it arrived that way in the STEP file rather than being introduced by the conversion. The verification page walks through this check and the other four in detail.

What this converter reads, stated plainly

Many converters that advertise STEP to STL also advertise a much longer list of formats. This one does not. It reads STEP and IGES, meaning .step, .stp, .iges and .igs, and writes STL. It does not read OBJ, PLY, 3MF, GLB, FBX, DWG or OFF, and it cannot be made to without replacing the engine.

The whole difference on one screen

What each format stores and what the conversion costs
STEP storesExact surfaces — a cylinder as a radius. Readable text, editable in a CAD tool, carries units and a feature tree.
STL storesTriangles. A flat list of three points each, with no units, no colour, no material and no part names.
The conversionOne-way and lossy. Surfaces are sampled into triangles, and the exact definition does not survive.
Size relationshipNo fixed direction. Flat parts shrink (9,404 B → 684 B), curved parts grow (9,640 B → 25,884 B). Size follows triangle count, nothing else.
Triangle countChosen, not discovered: 12 on a cube at every setting, 286–2,142 on a cone. Output bytes = 84 + 50 × triangles.
Going backNot a conversion but a reconstruction. Keep the STEP file; the STL is disposable and regenerable.
UnitsMillimetres, with the STEP file’s declared unit applied first. The STL does not record the unit, so a misread shows up as a clean 25.4× error.

If you arrived with an STL and a question about turning it back into something editable, the honest answer is that the tessellation is the best available record of that shape and the surfaces are gone. Keep the STEP file next time, and this conversion stops being a one-way door.

Where these numbers come from

The converter on the front page reports the bounding box, triangle count and solid-part count for your own file after every run, so you can check any of this against your own part. Its about page states who runs it and what it will not do.