Serpentine3D Download

Free and open source · Linux, Windows, macOS

Every surface
starts with a curve.

Serpentine3D is a NURBS modeller and drafting tool for things that get built: exact curves and surfaces, drawing sheets a workshop can work from, and a command line that speaks Rhino. Free, with no account and no subscription.

Download Source on GitHub

Linux, Windows and macOS · version 0.12.0 · MIT licence

Perspective · Rendered ▾

> 1view Single viewport. > loft Lofted 4 curves into Surface 01.

›_ CommandAsk AI type a command (line, circle, extrude, loft, ...)
Osnap:OnEndPointMidCenQuadIntAppIntPerpNearGridOrtho
5 object(s) · 0 selected · layer: Vase · rendered · units: mm

Made in Serpentine3D · samples

Six pieces, each from a first curve

Built for the trailer, and every one is a sample: download it, open it with File ▸ Open, and take it apart.

Archway set piece, modelled in Serpentine3D
Film & TV setsArchway set piece35 objects · 8 layers · 3.6 m tall archway.serp ↓ 530 KB
Cathedral solitaire, modelled in Serpentine3D
JewelleryCathedral solitaireSix prongs · a 57-facet brilliant ring.serp ↓ 3.0 MB
Twisting tower, modelled in Serpentine3D
ArchitectureTwisting tower50 storeys · a quarter turn tower.serp ↓ 2.0 MB
Lofted vase, modelled in Serpentine3D
Product designLofted vaseOne surface · four curves vase.serp ↓ 50 KB
Pierced loop, modelled in Serpentine3D
SculpturePierced loopSerpentine stone · 450 mm serpent.serp ↓ 960 KB
Spiral stair, modelled in Serpentine3D
InteriorsSpiral stair14 oak treads · 3 m rise stair.serp ↓ 1.4 MB

Real geometry

Curves, not triangles

Surfaces here are NURBS, the same mathematics Rhino uses. A 300 mm radius is 300 mm at any zoom and on every drawing, and a pulled control point keeps the surface smooth.

A gold NURBS curve with its blue control points in the Serpentine3D viewport
01A curve: a handful of control points, exact everywhere between them.
A smooth surface grown from curves, its control points showing
02A surface grown from curves. Pull one point and the whole sheet follows.
The vase from the trailer with its history on: edit a profile curve and the lofted surface rebuilds.

Model

Your Rhino muscle memory works

Type a command and it walks you through the rest, with Rhino's names and aliases, object snaps, layers and a gumball for pushing faces and rounding edges by hand. Rhino .3dm files open with their layers, and STEP, DXF, STL, glTF and USD carry the model on to everything else.

loftsweep2revolvefilletedgebooleanunionpushpull
Coming from Rhino? Start here →
The archway on an A3 sheet: front, side and plan in hidden line, a shaded perspective and a title block.

Draft

From model to drawing sheet

Lay out A4 to A0 sheets with live detail views at real scales, 1:25 or 1:50. Hidden-line views, dimensions, leaders, hatching, scale bars and title blocks come from the model itself, and the sheet prints straight to PDF.

layoutdetailmake2ddimhatchtitleblock
Making drawings →
Asked for a spiral stair, the assistant ran the commands and checked the result in the viewport.

Automate

Describe it. The assistant builds it.

The assistant runs the same commands you do, then looks at the viewport to check its own work, and every step can be undone. Use Claude, a ChatGPT account or an OpenAI key, or keep everything on your machine with a local, open-weight model.

ClaudeChatGPTOpenAILocal models
The assistant and MCP →
Zebra stripes on the Möbius bands: unbroken stripes mean the surface is smooth across every join.

Analyse

Check it before you build it

Zebra stripes and curvature colour show where surfaces meet smoothly. Draft analysis checks a mould will release, and printcheck finds open edges, thin walls and overhangs before the slicer does.

zebracurvaturecurvaturegraphdraftanalysisprintcheck
3D printing →

Headless

No window required

The same engine runs with no window at all. Script it in the built-in editor, batch a hundred variants from a terminal, run it in CI on a server with no display, or let any MCP client drive a live session.

Scripting guide →

make_part.py
box = doc.add(geo.make_box((0, 0, 0), 100, 100, 100), name="Crate")
doc.run("filletedge", ["Crate", "", "5"])
doc.export(args[0] if args else "crate.step")
$ serp3d-batch make_part.py crate.step

Download

Get it on your machine

Every build is free, with no account and no subscription.

Your system

Linux

AppImage · x86_64 · 509 MB

One file. Make it executable and double-click it; no admin rights needed.

Download .AppImage
Your system

Windows

Installer · x86_64 · 119 MB

Unsigned for now: if Windows warns you, choose More info, then Run anyway.

Download .exe
Your system

macOS

Disk image · Apple Silicon · macOS 14+ · 268 MB

Unsigned for now: right-click the app and choose Open the first time.

Download .dmg

Latest: version 0.12.0 Release notes →All releases →

Support

Free, and kept that way

No subscription, no licence server, no upgrade to Pro. One person builds Serpentine3D between other work; if it is useful to you, a small contribution keeps it moving.

Serpentine3D · trailer · 0:56