← LIVYATAN
STRUCTOR splash

STRUCTOR

Structor was the Roman architect and engineer whose De architectura is the oldest surviving work on the discipline — the book that gave design its three tests: firmitas, utilitas, venustas — soundness, usefulness, beauty. A CAD module that exists to design real parts for a real shop takes the name of the man who first wrote down what a design owes the person who builds from it.

CAD, sovereign. Solids in, drawings out.

↓ DOWNLOAD Structor 0.11.0 (.deb)

Debian 13 / Ubuntu 24.04+ — install with sudo apt install ./structor_0.11.0_amd64.deb

All modules and docs: https://github.com/3DJ77/Livyatan

IN ACTION
the Obelisk on the build plate in Structor, palette and toolbars around it
the Obelisk on the plate — primitives palette left, the bench around it

Structor — Operator Manual

Quickstart

sudo apt install ./structor_0.11.0_amd64.deb
structor

Click a palette button (top-left) — BOX / SPHERE / CYLINDER / WEDGE / PYRAMID — to drop a solid on the plate. New parts (and the cube a fresh scene opens with) arrive at one inch, 25.4 mm; GEAR is sized by its teeth and module. Left-drag moves it; rings rotate; grab the bounding-box handles to scale (corners = uniform, faces = one axis). EXPORT STL writes the scene to STL. SAVE (Ctrl+S) writes a .SigN file, OPEN (Ctrl+O) loads one — both through the file dialog, default folder ~/Structor.

What it is

Structor is the design module of the Livyatan Design Suite: a sovereign, local-first CAD program in Rust on fyrox. It is an alternative to online cloud-based CAD platforms — drop primitive solids on a build plate, drag/rotate/scale them with gizmos, mark negatives as holes, group and boolean-merge, then export the resolved solid to a watertight STL. No browser, no cloud, no account, no network. Everything runs on the local machine.

The scene is a tree of shapes that maps 1:1 onto a JSON-CSG grammar, so a saved .SigN file is a readable spec, not an opaque blob. Boolean preview and merge use the manifold engine — the same backend OpenSCAD uses — so what you preview is what the export produces.

The installed binary is /usr/bin/structor. 85 in-crate tests (cargo test); the camera/spacemouse canon tests live in the vendored chimaera crate.

Why the name

Structor is Latin for builder — the worker who raises the structure, and the root the word “structure” itself grew from. In Rome a structor was the tradesman on the wall, not the patron with the drawings: the one whose hands had to make the plan true. A CAD module that exists to design real parts for a real shop takes the builder’s name, not the architect’s.

Features

Using it

Place and edit solids. Click a palette button; the part lands on a free grid cell. Click to select (repeat-click cycles overlapping parts). Left-drag moves on the workplane with grid + surface snap; arrows nudge by the grid step (Shift ×5, Ctrl+Shift+Up/Down raises/lowers). Type exact values in the left inspector; Enter commits. Drag a ring to rotate (compass shows the snapped angle; ROT° box in TOOLS applies typed degrees). Drag a corner handle for uniform scale, a face handle for one axis — it grows toward you, Esc puts everything back. T opens the TOOLS panel: GRID step, TRANSFORM (scale/rotate ±90°/mirror), ALIGN, SNAP, colors, backdrops.

Booleans. Select a part, press H to mark it a hole. P previews the cut without committing. Select the hole plus its solids and Ctrl+G to apply the boolean — the result is one merged, still-editable part; Ctrl+U brings the sources back. Ctrl+W welds any multi-selection into one part in a single stroke.

Save and export. SAVE / Ctrl+S writes .SigN (dialog on the first save, default ~/Structor/, then silently to that file); OPEN / Ctrl+O loads one. EXPORT STL in the toolbar opens a save dialog (defaulting to ~/Desktop) and writes the boolean-resolved solid — exactly what the P preview shows — as binary STL. Any part that is not manifold is named in the status line and excluded from the merge rather than silently dropped.

Navigate. Right-drag or left-drag empty space = orbit. Middle-drag = pan (the scene follows the cursor). Wheel = zoom (scroll up backs the camera away). WASD pans the view. Home (or H with nothing selected) = home view. With the SpaceMouse: tilt = fly, push/pull = lift, twist = yaw. Hold Shift for the attitude layer — tilt L/R = roll, tilt F/B = pitch, fly gated off. Hold L-Alt to boost fly speed (SIG_FLY_BOOST, default 6×). Left puck button = home.

The NAV panel. If any axis feels backwards, don’t relaunch with env flips — open the NAV panel and fix it there: per-function sign flips, gesture-source reassignment, puck sensitivity, fly speed, and the mouse feel block (orbit/zoom/ pan sens + direction). Every click writes ~/.config/structor/nav.json. Load order: baked default ← nav.json ← SIG_* env (env wins, as launch trim).

The DEBUG pane. Edge tab or C opens it; drag the left grab bar to resize. The feed (newest first) records every status transition — imports, exports, merges, welds — and is copyable with Ctrl+C. UNITS toggles mm/in display.

How it connects

Env knobs

Env is launch-time trim; the NAV panel / nav.json is the durable home for feel.

Variable Default Effect
SIG_OPEN Load a .SigN scene at launch
SIG_IMPORT Load an STL/OBJ mesh at launch
SIG_UNITS mm in starts the UNITS toggle in inches
SIG_SPACEMOUSE_SENS / _DEADZONE crate defaults Puck sensitivity / deadzone
SIG_SPACEMOUSE_HIDRAW auto Force a specific /dev/hidraw* node
SIG_ORBIT_SENS / SIG_ZOOM_SENS / SIG_PAN_SENS 1.0 Mouse feel multipliers
SIG_FLY_SPEED 1.0 Fly speed multiplier
SIG_FLY_BOOST 6.0 L-Alt fly multiplier
SIG_WHEEL_SIGN 1.0 Hardware wheel trim only — canon is fixed
SIG_TILT_SIGN SIG_STRAFE_SIGN SIG_LIFT_SIGN SIG_YAW_SIGN SIG_ROLL_SIGN SIG_PITCH_SIGN baked ±1 per-axis trim; overrides nav.json
SIG_SNAP_R grid_step × 0.5 Feature-snap catch radius
SIG_COOP_W 340 DEBUG pane width (clamp 240–720)
SIG_BG_YAW / SIG_BG_PITCH / SIG_BG_ROLL 0 Backdrop orientation
SIG_BG_LIFT 400 Backdrop dome lift (clamped 0–600)
SIG_SSAO off 1 re-enables SSAO (off: it bands the skydome)
SIG_INPUT_TRACE off set (any value) to print WHEEL/PAN input events to stderr

Developer / test knobs

Not for operators — read only by the test suite (cargo test); the shipped binary never consults them.

Variable Default Effect
SHOP_TEST_DIR $TMPDIR/structor-whips-e2e Directory the shop-export end-to-end test writes its MANIFEST/BOM/cut files into, so a developer can inspect the output

Known limits

Shop export (2026-08-31)

The model is truth: dimensioned drawings and machine cut files come FROM the scene (the shop-export design note; first customer = the WHIPS gasifier).

Queued

Not built yet. Listed so nobody mistakes them for missing bugs.