3D printing · No upload
3MF to STL
Turn a 3MF from your slicer into a binary STL that any tool will open. The archive is unpacked and checksummed by your browser, every build placement is applied, and the unit the file declares is converted with the factor printed beside it — never applied silently. Nothing is uploaded, nothing is downloaded, and the network meter below proves the zero live.
How this converter works
A 3MF is a ZIP archive with an XML model inside it, and both halves are read here by first-party code. The archive is read from its central directory rather than by scanning local file headers, and that is not a stylistic choice: an entry written with the streaming flag carries zeros for its checksum and both sizes in the local header, so a local-header scan is how a reader silently produces empty parts. The model part is found through the archive's own relationships, decompressed by your browser's built-in inflater, and then verified against the checksum the archive recorded for it — a damaged file becomes a named refusal instead of a wrong model. The XML goes through your browser's own parser, and the result is checked for a parse error before anything is trusted, because that parser reports failure in the document rather than by throwing. Then every build item's and component's transform is applied, recursively, because ignoring them would stack every object at the origin and write a file that looks fine and is wrong.
What comes out is a binary STL. Each triangle is written as its three vertices plus a normal computed here from the winding and written unit-length — the source may not have carried usable normals, and a degenerate face gets a zero normal, which is what the format specifies when it cannot be known. The attribute byte count is written as zero. Binary rather than ASCII because an ASCII STL of the same mesh is roughly six times larger and every slicer reads binary, so the text form would cost size and gain nothing. The header is 80 bytes carrying this site's name and nothing else. The preview above the results is the same mesh you are about to download, labelled with the file it came from, so you can turn it over before you save it.
The honest limits. 3MF declares its unit inside the file; STL declares none. This page reads the declared unit, converts the coordinates to millimetres, and prints the factor it used — nothing is scaled silently. Real things are lost on the way across, and they are named rather than glossed: colour and materials, because STL carries neither; metadata and the embedded thumbnail; the declared unit itself; and per-object structure, because an STL has no concept of separate objects, so every object your 3MF builds is merged into one mesh, with each build item's placement applied first. What is refused is refused by name — ZIP64, an encrypted archive, a compression method this page doesn't implement, a missing model part, a beam lattice, a mismatched checksum — and a refusal always means no file was written. Input files above 256 MB and meshes above 500,000 triangles are declined with both numbers stated, because the whole mesh has to fit in your device's memory as raw floats.