Convert STEP to STL in your browser
Drop a .step / .stp / .iges / .igs file. You get back an .stl you can slice — a plain 10 mm cube comes out as 12 triangles and exactly 684 bytes — with the bounding-box size and triangle count measured on your own machine.
Changing any control re-runs the conversion on the file that is already loaded.
model.stl
- Bounding box
- —
- Triangles
- —
- Solid parts
- —
- B-rep faces
- —
- Source file
- —
- STL size
- —
- Tessellation time
- —
- Coordinates
- —
How to convert a STEP file to STL
- Drop the file. STEP and IGES exports from SolidWorks, Fusion, FreeCAD, Solid Edge, OnShape or a CAD viewer all work, as long as the extension is
.step,.stp,.igesor.igs. - Pick a quality. Normal is the right starting point for 3D printing. Choose Draft for a quick fit check or a large assembly you only need to eyeball, Fine when curved surfaces have to print smooth.
- Download and check the number. Compare the bounding box this page prints against your slicer. If they disagree by exactly 25.4×, a millimetre/inch unit mismatch is the cause, not a broken conversion.
What this converter supports
| Input | STEP (.step, .stp) and IGES (.iges, .igs), ISO 10303 application protocols 203 / 214 / 242 as implemented by the OpenCASCADE kernel. One file per conversion. |
|---|---|
| Output | STL, binary (default) or ASCII. Written by this page from the triangles the engine returns; the engine itself has no STL writer. |
| Quality | Three presets that set the engine’s tessellation parameters. Draft = 0.02 bounding-box ratio, 0.5 angular. Normal = 0.005 / 0.3. Fine = 0.001 / 0.1. These are this page’s own choices, not a CAD standard. |
| Unit | Everything is measured in millimetres (linearUnit: millimeter, the engine default). OpenCASCADE applies the unit declared inside your STEP file before the numbers reach this page. The optional inch output re-expresses the coordinate values as millimetres ÷ 25.4; it rewrites numbers only, it does not scale the geometry. |
| Engine | occt-import-js 0.0.23, a WebAssembly build of OpenCASCADE Technology, 7,604,031 bytes of wasm (7.25 MiB) measured on this machine, LGPL-2.1. |
| Network | Every request goes to this page’s own folder: the script and stylesheet on load, then the conversion worker, its engine glue and the wasm engine when you drop the first file. Your model file is never sent anywhere. |
Limits you need to know
- One file at a time. No batch queue, no drag-and-drop of a folder, no account, no history. Reload the page and you are at zero.
- It triangulates, it does not repair. STEP holds an exact boundary-representation model; STL holds flat triangles. The conversion is lossy in one direction only, and a STEP file with gaps, self-intersections or shells that are not closed will come out as a mesh with the same holes. Fix the model in the CAD tool that made it.
- Colours and materials are dropped. The engine returns per-part colours and the preview paints with them, but the STL format stores only triangles and face normals, so nothing else survives.
- Large assemblies are unverified. The biggest real file we ran through this page is
as1-oc-214.stpat 441,968 bytes, which produced 7,372 triangles in about half a second. Beyond a few megabytes the wasm heap can run out and the engine stops for good until you reload. If a multi-part assembly fails, split it in your CAD tool. - The first conversion downloads the engine. 7.25 MiB, once per browser session and then from cache. On a metered phone connection, plan for that.
- The inch output option converts numbers, not geometry. It divides the coordinate values by 25.4 on the way into the STL. The triangle count, the file size and the shape stay exactly the same; only the unit the numbers are read in changes. The default mm output is byte-for-byte what it was before this option existed.
- Preview is a plain canvas renderer. It shows the actual triangles of the STL, with back-face culling and depth sorting. Above 80,000 triangles depth sorting is skipped to stay responsive, so the picture can look inverted in places. The exported STL is unaffected.
Questions people actually ask
Is this an online STEP to STL converter, or does it really convert step files locally?
It is a static web page. The conversion is done by a WebAssembly build of OpenCASCADE that runs inside a worker thread of the tab. Read the source of app.js and engine/worker.js: the worker uses one XMLHttpRequest for the engine’s own wasm file from the same folder, and then Blob URLs. There is no API endpoint, no form POST, no analytics script, no cookie.
How do I convert stp to stl for 3D printing without a CAD program?
Drop the file here, leave quality on Normal, download the binary STL, open it in your slicer. If the part prints at the wrong scale, check the bounding box this page measured against the size in the slicer before you blame the conversion.
Should I pick binary or ASCII STL?
Binary. It stores each triangle in a fixed 50 bytes plus an 84-byte header, so a 12-triangle cube is exactly 684 bytes; ASCII writes the same triangles as text and ends up several times larger for the same geometry. Every slicer reads binary. Choose ASCII only when a tool explicitly asks for a text STL you can open in an editor.
Which quality should I use?
Normal for printing. Draft when you only need to check fit or orientation on a heavy assembly, Fine when a fillet or a cylindrical face looks faceted in the preview. The triangle counts from our test run show what that costs: a rounded 10 mm cube goes 40 → 56 → 140 triangles across the three presets, a conical part goes 286 → 516 → 2,142.
Can I convert iges to stl as well, or only step?
Both. The engine exposes a STEP reader and an IGES reader, and this page picks between them by extension. IGES is surface data rather than a solid, so a box drawn in IGES may come back as loose faces instead of a watertight shell.
Does it work on a phone?
Yes, down to 390 px wide, with the file picker and the download working through the browser. The engine download is the expensive part, and a heavy assembly can outgrow a phone browser’s memory sooner than a desktop one.
Why does my converted file have no flat bottom or the wrong orientation?
Nothing is rotated, aligned, centred or re-scaled here. The triangles land in the STL in the same coordinate system the model had in the STEP file. Orientation is your slicer’s job.
The numbers on this page, and where they come from
Every figure is measured, not assumed.
- Engine size 7,604,031 bytes — byte count of
engine/occt-import-js.wasmas downloaded from the occt-import-js 0.0.23 release and read from disk on this machine. - Binary STL = 84 + 50 × triangles — the published binary STL layout, cross-checked against the reference file shipped with the engine’s own test set:
cube-10x10.stpyields 12 triangles and the vendor’scube-10x10.stlis 684 bytes. 84 + 12 × 50 = 684. - Triangle counts and sizes in the table below — produced by running the same engine version in Node.js on this machine over the project’s own test files, then repeated in the browser. Reproduce them yourself with
npm test(scripts intests/re-run every sample at all three presets and diff each number against this table). The time each conversion took in your browser is printed in the stats grid after every run. - Unit behaviour — the engine documentation defines
linearUnitas the unit of the output, default millimetre; the NIST AS1 test assembly, published once in inch-based AP203 and once in millimetre-based AP214, measures 5080 × 2209.8 × 3810 mm and 200 × 150 × 84 mm respectively, a ratio of exactly 25.4.
| Test file | Bytes | Draft tri | Normal tri | Fine tri | Normal binary STL |
|---|---|---|---|---|---|
| simple-cube.stp | 8,247 | 12 | 12 | 12 | 684 B |
| cube-10x10.stp | 9,404 | 12 | 12 | 12 | 684 B |
| conical-surface.step | 9,640 | 286 | 516 | 2,142 | 25,884 B |
| rounded-cube.step | 21,070 | 40 | 56 | 140 | 2,884 B |
| cube-10x10.igs (IGES) | 11,562 | 12 | 12 | 12 | 684 B |
| as1_pe_203.stp (18 parts) | 139,752 | 3,848 | 6,088 | 17,848 | 304,484 B |
| as1-oc-214.stp (18 parts) | 441,968 | 4,900 | 7,372 | 21,116 | 368,684 B |