tangency-labs / fieldcraft
git clone https://github.com/tangency-labs/fieldcraft.git
v0.7.0 · 2d ago
One open-source modeler for structures, heat and fluids, built from scratch in pure Rust: parametric part in, verified results out. Automatic all-hex and tet meshing, our own nonlinear implicit and explicit FEA, heat transfer and lattice Boltzmann CFD — every result checked against theory. For engineers and AI agents alike. Free, forever.
—
stars, 24h
+117
stars, 7 days · #435
+117
stars, 30 days · #1,970
117
★ total · +117% this week
14
forks · 73 open issues
Star history starts 2026-10-20; the chart appears after the second daily snapshot.
LanguageRust
LicenseApache-2.0
Created2026-10-13 (7d ago)
Last pushtoday
Watchers4
OwnerOrganization
GitHub topics
ai-agentscaecfdcomputational-mechanicsengineeringexplicit-dynamicsfeafemfinite-element-analysishex-meshinghexahedral-meshlattice-boltzmannmcpmesh-generationnonlinearopen-source-caerustsimulationstructural-analysistetrahedral-mesh
Links
- GitHub: github.com/tangency-labs/fieldcraft
- Homepage: https://tangency-labs.github.io/fieldcraft/
- Releases · Issues · Hacker News mentions
README excerpt
# FieldCraft An open-source, clean-room CAE application in pure Rust: from a parametric SolidCraft part to a verified finite element analysis, with tetrahedral and hexahedral meshing, its own implicit, explicit, thermal and lattice Boltzmann solvers, and decks for Abaqus, Nastran and LS-DYNA. The desktop app, the command line and AI agents (over MCP) drive the same commands. **Status:** early but working end to end — open a part, mesh it, define the analysis, solve, see the results — with a nonlinear implicit solver (large deformation, plasticity, rubber) now in place. Hex meshing is the centre of gravity. Next: buckling and arc-length, contact, then the wider material and multiphysics library. See ROADMAP.md. **Want to help?** Pick an issue labelled good first issue or help wanted and read CONTRIBUTING.md. *Claude driving FieldCraft through its MCP server: one prompt, and it opens the part, meshes it, defines and solves the analysis, then checks the tip deflection against beam theory. Real session, waits shortened. Full video.* An AI agent drives FieldCraft over MCP, each stage captioned with the tool it calls: it opens an I-beam, hex meshes it, defines the material, the clamp and a 1000 N tip load, solves, and shows the von Mises stress and the deformed shape (tip deflection 0.176 mm; beam theory with shear 0.177 mm). MP4 · regenerated by tools/demo-video. ## Download - **macOS:** open the `.dmg` and drag FieldCraft into Applications (Apple silicon and Intel). - **Windows:** unzip and run `fieldcraft.exe`. - **Linux:** the `.AppImage` (allow it to run as a program), or the `.tar.gz`. - **Browser:** try it at tangency-labs.github.io/fieldcraft, no install. - **Command line:** `fieldcraft-cli` ships in every package; AI agents connect to it over MCP (docs/mcp.md). Every release lists its checksums in `SHA256SUMS.txt`. Building from source is in CONTRIBUTING.md. ## Hex meshing a part that does not sweep A filleted L-bracket with a hole through each leg cannot be swept in one piece. Split into 30 cells in SolidCraft, FieldCraft meshes it all-hex as one conforming mesh — O-grids round the holes, graded through the fillet — and its hex20 tip deflection matches a fine tet10 solution to 0.1 %. The same part also meshes all-hex automatically with the octree mesher (`mesh.hex.octree`). | Cells | Conforming hex mesh | Von Mises (clamp and load drawn) | |---|---|---| | | | | ## What it does today - **Geometry in:** SolidCraft designs (`.solidcraft`) with persistent face, edge and body names, and face-tagged 3MF meshes; surface checks (weld, manifold, orientation, self-intersection). - **Meshing:** constrained Delaunay tetrahedra (tet4, tet10) with exact predicates and a certified validity gate; Delaunay refinement, smoothing and sliver removal; structured hex by sweeping, revolving and mapping (hex8, hex20), and conforming multi-block hex across a part split into cells (`mesh.hex.blocks`); unstructured octree all-hex for any part (`mesh.hex.octree`);