Repair non-manifold STL errors before print
What holes, normals, self-intersections, and non-manifold edges do to a slice, which tools report and which fix them, and two common repair tools unsupported.
Open the file in your slicer before you go looking for a repair tool. PrusaSlicer and OrcaSlicer both inspect a mesh as they import it and count what they find, and PrusaSlicer fixes a specific class of defect without asking. If neither of them says anything, there is usually nothing to do.
The confusing part is that most advice for the harder cases points at tools that have moved or shut down. Microsoft 3D Builder has been unsupported and absent from the Microsoft Store since July 2024. The Netfabb cloud service that older PrusaSlicer documentation sends you to does not resolve in DNS any more. Meshmixer still downloads and still works, and Autodesk has said in writing that it is finished with it. So the real list of tools is shorter than the search results suggest, and two of the tools that are still good have changed in the last few months.
The defects, and what each one does to a slice
A slicer has to answer one question at every layer: is this point inside the object or outside it. Each defect below is a different way of making that question ambiguous, which is why some of them destroy a print and others get quietly absorbed.
A hole is an edge used by one triangle where it should be used by two. The surface is open, so along that edge there is no inside. This is the defect people most often set out to repair, and also one of the more survivable ones, because slicers patch across it. Cura’s own setting descriptions say it “tries to stitch up small holes in the mesh and remove parts of a layer with big holes” as normal behavior, which tells you both that small holes are handled and that large ones cost you geometry.
A flipped normal is a triangle wound so that its face points into the solid instead of out of it. The surface can be perfectly closed and still slice wrongly, because the slicer’s inside test disagrees with itself in that region. This class is what slicer auto-repair is best at.
A non-manifold edge is an edge shared by three or more triangles. It usually means two shells were welded along a seam, or an internal wall was left inside a solid. The result often prints, just not as the shape you expected, with a stray internal perimeter or a missing patch.
A self-intersection is one part of the surface passing through another, typically after a boolean or a mirror. These look alarming and frequently do not matter. The Blender toolbox documentation says as much about its own intersection check: “some slicer applications can deal with this, so it’s not always required to resolve this issue.” Cura’s Union Overlapping Volumes setting exists precisely to ignore the internal geometry that overlapping volumes create.
A degenerate triangle has zero area, because two of its vertices are identical or all three are collinear. No normal can be computed from it, so it is noise in every downstream calculation. PrusaSlicer strips these during its import repair.
Loose shells are the last one, and the sneakiest, because a stray fragment sitting inside or beside the part is invisible in a normal viewport and shows up as a blob on the plate.
Why STL invites this
An STL file is a list of triangles, each carrying three vertex coordinates and a normal. There is no shared vertex table and no record of which triangles are neighbours. Adjacency has to be reconstructed by comparing coordinates, which means comparing floating-point numbers with a tolerance, so whether two triangles touch is a judgement the program reading the file makes rather than a fact the file states. Since the format has no way to state that two triangles are connected, it has no way to state that the connection is broken.
3MF is the useful contrast. It stores an indexed vertex list, and its core specification (version 1.4.0, published February 6, 2025) makes validity normative for printable objects: “Every triangle edge in the mesh shares common vertex endpoints with the edge of exactly 1 other triangle,” and “All triangles MUST be oriented with normals that point away from the interior of the object.” That does not make every 3MF in the wild clean, but a conforming writer is not allowed to emit the defects STL has no vocabulary for. If you have a choice at download time, this is one more argument for the container, alongside the ones in storing print settings in 3MF or STL.
The tools, and the catch with each
| Tool | Reports | Repairs | The catch |
|---|---|---|---|
| PrusaSlicer 2.9.6 | Error count per object, optional non-manifold edge display | Reversed facets, backwards edges, degenerate facets, on import | Deliberately does not fill holes |
| OrcaSlicer 2.4.2 | Error count, which enables Fix Model | Fix Model, via CGAL | Cross-platform only since 2.4.0 |
| Bambu Studio 2.8.2 | Warning symbol and a repair prompt | Windows repair API | Windows only, and admits it misses defects |
| Blender with 3D Print Toolbox 1.4.1 | Non-manifold edges, intersections, degenerate and distorted faces, thickness, overhangs, with counts | Make Manifold, and triangulation of distorted faces | No longer bundled with Blender |
| MeshLab 2025.07 | Non-manifold edges and vertices | Deletes faces, or splits vertices | Repair is destructive by design |
| Netfabb 2026 | Warning marker in the project tree | Manual and scripted automatic repair | Commercial Autodesk product |
| Meshmixer 3.5.0 | Stability and thickness analysis | Auto-repair, hole filling, make solid | Not in development, not supported |
| Cura 5.13.0 | Nothing about manifoldness | Nothing, only slice-time workarounds | Easy to mistake its Mesh Fixes for repair |
Start with the slicer you already have
PrusaSlicer 2.9.6 runs a repair pass as it loads a mesh, on every platform, and tells you the outcome with an “Auto-repaired” message and a count. The counters in its source name exactly what that covers: edges fixed, degenerate facets, facets removed, facets reversed, and backwards edges. What it does not do is close holes, and the code is candid about why. The hole-filling call was taken out with the note that “mostly it does more harm than good.”
Its heavier option has been renamed, which matters if you are following an old guide. The context menu item now reads “Fix by Windows repair algorithm”, and it calls the local Windows.Graphics.Printing3D API, so it is Windows-only and is not the cloud service it used to be. Prusa’s knowledge base article still tells you to pick “Fix by the Netfabb” and still describes Microsoft’s APIs as reaching Netfabb; the application does not agree with it any more. There is also a Preferences toggle called “Show non-manifold edges”, which is the cheapest way to see where the problem is rather than only how many there are.
OrcaSlicer is where the most useful recent change happened. Its “Fix Model” was a Windows-only wrapper around the same Microsoft API until 2.4.0 on June 20, 2026, when it was rebuilt on CGAL and became available on Linux and macOS. Confirming this takes a look at the tags rather than the documentation: 2.3.2 ships a Windows-specific implementation, 2.4.2 ships the CGAL one instead. The OrcaSlicer wiki has not caught up and still says the feature “is only available for Windows users”, so do not conclude from it that Linux is out.
Bambu Studio 2.8.2 has not made that move and still uses the Windows path, so Fix Model there is Windows-only. Its wiki is unusually straight about the limits, saying Studio “can only detect and repair some errors; certain model defects may remain undetected, so a repair prompt might not appear.” Treat a silent import as weak evidence rather than a clean bill of health.
Cura is the one to understand so you stop hunting for a button that does not exist. Its Mesh Fixes group changes how slicing behaves, never the mesh: Union Overlapping Volumes ignores geometry created where volumes overlap, Remove All Holes keeps only the outside shape of each layer, and Extensive Stitching closes open holes with touching polygons at a real cost in processing time. Keep Disconnected Faces is in the same group and its own description calls it a last resort. None of this writes a corrected file back out, and Cura will not tell you the mesh is non-manifold.
Blender, when you want to know what is actually wrong
The 3D Print Toolbox is the best free diagnostic here, because it gives you counts and then selects the offending geometry so you can look at it. Check All runs its whole list: Solid for non-manifold and badly oriented edges, plus Intersections, Degenerate, Distorted, Thickness, Edge Sharp, and Overhang.
Find it in the right place, though. It is no longer part of a Blender install. It is absent from the bundled add-on set in Blender 5.2.0 LTS and the manual page that used to document it returns a 404. It now lives on the extensions platform at version 1.4.1, updated August 5, 2026, and it needs Blender 4.2 LTS or newer. If you remember enabling it in Preferences years ago and cannot find it, that is the reason.
For repair it offers Make Manifold, which “attempts to fix various problems which might make a mesh non-manifold, such as by fixing bad normals, filling holes, and removing empty edges and faces”, and a triangulate action for distorted faces. The toolbox is honest that some of its own findings need hands rather than an operator: on distorted faces it says “it would be best to triangulate by hand here.”
MeshLab, for targeted work on non-manifold geometry
MeshLab 2025.07 has two filters aimed exactly at this, named Repair non Manifold Edges and Repair non Manifold Vertices by splitting. Read the filter description before running either, because it doubles as the warning. One path removes faces, and for each non-manifold edge it “iteratively deletes the smallest area face until it becomes 2-Manifold”. The other splits vertices, after which “each non manifold edges chain will become a border.”
Both outcomes remove or open geometry rather than reasoning about your intent, and closing the resulting holes is a separate filter you run afterwards. Some MeshLab filters also refuse to run on bad input at all, with “Non manifold mesh. Please clean the mesh first.” It is the right tool when you know which defect you are attacking, and a poor one for a hopeful single click. Scan-derived meshes are its home ground.
Netfabb, for files that are badly broken
Netfabb is the heavyweight, now sold as Autodesk Fusion with Netfabb, currently Netfabb 2026. Its documentation describes two approaches, “manual and scripted, automated repair”, with automatic scripts that can run on the whole part during file load and manual repair that goes down to editing individual triangles. Parts with obvious errors get a warning symbol on their display color swatch in the project tree, and applying a repair lets you remove the old part, keep it, or keep and compare the two.
Copy that comparison step even if you never buy the software, because it treats a repair as something to inspect before accepting. Netfabb itself is a commercial Autodesk product, so it is not what you reach for over one broken download.
The two the internet still recommends
Microsoft 3D Builder comes up in almost every older thread and it is gone. Microsoft states it on both its deprecated and removed features lists, dated and unambiguous: “As of July 2024, 3D Builder is no longer supported and it was removed from the Microsoft Store. For ongoing 3D printing needs, contact your 3D printer provider for their recommendation.” The repair engine it fronted is the same Windows API that PrusaSlicer and Bambu Studio still call, so you have not lost the capability, only the app.
Meshmixer is a subtler case, because it still works. Version 3.5.0 was released on November 12, 2024 and last updated on January 6, 2025, and it remains a free download. Autodesk’s own answer on the Meshmixer site is the part to read before you build a workflow on it: there are “no current plans to retire Meshmixer”, but “the tool is no longer in development and will not be supported by Autodesk moving forward”, with Fusion offered as the successor. Its Auto-Repair, hole filling, bridging, and make-solid features are still effective at rescuing scan data. Prusa’s knowledge base gives the practical version of their reliability, saying Auto-repair “doesn’t always work” while Make solid “almost always works, but has its downsides (resolution loss).”
Use it if it solves your file today. Do not make it the only step in a process you expect to run in three years.
When repair changes the model
Every tool above can change geometry you cared about without mentioning it, and checking is the step people skip.
Write down four numbers before you repair and check them after: the bounding box in each axis, the triangle count, and the volume. A bounding box that moved means something outside the defect got edited. A triangle count that fell by a few is fine, and one that grew by an order of magnitude means you remeshed rather than repaired.
Then look at the specific things that go wrong. Hole filling can bridge a gap that was supposed to stay open, so a vent slot or a screw clearance hole that breaks a surface is the first place to inspect. Make-solid and voxel remeshing trade resolution for a guaranteed closed surface, which is a good trade for a sculpture and a bad one for a part with a tolerance. MeshLab’s non-manifold repair deletes faces, so it can hand you a new hole where an intersection used to be. And a normal-fixing pass on a mesh that is genuinely inside out can confidently solidify the wrong side.
Slice both versions and compare estimated filament and time. A large divergence you cannot explain by the defect you were fixing is a reason to look closer before it becomes a failed print. Then check the dimension that actually has to fit, with calipers on the printed part, not just the fact that the slicer stopped complaining.
If a STEP or other CAD source exists, fixing the model there and re-exporting beats repairing the mesh, because you are editing intent instead of triangles. Keeping STEP files with the printable mesh covers why that source belongs next to the printable file in the first place.
Keep the original either way. Repair is lossy, and the second attempt with different settings needs the input the first one consumed.
Where a library fits, and where it does not
Now you have two files, both valid meshes of nearly the same shape, and one of them printed. Where a library helps is here rather than during the repair: keeping the original and the repaired mesh as two named entries with the print history attached is how you answer “which one actually printed” six months later, instead of guessing between part-fixed.stl and part-fixed2.stl.
Be precise about how small that role is. PrintStash does not check mesh validity and does not repair anything. There is no manifold, watertight, hole, or normal-orientation test anywhere in the shipped 0.11.4 release, and its vault audit, despite the word repair appearing in it, is a storage and database integrity check: missing blobs, hash mismatches, unavailable external roots, orphaned objects, thumbnail and revision invariants. It never inspects geometry.
What it reads off a mesh is three numbers, computed from the loaded triangles: bounding box extents, triangle count, and volume. The volume field needs a warning, because it looks like a validity signal and is not one. It is calculated from the triangles and kept only when the result comes out positive, and an open surface has no well-defined volume, so a broken mesh can leave the field blank or fill it with a number that is simply wrong. A blank is also what a mesh too dense to load produces, above the default two million triangle cap, so the two are indistinguishable from the outside. That cap matters if you remesh, since a voxel pass can multiply triangle count past it and leave the file indexed with no geometry and no preview at all, as the memory limits on large meshes explains.
The version tracking is thinner than this job wants, too. A repaired mesh is different bytes, so it arrives as a separate model rather than a second revision of the first, and the revision vocabulary of labels, notes, and the known-good and failed statuses applies to G-code revisions only. A mesh cannot carry any of it. You can log a print against a specific mesh file, which is what makes the two entries distinguishable by outcome rather than by filename, but relating them to each other is a naming and collection habit you maintain yourself. Finding duplicate 3D models by content covers why the hash cannot do it for you.
Questions that come up
What does non-manifold actually mean?
It means the mesh describes a surface that could not exist as the boundary of a solid object. The usual cases are an edge shared by three or more triangles, which asks the slicer to treat one seam as the boundary of two different solids at once, and an edge used by only one triangle, which leaves the surface open so there is no inside along it. The 3MF core specification states the rule from the other direction for printable objects, requiring that every triangle edge share vertex endpoints with exactly one other triangle. The word also gets used loosely to cover flipped normals and self-intersections, which are separate problems with separate fixes, so find out which one you actually have before choosing a tool.
Do I need to repair a mesh if the slicer does not complain?
Usually not, with one caveat. PrusaSlicer and OrcaSlicer both check on import, and PrusaSlicer repairs reversed facets, backwards edges, and degenerate triangles automatically while telling you the count, so silence often means the file was fine or has already been quietly fixed for this slice. The caveat is that detection is not complete: Bambu Studio’s own documentation says it can only detect and repair some errors and that a repair prompt might not appear for certain defects. So if a print fails in a way that looks geometric, such as a missing wall, an unexpected internal perimeter, or a solid region where a cavity should be, run the mesh through Blender’s 3D Print Toolbox before blaming your settings.
Is Fix Model still Windows-only?
It depends on the slicer, and this changed recently. OrcaSlicer’s Fix Model became cross-platform in 2.4.0 on June 20, 2026, when it was rebuilt on CGAL, so it works on Linux and macOS now even though the OrcaSlicer wiki still describes it as Windows-only. Bambu Studio has not made that change and its Fix Model remains Windows-only. PrusaSlicer sits in between: its automatic import repair runs everywhere, while the heavier “Fix by Windows repair algorithm” calls a local Windows API and appears only on Windows. None of these is the old Netfabb cloud service, which no longer resolves in DNS.
Is Microsoft 3D Builder still an option?
No. Microsoft’s deprecated and removed features documentation both state that as of July 2024 3D Builder is no longer supported and was removed from the Microsoft Store, and directs people with 3D printing needs to their printer vendor instead. Because it was a front end for the Windows 3D print repair API, the same repair is still reachable through PrusaSlicer’s Windows option or Bambu Studio’s Fix Model on a Windows machine. If you are not on Windows, Blender with the 3D Print Toolbox or OrcaSlicer 2.4 and later gets you to the same place.
Should I still use Meshmixer?
For a one-off rescue of a scan or a sculpture, yes, since it is free, it still installs, and its make-solid and hole-filling tools remain effective at that job. For anything you plan to repeat, no. Autodesk’s own statement is that Meshmixer is no longer in development and will not be supported going forward, with Fusion named as the replacement, and the build on offer dates from November 2024 with a last update in January 2025. Prusa’s documentation is also realistic about the tools themselves, noting that Auto-repair does not always work while Make solid almost always does at the cost of losing resolution. Treat it as a working tool with no future rather than a foundation.
Does PrintStash check whether a mesh is watertight?
No. There is no manifold, watertight, hole, or normal-orientation check in the shipped release, and no mesh repair. It computes bounding box extents, triangle count, and volume from the mesh and stores those. The volume field is the one that misleads people here, because it is only stored when the computed value is positive, so a mesh that is not closed can leave it empty, and a mesh that was too large to load leaves it empty for an entirely different reason. Neither case is reported as a defect, because neither was evaluated as one. Validate meshes in a slicer, Blender, or MeshLab, and use the library for keeping track of which file you validated.
Sources
- PrusaSlicer behavior from the 2.9.6 release (June 25, 2026) and its source, where the repair counters, the “Fix by Windows repair algorithm” menu item, the
Windows.Graphics.Printing3Dcall, and the removal of hole filling all live. Prusa’s article on corrupted models is the source for the Meshmixer caveats and still uses the older Netfabb naming. - OrcaSlicer’s move to CGAL in pull request 12155 and the 2.4.2 release, against the wiki page that still describes the feature as Windows-only.
- Bambu Studio’s Fix Model documentation for the Windows requirement and the admission that some defects go undetected.
- The 3D Print Toolbox extension listing for version 1.4.1, its August 5, 2026 update, the Blender 4.2 LTS requirement, and the check and cleanup lists.
- MeshLab and the 2025.07 release, with the filter descriptions taken from
filter_clean/cleanfilter.cppin the repository. - Autodesk’s Netfabb help on repairing parts and automatic repair.
- Meshmixer for Autodesk’s support statement, the version and dates, and the feature list.
- Microsoft’s removed features and deprecated features lists for the 3D Builder statement.
- Cura’s Mesh Fixes descriptions from fdmprinter.def.json in the 5.13.0 release, since the older UltiMaker support article is no longer public.
- The 3MF core specification, version 1.4.0, for the manifold-edge and orientation requirements.
- PrintStash mesh parsing, the vault audit finding list, and the G-code-only revision fields from the repository at the shipped v0.11.4 tag.
All external pages checked on August 17, 2026.