Documentation
Write parametric 3D models as code, see live previews, and share via short URLs.
Guides
Go from zero to a printable parametric model in five minutes.
Designing for real-world fitTolerances, clearances, and print-ready dimensions.
Parameter design guidelinesHow to choose ranges, steps, and defaults that make sense.
Common patternsScrew holes, countersinks, fillets, arrays, and more.
From idea to printable STLThe full workflow: code, preview, export, slice, print.
PPSCAD vs OpenSCADA quick comparison for users coming from OpenSCAD.
Reference
Complete documentation for the PPSCAD scripting language.
Quick example
// A box with a cylindrical hole through it
param width: float = 30 [10:100] "Width (mm)"
param height: float = 20 [5:50] "Height (mm)"
param depth: float = 10 [2:30] "Depth (mm)"
param hole_radius: float = 4 [1:15] "Hole radius (mm)"
difference {
cube(width, height, depth)
translate(width / 2, height / 2, -1)
cylinder(h: depth + 2, r: hole_radius)
}This creates a box with a cylindrical hole through it. The parameters appear as sliders in the parameter panel on the right.
PPSCAD at a glance
PPSCAD is inspired by OpenSCAD and JSCAD, with a clean modern syntax:
Primitives
cube(size) or cube(x, y, z)Axis-aligned box. Single number creates a cube.
cylinder(h: 20, r: 5)Cylinder. Use r1/r2 for a cone. Supports named or positional args.
sphere(r)Sphere centered at the origin.
Boolean operations
union { ... }Combine all children into one shape.
difference { ... }First child minus all subsequent children.
intersection { ... }Keep only the overlapping volume.
Transforms
translate(x, y, z) childMove geometry. Takes a single child or { block }.
rotate(x, y, z) childRotate around each axis in degrees.
scale(factor) childScale uniformly or per axis.
2D to 3D
extrude(height) circle(r)Linear extrusion of a 2D shape.
revolve() translate(15, 0) circle(3)Rotational sweep around the Y axis.
Parameters
Parameters let users tweak your model without editing code. Declare them with the param keyword. When you change a slider, the model re-runs automatically.
Syntax
param name: type = default [min:max:step] "Label" "Description"Parameter types
// Number with slider
param teeth: int = 20 [6:200] "Number of teeth"
// Float with custom step
param module: float = 2.0 [0.5:10:0.01] "Module (mm)"
// Boolean toggle (checkbox)
param chamfer: bool = true "Add chamfer"
// Dropdown select
param style: choice = round ["round", "square", "hex"] "Head style"Sharing
Click Save to store your design and get a short URL. Anyone with the link can open your model, adjust the parameters, and download the STL.
Parameters can also be shared via URL query strings, e.g. ?width=50&height=30.