# FlatCad 3D > Free browser 3D CAD for 3D printing at https://flatcad.com/3d/ — no signup. Exports STL, 3MF, OBJ. ## Open a design by link Any recipe can be opened directly: https://flatcad.com/3d/#json= The person sees the part in 3D, can change every number, and can download STL/3MF. ## Recipe format FlatCad 3D recipe format (JSON). Units: millimetres. Z is up; the print bed is the XY plane at z=0. A recipe is {"name": "...", "features": [ ... ]}. Features apply in order to build one solid: "op": "add" (default) unions it, "cut" subtracts it, "intersect" keeps only the overlap. Every feature may have "id" (short unique string, needed if a pattern/mirror refers to it), "at": [x,y,z] (placement point, default [0,0,0]) and "rot": [rx,ry,rz] (degrees, X then Y then Z, about "at"). "color": "#rrggbb" is optional (the colour in Render pictures; leave it out for the automatic one). Placement: box, cylinder, cone, torus, extrude, revolve, text SIT ON "at" (centred in X and Y, bottom at at.z). sphere is centred on "at". hole is drilled DOWN from "at" (at = the point on the top surface). Feature types and their parameters: box size:[w,d,h] corner: radius on the 4 vertical edges (optional) round: radius on ALL edges (optional) cylinder d: diameter, h: height cone d: bottom diameter, d2: top diameter (0 = point), h sphere d torus D: ring diameter (centre of tube), d: tube diameter hole d, depth, optional cbore_d + cbore_depth (counterbore), csink_d (countersink top diameter). op defaults to "cut". extrude shapes: list of 2D shapes, h: height (negative = extrude downward from "at", e.g. a pocket cut into a top face), optional taper (top scale, 1 = straight), twist (degrees), wall (mm: extrude only a band that thick inside the outline, a tube instead of a block; also the thickness of line shapes, default 2) 2D shape = {"rect":[w,h], "round": r} | {"circle": d} | {"slot":[length,width]} | {"poly":[[x,y],...]} | {"line":[[x,y],...]} (an open line drawn "wall" mm thick, e.g. a wall in a plan) each shape may have "at":[x,y], "rot": degrees, "cut": true (subtract it from the other shapes) revolve profile: [[radius, height], ...] closed outline (radius >= 0), spun around the Z axis; angle (default 360) text text (use \n for new lines), size: capital letter height, h: thickness. Bold sans font. pattern of: id of an earlier feature; kind "linear": count, step:[dx,dy,dz], optional count2 + step2 for a grid; kind "circular": count, center:[x,y,z], axis (default [0,0,1]), angle (default 360). Copies do what the source does (a pattern of a hole cuts). mesh an imported STL/OBJ/3MF/GLB model: src (internal key, never change it), scale (file units → mm: 1 mm, 10 cm, 1000 m, 25.4 in). Sits on "at" like a box. Keep mesh features as they are; change the part around them (e.g. a "hole" or a "cut" box to modify the model). mirror plane "x" | "y" | "z" (mirrors across the plane through the origin, e.g. "x" flips X); of: feature id, or omit to mirror the whole body so far; keep (default true) keeps the original too. Tips: make parts printable (flat bottom on z=0, walls >= 1.2 mm, holes for screws: M3 = d 3.4, M4 = d 4.5). Make a cut or hole slightly longer than the wall it goes through. Hollow things = a body, then a smaller "cut" box/cylinder inside. Example — a 60x40x4 mm plate, rounded corners, 4 M3 holes, a raised label: {"name":"Mounting plate","features":[ {"id":"plate","type":"box","size":[60,40,4],"corner":4}, {"id":"h1","type":"hole","d":3.4,"depth":4,"at":[-24,-14,4]}, {"type":"pattern","of":"h1","count":2,"step":[48,0,0],"count2":2,"step2":[0,28,0]}, {"type":"text","text":"FLATCAD","size":6,"h":1,"at":[0,0,4]} ]}