ScadmanBridge is here (v0.1.0)
October 22, 2026 by Leszek
A self-contained bridge between OpenSCAD and FreeCAD — in both directions — right from your browser.

OpenSCAD is a text file. You write difference() { cube(20, center = true); sphere(13); } and a solid appears. Every dimension is a variable, every repetition is a loop, and the model is the code.
FreeCAD is a document. A tree of sketches, pads, pockets and patterns, with parameters you adjust in a form and constraints that recompute when you do. It is where a large part of the world’s mechanical work actually gets drawn, checked and exported.
These two worlds should talk to each other. They mostly do not.
FreeCAD’s own OpenSCAD workbench expects the OpenSCAD executable on the machine. Mesh converters (STL in, STL out) are a one-way door: the model becomes triangles and the parameters disappear. Nothing writes readable OpenSCAD back out of a FreeCAD document.
ScadmanBridge changes that.
What it does
ScadmanBridge is a converter that reads and writes both formats directly. It needs no OpenSCAD binary, no FreeCAD installation, and no geometry kernel on your machine. The same result appears whether you are on a laptop, in a container, or in continuous integration.
Two directions, one core:
| Direction |
What you get |
Where in sCADman |
.scad → .FCStd |
A FreeCAD document with real features — boxes, sketches, pockets, revolutions, patterns — and the original parameters attached |
Export → Cloud → FreeCAD (.FCStd) |
.FCStd → .scad |
OpenSCAD source a person would write, not a matrix soup |
Import → Cloud → FreeCAD (.FCStd) |
.scad → .py / JSON |
A FreeCAD Python macro, or a language-neutral description of the model |
Not yet publicly available |
.FCStd → JSON |
The same model as data for anything else downstream |
Not yet publicly available |
Why it is different
Nothing to install.
The converter runs entirely inside the session you already use in the scadman.xyz app. There is no dependency on a particular OpenSCAD or FreeCAD version being present on the machine.
It writes models, not meshes.
Where FreeCAD has a native feature, the document gets that feature. A cube() becomes a Part::Box; a linear_extrude() becomes a sketch and a pad; a rotate_extrude() becomes a revolution; a polar pattern becomes PartDesign::PolarPattern. Native features mean native editing — you can open the file and change a dimension — you do not merely inspect a static result.
Your Customizer still works.
The section comments and range annotations that OpenSCAD turns into a parameter panel become FreeCAD variables. The model arrives with its knobs attached, and the features read them through FreeCAD’s own expression engine.
The reverse direction produces code a human can read.
A FreeCAD document is a feature tree. A naive translation is nested unions and 4×4 matrices. ScadmanBridge folds the matrices, recognises primitives, spots repeating patterns and writes a loop, and labels parts with the names of the objects they came from.
It tells you what it could not do.
Every approximation is reported per conversion: the object, the reason, and — where it can be measured — the difference. A converter that quietly drops a feature is worse than one that says so out loud.
How close is it?
The benchmark corpus comprised several hundred .scad and .FCStd models, which varied significantly in terms of structure and complexity. Measured against OpenSCAD’s and FreeCAD’s own output:
|
Result |
| OpenSCAD test models that convert and round-trip through FreeCAD |
99.29% |
| Forward models within 0.01 % of OpenSCAD’s own volume |
92.59% |
| FreeCAD documents read back into OpenSCAD |
91.48% (79% solids + 12% two-dimensional profiles) |
| FreeCAD documents that cannot be opened at all |
0 |
| Automated test suites behind the numbers above |
34 |
Where a model differs, the cause is known and usually small: a substituted font, a random-number generator, or a profile that intersects itself. In extremely rare cases, if a file fails to convert, you will be provided with a full diagnostic reason (which can usually be easily resolved before retrying).
Where it stops
FreeCAD documents whose geometry survives only as a NURBS-heavy shape cache, fillets and chamfers that exist only as a boundary-representation result, and profiles that intersect themselves remain the frontier. Everything else transfers fully.
ScadmanBridge is available today from the editor toolbar (Import and Export dropdowns). It keeps the spirit of both languages — precise, parametric, and ready for further editing — rather than reducing everything to a static mesh.