3DFastCraft
A lightweight Windows app for 3D printing: shapes at exact sizes, cut and combine, a library of
parts made to your numbers, watertight STL and 3MF.
Website: 3dfastcraft.com · Download the latest release
In active testing. Tools marked beta are new and still being proved in real prints -
check what they give you before a long print. Releases come often.
The idea
It began as a replacement for Microsoft 3D Builder, which Microsoft retired: the same short
path from a shape on the plate to a printable part, with almost nothing to learn first. It then
grew well past it - a parts library, working mechanisms, molds, patterns, lithophanes.
The Classic view shows the tools 3D Builder had, for anyone who wants the old app back.
Advanced (the default) has every tool. Only buttons are hidden - every key works at both
levels. The Custom tab at the end of the ribbon holds the buttons you use most: right-click any
button, even a greyed one, and choose Add to Custom tab; right-click one there to move or remove it.
Almost all of it is written by Claude Code from prompts.
Features
Insert
- Shapes - cube, cylinder, cone, sphere, pyramid, wedge, torus, hexagon, tetrahedron, landing
on the plate at a sensible size.
- Custom shape - a primitive with its segments and roundness chosen before it is made.
- Text - lettering as an object: flat, round a circle or round a cylinder, any installed font.
- Sketch - lines, arcs, curves, freehand or an SVG on the plate, extruded or revolved. The
pointer's X and Y are read off the axes, and the line, rectangle or circle being drawn - or the
sides of a corner being dragged - carries its length. Right-click finishes the line; Esc
drops what is half drawn, then leaves the sketch and puts the camera back.
- Import - STL, OBJ, 3MF, SVG as a solid; another project joins the plate.
- Library (Ctrl+L) - parts made to your numbers, previewed as you type, remade later with
Edit settings: boxes and Gridfinity, organizers, hinges, clips, threads, washers, knobs,
gears and mechanisms, stairs, windows, doors, roofs with dormers, lithophanes and lamps,
calibration prints.
- Working model - any mechanism as a set to print and turn by hand: base, D-shafts,
crank or handwheel, guides that print without supports. Turn it plays the motion first
and stops at a jam.
- A set of parts is an assembly - laid out for printing or put down together, it goes in
as an assembly: picked, moved and copied by its name, each part still its own object.
Windows, doors and dormers come with their glass as a part of its own, and the glass can
be one clear sheet across the back, as thick as the frame is deep. Doors can be arched;
Windows begin with a Type - fixed (with its shapes), single hung, sliding or casement,
the sashes at two depths so the meeting rail shows, divided into lights by muntins - and any
square one can have an architrave (plain, with a lintel, pedimented) and false shutters
(louvered, paneled, planked), each a part of its own: on the wall when it stands, and laid
beside the window on its back when printed flat, so the facade prints up with nothing to support;
stairs can have a porch; roofs can make their dormers separate parts, each standing in a
hole cut to its footprint. While the panel is open the whole set is held, with Move,
Rotate and Scale on it.
- Resizing the preview on the plate - the size boxes or the handles - changes the part's
own size settings and remakes it rather than stretching it: a roof made longer keeps its tiles.
- Lithophane - a photo as a plate lit from behind; flat, curved, or a lamp of 3-12 sides on
an E26/E27 socket base.
Edit
- Undo, copy, paste - paste lands where the copy came from, also between two app windows.
- Duplicate - beside, or in place.
- Set pivot - turn and measure about a point you click (a shaft hole, a hinge line). Resizing
grows a part away from its pivot, so the arrow on a face that lies on the pivot is left out
(One way only keeps every arrow).
- Round edges, Twist / Taper / Bend, Simplify, Smooth, Hollow.
- Grow / Shrink - every face moved out or in by the same distance, not a scale: walls get
thicker or thinner and gaps narrower or wider, corners stay sharp. Untick Z to keep the
height. More than a part is wide would fold it through itself and is refused.
- Trim - cuts a part back round its outer edge only, along the axes you pick: the outline seen
from above is drawn in by the amount (Z takes it off the top and bottom), and partitions and
floors inside the edge keep their thickness. For an insert that has to fit inside other walls.
- Fill up - fills what the part would hold if liquid were poured in from above, to a level:
the inside of a cup or a box, a recess, a sealed hollow; a pocket open to the side fills only up
to its opening, and with The plate is a floor a tube or walls standing on the plate fill too.
Solid, or as a part of its own that fits the inside exactly (a second filament, or a cavity's volume).
- Color, filament and plate - per object, and typed once for the whole selection (the box is
empty while the selected parts differ). 3MF carries color and filament; the plate is the
project's own - Export can write a file for each.
Align
- Drop to plate - sets the selection on Z = 0. With Each off, an assembly goes down as
one block and keeps its parts' places; loose parts, and every part with Each on, go down alone.
- Drop down (End) - moves the selection straight down until it rests on whatever is under it,
or on the plate. It goes by the shapes, not their boxes, so crossed ridges stop where they
meet. With Ctrl or Shift (or Ctrl+End) it sinks 0.2 mm into the part below, so
Merge joins them as one solid instead of two touching faces.
- Place on face / Best face down - tip a part onto a face you click, or pick from every
way up ranked for printing.
- Align to face - click a face on any object; then for X, Y and Z choose a place on that
face (near edge, middle, far edge) and the point of the selection that goes there. Near to
near sits it flush; near to far stands it beside. Red marks the place, blue the point. Click the
wall of a hole - round, or with flat sides such as a window's opening - and it is taken
whole: the selection goes to the hole's middle across its axis and keeps its depth.
- Center face to face - click a face on the selection, then one on another object: their
middles meet on the axes you tick. Click the side of a pin or the wall of a hole and
the round surface is taken whole, by its axis - Apply puts the pin on the hole's axis
(turning it parallel first, if asked) and the panel reads both diameters and the gap. A hole
with flat sides is taken whole too, so a window frame can be put on the middle of its opening.
- Align, Distribute, Fit, Mirror - line up on X, Y or Z, spread evenly, fit to the plate.
Mirror reflects a selection of several parts as one, so they change sides (each part in its
own place with Each on), along the plate's axes however a part is turned.
Distribute can also lay each part on its best face and drop it to the plate, to
arrange a print in one go.
Tools
- Subtract / Intersect / Merge (Ctrl+- / Ctrl+=) - with Subtract, the cutter is the last
one picked; a tolerance takes it out that much wider, so printed parts fit.
- Split - with a plane you drag or type; keep either half or both.
- Mold - a silicone mold that comes apart: split at the widest section, keyed, with pour
hole and vents.
- Kit sprue - small parts bound into a model kit's frame: laid out in rows inside a frame of
runners, each held by thin gates low at its foot, to snip off after printing. Gates at the
corners holds down the corners that lift first.
- Repair - mend an open mesh.
- Rebuild - Keep the shape: only the corners stay - points in the middle of flat faces
and along straight edges go - and every flat face is filled again from its outline, so the web
of slivers a boolean leaves is gone and nothing moves. Merge faces within 0.01 mm takes walls
joined from parts as one; Even triangles cuts the result to about one size, for Smooth,
Deform or a texture. From scratch remakes the surface on a voxel grid and mends anything.
- Convex hull - wrap parts in one skin (two cylinders into a slot).
- Voronoi - cut a part into a web of struts; watertight by construction.
- Extrude down - a flat base under a scan, a relief or a tilted part.
- Split with connectors - halves that go back together one way: pins, pegs or brick studs.
- Connect objects - pins or pegs through the face two resting parts share; Manual placement
draws that face and snaps each connector where it fits, up to 24.
- Hole - plain, countersunk or counterbored, nut pocket, heat-set insert; one, a row or a bolt
circle. With several parts selected it drills them all, lined up; All the way through
goes through the whole stack.
- Keyhole - slots to hang a part on a wall, with printed studs and a drilling template.
- Emboss - lettering, an SVG or a picture (PNG, JPEG) raised or cut into a face, flat or
wrapped, or a texture over it. On the face: the circle moves it freely, the arrows across or
up only, the knob turns it (15 degree steps; Alt turns freely, or type Turn), and the
corner squares resize it along the surface - a texture's corners resize the area it covers,
so a corner brick can meet the corner of the face. Raised work keeps off windows and doorways
already cut in the face. prints it in a second filament.
File
- Start page - comes up when the app starts with nothing to open: a new project, a file to
open, your pinned projects (Pin on the File tab; each pulls out with its pin) and the last
three others, each with its picture. Recent shows the pictures too, and ends with Clear.
- Project - a summary of what the project holds, and notes kept in the project file.
- Printer profile - printer profiles, one per printer and filament: nozzle, layer, and the fits the
tools start from - sliding clearance (lids, hinges), hole clearance (Hole), press fit (the pins of
Split and Connect), brick fit and thread clearance. Printer profile test in the Library prints
every fit at once, a few samples either side of the profile's number or up from nought.
- Projects are
.3mf files: the plate as any slicer and Explorer see it, with the editable
project and its versions inside (Ctrl+Alt+S saves one, with a small picture of the plate;
double-click a version to restore it); restore is an undo step. A .3dfc from before 4.3 is
imported, without its versions.
- Project file (
.3dfp) - kept beside the .3mf, asked for at New or the first save: the
project, its versions and the view, where a slicer saving over the .3mf cannot reach them.
Opening a .3mf a slicer has saved over offers the project back. Explorer draws it as it draws
a 3MF.
- History (Advanced) - every step, undo and redo kept in the
.3dfp as you work: the plate
after any step, and a way back to it. With one object selected, only the steps that changed it,
and that object alone restored. Unsaved work is kept there too and offered back after a crash.
- Export STL (binary or ASCII) or OBJ - everything or just the selection; reports
triangles, volume and whether it is watertight before writing. For 3MF, save the project.
One file per plate writes each plate in use to a file of its own, in 3MF too - Bambu Studio
reads plates only from its own projects, so they reach it a file at a time.
- Blueprint (Ctrl+P) - front, top, side and isometric views with dimensions and a title
block; print, PDF or PNG, plus a parts list.
- Export session / Record - every undo step as a file, or a screenshot after every action.
View
- Axis views, Orthographic (no perspective; every part's edges drawn dark, so a plan from the
top reads), Wireframe, X-ray (X), Outline, Overhangs (faces that will need
support), Grid. The window comes back where it was, maximised if it was. A selected part of more than 200,000 triangles has no outline - tracing it
would cost more than it is worth - so its color deepens instead.
- Scene - the grid, and in Advanced mode the light: presets, your own among them, a slider
for each lamp, and the key light placed on a sun disc or with Alt+right-drag, following the
view or staying put.
- Units - mm, cm, m, in or ft; every box and tool panel reads in them. Models are always
stored and exported in millimeters.
- Model scale - set 1:87 and a second set of boxes reads real size beside the model's.
Working with it
- Selection - Sticky (default, as 3D Builder): a click toggles one object. Off: Explorer
rules - Ctrl+click adds, Shift+click takes a range, clicking empty space clears. A click on a
part of an assembly picks the whole assembly; Alt+click picks the one part. The objects
list can be dragged taller by its bottom edge, and scrolls to a part as it is added.
- Handles - M move, R rotate, S resize; Snap to 1 or 5 mm. O resizes one
way only, the opposite face staying put. The resize strip reads mm or %; the box corners,
dragged, resize in proportion. With several parts selected they move, turn and resize as one
object; the Each button gives every part its own centre and axes instead.
- Right-click an object, in the view or the list, for what is done to it most - duplicate,
rename, hide, lock, color, plate and filament, assembly, its own history, export. On the empty
plate: paste, select all, insert. A right-drag still pans.
- The objects list's menu (top right) shows, hides and locks everything at once, folds every
assembly, and filters the list by plate or filament - a dot on the button and a strip over the
list say a filter is on, and what is added goes onto the plate it shows.
- Lock move (side panel) - a part's body drags it only in Move mode, so a click to select
never shifts one.
- Stop on contact (C) - a dragged part stops where its shape meets another, not its
box. Parts that already overlap move freely.
- Number boxes - every one, in every panel - take
+=5, -=5, *=1.5, /=2; the wheel and
arrows nudge (Shift ×10, Ctrl ×0.1), and a count stays whole. Enter applies, Esc takes
back what was typed, and a box left holding something that is not a number goes back.
- Slow jobs say so - opening or saving a big project, undo, redo and restoring a version put
"Opening...", "Saving...", "Undoing..." over the window while they run, and a second click or
key meanwhile is ignored.
- A tool in hand has the plate to itself - only the selection is drawn until it is put down;
X-ray shows the rest. Tools that pick a face on anything (align to face, center face to
face, surface, measure) keep everything.
- Enter applies the tool in hand, Esc puts it down, Ctrl+Space runs the last tool
again. / hide or lock the selection. lists every key.
Formats
| Format | |
|---|
.stl | Binary (default) or ASCII. One triangle soup - no separate parts. |
.obj | Named, separate objects, colors in a .mtl sidecar. |
.3mf | The project: parts, names, colors, units and filaments with a thumbnail, as any slicer reads them, and the editable project with its versions in 3DFastCraft/project.json. Any 3MF imports. |
.3dfp | The project file beside the .3mf: project, versions, view and History. A 3MF package itself, so Explorer draws its picture. |
.3dfc | The project before 4.3. Import only: its parts come in as they were, its versions do not. |
Requirements
- Windows 10/11, 64-bit.
- Direct3D 11 graphics (feature level 11_0) - any integrated GPU since about 2010. Without it
the app says so and stops: a VM without a display driver, some remote desktops, or a fresh
Windows still on the Basic Display Adapter.
Building
build.bat
A self-contained build\3DFastCraft.exe (~200 MB), no .NET needed. run.bat starts it, or runs
from source if nothing is built. If it ever fails, the full error is in
%LOCALAPPDATA%\3DFastCraft\crash.log. From a shell:
dotnet run --project src/FastCraft3D
dotnet test
Needs the .NET 10 SDK (global.json pins it). PublishTrimmed is deliberately off: WPF resolves XAML types by
reflection, and trimming breaks the app at runtime.
How it works
- Layers.
FastCraft3D.Geometry and the app's Model/ and Io/ know nothing of the
renderer; only Render/ touches Direct3D (HelixToolkit.SharpDX). Generators live in their own
project and reach the app only through a small contract.
- Booleans go to Manifold first and fall back to a
BSP engine (
Csg/) when it will not load or a solid is not closed. The BSP runs in double
precision on a 256 MB-stack thread, in parallel above 512 polygons with output identical to
the serial path. Its results are repaired and T-junctions stitched, or a closed surface
reads as broken.
- Watertight or refused. Anything built on a boolean checks the result and refuses rather than
ship a broken model. Aggressive healing was tried and made things worse.
- Split by a plane does not use the boolean:
PlaneClip cuts the triangles and fills the
opening - 214k triangles in 1/25 s, where the boolean took 20 s and tore.
- Lettering is laid out flat; an
IPlacementSurface says where a flat point lands - a face,
a barrel, a ball - and only steps that stray from the surface are split.
- Handles are 2D, drawn on a canvas by projecting the selection's box, so they stay
clickable at any zoom and are testable without a GPU (
IScreenProjector).
- Z is up in two places that must agree: the camera and the viewport's
ModelUpDirection.
- The object list does not bind
ListBoxItem.IsSelected: fresh containers would push
false back and undo selections made in code. SelectionListSync mirrors it by hand.
- Mirroring flips winding once, in
MeshTransform.Transformed, or exports come out inside
out.
Known limits
- Booleans on imports above ~200k triangles can be slow; Abort stops one and leaves the
model as it was.
- Patterns and wrapped lettering with counters (O, B, A) can be refused on a face already cut
about or on a barrel - refused, never left torn. Raised instead of cut avoids the boolean.
- A face with a round hole cannot take a pattern; pattern before merging a boss onto it.
- A set put down assembled is an assembly, not one solid - lay it out to print it.
- Plates are the project's own: a 3MF carries none a slicer reads. One file per plate is the
way to a slicer's plates.
- A kit sprue is an object of its own beside the parts: a slicer's Arrange would pull them apart.
- History tells objects apart from 4.8 on; steps kept before it are not tied to one object.
- A fine groove on a 3D texture means a fine mesh: a few hundred thousand triangles on a big
wall, a minute or two to apply. A coarser pitch or groove is much quicker.
- Undo keeps about a gigabyte of history; the oldest steps go beyond that, with an offer to
save a version.
- SharpDX 4.2 is unmaintained upstream - the renderer-agnostic core is the insurance.
Layout
src/FastCraft3D.Geometry/ meshes, primitives, transforms, repair, CSG, plane split, gears,
threads, Engraving/, Sketches/, Drawings/, Moulding/
src/FastCraft3D.Generators/ the Library: contract, generators, their panel, motion
src/FastCraft3D/
Model/ scene, objects, bed placement, Commands/ (undo)
Io/ STL, OBJ, 3MF (projects too), SVG, pictures, recovery, settings
Render/ the only Direct3D layer, and the on-screen handles
View/ tool panels, dialogs, keys, object list
ViewModels/ commands and state
tests/FastCraft3D.Tests/ geometry, CSG, IO, generators, tool flows, handles
tools/ checking exports by measurement; tools/ui drives the running app
Licence
BSD 3-Clause with the Commons Clause - use, change and pass it on freely, in a business too;
selling the software itself needs a commercial licence, so ask. Models you make are your own.
See LICENSE and THIRD-PARTY-NOTICES.md.
Contributing
Bug reports, models that break something, and patches are welcome - see
CONTRIBUTING.md.