Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Project file

A project (.chipload) is a JSON file. Chipload writes every field; when you write one by hand or with a script, the fields marked no may be left out. Lengths are in mm, angles in radians, feeds in mm/min. chipload schema project prints the JSON Schema this page is made from.

Schema version 29. Older files load through Chipload’s migrations; this schema describes only the current version.

The file

FieldTypeRequiredMeaning
active_partinteger or nullnoThe part new operations go into (its id). Null or no such part: the first part. Only the app and the command line read it; it changes nothing that is cut.
drawingDrawingyesThe drawing: the shapes Chipload cuts, imported from a DXF or drawn in Chipload.
machineMachineyesThe machine: post-processor, safe height, limits and zero.
operationslist of OperationyesThe operations, cut in this order: grouped by part, in the parts’ order.
partslist of PartyesThe parts: groups of operations, each cut with its copies before the next part. At least one.
schema_version29yesThe version of the file format. Chipload upgrades older files when it reads them, and refuses newer ones.
stockStockyesThe material on the machine.
toolslist of ToolyesThe tools the operations cut with.
written_bystring or nullnoThe Chipload version that wrote the file, for reference.

ArcSegment

From start_angle through sweep radians (positive = counter-clockwise).

FieldTypeRequiredMeaning
center2 × numberyesCentre, mm.
radiusnumberyesRadius, mm.
start_anglenumberyesWhere the arc starts, radians from +X, counter-clockwise.
sweepnumberyesHow far it turns, radians: positive counter-clockwise.

AutoThreshold

The word “auto”.

One of: "auto".

Bone

What a chosen corner gets.

One of: "none", "dogbone", "tbone".

Copies

A grid of copies of a part: copy (column c, row r) is the part moved by (c·dx, r·dy) mm.

FieldTypeRequiredMeaning
columnsintegeryesCopies along X, at least 1.
dxnumberyesDistance from copy to copy along X, mm; negative grows to the left.
dynumberyesDistance from copy to copy along Y, mm; negative grows downwards.
orderCopyOrdernoby_operation: each operation on every copy, then the next; by_copy: every operation on one copy, then the next copy.
rowsintegeryesCopies along Y, at least 1.

CopyOrder

In which order the copies are cut.

  • "by_operation": Each operation on every copy, then the next operation.

  • "by_copy": Every operation on one copy, then the next copy. Called by_part before parts came (schema 22).

CornerChoice

A corner with its own bone, chosen by the user.

FieldTypeRequiredMeaning
alongWall or nullnoThe wall a T-bone runs along, longer or shorter: the notch is in the other. Required with a T-bone; null otherwise.
at2 × numberyesThe corner, in drawing coordinates (mm).
boneBoneyesnone (the corner stays round), dogbone or tbone.

Corners

How the tool reaches into the inside corners it would leave round, so a square part fits: every corner on the tool’s side up to max_angle.

"type": "dogbone"

In along the corner’s bisector.

FieldTypeRequiredMeaning
max_anglenumberyesOnly corners this sharp or sharper, radians (1.745 = 100°).

"type": "tbone"

In along the longer wall: the notch is in the shorter one.

FieldTypeRequiredMeaning
max_anglenumberyesOnly corners this sharp or sharper, radians (1.745 = 100°).

CustomPost

A user post-processor’s config and template, exactly as read from the posts folder.

FieldTypeRequiredMeaning
configstringyesThe post’s settings file (TOML), as copied.
templatestringyesThe post’s template, as copied.

Direction

One of: "climb", "conventional".

Drawing

The project’s drawing: shapes in millimetres, or (only for jobs from before v4) a reference to a DXF that still has to be embedded.

FieldTypeRequiredMeaning
dxfslist of DrawingSourcenoThe DXFs the imported shapes came from, each as at its last import or update, with its own placement.
hiddenlist of stringnoGroups and layers not drawn on the canvas (they are still cut): dxf:1, dxf:1/layer:Cut, image:1, text:1, drawn:circle, drawn:rectangle, drawn:polyline.
imageslist of ImagenoPictures traced into shapes, for V-carving.
next_shape_idintegeryesThe id the next new shape gets. Ids are never reused.
shapeslist of ShapeyesThe shapes, imported and drawn.
textslist of TextnoTexts written into shapes, for V-carving, pocketing or profiling. Left out of the file when there are none, so projects without text open in older versions.

DrawingSource

Provenance of the imported shapes.

FieldTypeRequiredMeaning
filestringyesThe DXF’s file name.
flattenedobjectnoHow many curves of each type (splines, ellipses) were turned into arcs.
idintegeryesThe DXF’s id, which its shapes and selectors name.
ignoredobjectnoHow many entities of each type were left out (text, dimensions, …).
importedobjectnoHow many entities of each type were imported.
issueslist of SourceIssuenoWhat the import found: the import report.
namestringyesIts name in the Browser and messages; the file’s name without its extension at first.
placementPlacementyesHow the imported drawing was moved, turned and scaled on the stock.
sha256stringyesThe DXF’s SHA-256, to tell whether it changed.
unitsUnitsyesThe DXF’s units: mm or inch. Inch drawings are converted to mm on import.
units_fromUnitsFromyesWhere the units came from: the DXF itself, or the user’s choice.

Entry

How the tool goes down into the material at the start of each pass, for pockets and follow paths (a profile always spirals: its ramp_angle).

"type": "plunge"

Straight down: needs a centre-cutting tool. An empty struct variant, as Rings.

"type": "ramp"

Down along the path and back, never steeper than ramp_angle (radians, 0 < angle <= 30°).

FieldTypeRequiredMeaning
ramp_anglenumberyesThe steepest the ramp goes, radians: more than 0, at most 30° (0.5236).

"type": "helix"

Pockets only: down round a circle of radius (the tool centre’s), never steeper than ramp_angle.

FieldTypeRequiredMeaning
radiusnumberyesThe helix’s radius, mm: less than the tool radius.
ramp_anglenumberyesThe steepest the helix goes, radians: more than 0, at most 30° (0.5236).

Finish

A finishing pass on a profile.

FieldTypeRequiredMeaning
stocknumberyesLeft on the wall by the roughing passes, mm: more than 0, less than the tool radius.

HoleMethod

How a Holes operation cuts.

"type": "drill"

Straight down at the hole’s centre, peck mm at a time.

FieldTypeRequiredMeaning
pecknumber or nullnoDrill this many mm at a time, lifting out between pecks to clear chips. Null: in one go.

"type": "bore"

A helix at the wall, at most step_down mm per turn and never steeper than ramp_angle (radians, 0 < angle <= 30°), then one level circle.

FieldTypeRequiredMeaning
directionDirectionyesclimb or conventional, as for a profile inside the hole.
ramp_anglenumberyesThe steepest the helix goes, radians: more than 0, at most 30° (0.5236).
step_downnumberyesThe most the helix goes down per turn, mm.

Image

A picture traced into shapes: the picture itself, where it goes, and how it becomes black and white. Its traced shapes are path shapes on its layer that name it in image.

FieldTypeRequiredMeaning
arcsbooleanyesTraced edges are fitted with arcs as well as lines.
blurnumberyesBlur before the threshold, in pixels, 0 to 10; 0: none.
datastringyesThe picture file itself (PNG, JPEG or BMP), base64-encoded.
filestringyesThe picture’s file name.
idintegeryesThe image’s id, which its traced shapes name.
invertbooleanyesCarve the light parts instead of the dark ones.
layerstringyesThe layer its traced shapes go on.
min_areanumberyesBlack or white specks smaller than this are dropped, mm², 0 to 100.
rotationnumberyesTurned counter-clockwise about the picture’s centre, degrees, at least 0 and less than 360. x, y and width are before the turn; the traced shapes are turned after the trace.
sha256stringyesThe picture’s SHA-256.
smoothingnumberyesHow far a traced edge may be simplified away from the picture’s edge, mm, 0.01 to 1.
thresholdImageThresholdyesGrey values below this (0–255) are black: 1 to 254, or “auto” to pick it from the picture (Otsu’s method).
traceImageTraceyesWhat it is traced into: the black parts’ outlines (for a V-carve) or their centre lines (for a follow path).
widthnumberyesThe picture’s width on the stock, mm; its height follows from the picture.
xnumberyesX of the picture’s lower-left corner on the stock, mm.
ynumberyesY of the picture’s lower-left corner on the stock, mm.

ImageThreshold

Where grey turns black: “auto” or a grey value.

  • AutoThreshold: Picked from the picture.

  • integer: Grey values below this are black, 1 to 254.

ImageTrace

What a picture is traced into.

  • "outline": Closed outlines round the black parts, black inside.

  • "centre_line": Open (or closed) paths along the black strokes’ middles.

IssueSeverity

One of: "warning", "error".

Lead

Quarter-circle lead-in and lead-out.

FieldTypeRequiredMeaning
radiusnumberyesRadius of the lead arcs, mm: more than 0, at most 10 tool diameters. Smaller where there’s no room.

LineSegment

FieldTypeRequiredMeaning
end2 × numberyesEnd point, mm.
start2 × numberyesStart point, mm.

Machine

FieldTypeRequiredMeaning
custom_postCustomPost or nullnoYour own post-processor, copied into the project when chosen, so it gives the same G-code anywhere. Null: post is a built-in one.
gcode_unitsUnitsyesThe units the G-code is written in: mm (G21) or inch (G20). Everything else in the project stays in mm. Since schema 28.
library_uidstring or nullnoThe uid of the machine profile these values came from, for reference; nothing that cuts reads it. Null: not from a profile.
max_feednumber or nullnoThe machine’s fastest feed, mm/min: higher feeds are refused, and the cycle time uses it for rapids. Null: unknown.
namestring or nullnoThe machine profile these values came from, for reference; nothing reads it.
poststringyesThe post-processor: grbl, linuxcnc, mach3, or the name of your own.
safe_znumberyesThe height for rapid moves sideways, mm above Z0. Above the stock top.
spindleSpindleyesThe spindle’s direction: cw (M3) or ccw (M4).
tool_changeToolChangeyesWith several tools: files (one file per tool) or program (one file with tool changes).
travelTravel or nullnoThe machine’s travel, mm. When set, a program that moves farther is refused. Null: not checked.
work_zeroWorkZeronoThe point of the drawing that becomes X0 Y0 in the G-code. Missing: the drawing’s origin.

Operation

"type": "profile"

FieldTypeRequiredMeaning
clearancenumberyesHow far the cut moves into the material that is kept, mm: positive removes more (a larger pocket, a smaller part), negative leaves material. Less than the tool radius.
corner_choiceslist of CornerChoicenoCorners with their own bone, whatever corners says. Missing or empty: none. Left out when empty.
cornersCorners or nullnoDogbones or T-bones in the inside corners, so square parts fit. Null: the corners stay round.
directionDirectionyesclimb or conventional milling.
enabledbooleannoFalse: the operation stays in the project but isn’t cut. Missing: true.
end_depthnumberyesWhere the cut ends, mm down from the stock top. More than the start depth; below the stock bottom only within stock.max_overcut.
feednumberyesThe cutting feed, mm/min.
finishFinish or nullnoA finishing pass: the roughing passes leave stock mm on the wall, and one last lap at full depth takes it off. Null: none.
namestringnoA name for the operation, shown in the list and on the setup sheet. Empty: none.
partintegeryesThe id of the part it belongs to (parts).
plunge_feednumberyesThe feed going down into the material, mm/min.
ramp_anglenumberyesThe steepest the spiral ramp goes down along the contour, radians: more than 0, at most 30° (0.5236). A profile always spirals down (docs/specs/profile-always-spiral.md).
selectSelectoryesWhat the operation cuts: the shapes on a layer, or shapes by id.
sideSideyesWhich side of the line the tool cuts: outside (cutting a part out), inside (a hole) or on the line.
skinSkin or nullnoAn onion skin: the passes stop thickness mm above the end depth, and one last lap cuts through it. Null: none.
start_depthnumberyesWhere the cut starts, mm down from the stock top: 0 for the top, more when an earlier operation already cut down to there.
startslist of 2 × numbernoWhere the cut starts, as points in drawing coordinates (mm): each moves the start of the ring (contour) nearest to it. Empty: chosen by Chipload.
step_downnumberyesThe deepest each pass goes, mm. The passes are equal, and the last one ends exactly at the end depth.
tabsTabs or nullnoHolding tabs left at the bottom of the cut, so a part cut out doesn’t come loose. Null: none.
toolintegeryesThe id of the project tool it cuts with (tools).

"type": "pocket"

FieldTypeRequiredMeaning
clearancenumberyesHow far the cut moves into the material that is kept, mm: positive removes more (a larger pocket, a smaller part), negative leaves material. Less than the tool radius.
corner_choiceslist of CornerChoicenoCorners with their own bone, whatever corners says. Missing or empty: none. Left out when empty.
cornersCorners or nullnoDogbones or T-bones in the inside corners, so square parts fit. Null: the corners stay round.
directionDirectionyesclimb or conventional milling.
enabledbooleannoFalse: the operation stays in the project but isn’t cut. Missing: true.
end_depthnumberyesWhere the cut ends, mm down from the stock top. More than the start depth; below the stock bottom only within stock.max_overcut.
entryEntrynoHow the tool goes down at the start of each pass: plunge (straight down; needs a centre-cutting tool) or ramp along the path; pockets also helix. Missing: plunge.
feednumberyesThe cutting feed, mm/min.
leadLead or nullnoA quarter-circle lead-in and lead-out from the cleared side onto the wall. Null: none.
namestringnoA name for the operation, shown in the list and on the setup sheet. Empty: none.
partintegeryesThe id of the part it belongs to (parts).
plunge_feednumberyesThe feed going down into the material, mm/min.
restRest or nullnoRest machining: clear only what a larger tool leaves in these shapes. Null: the whole pocket.
rest_passeslist of RestPassnoRest passes: smaller endmills that clear what this pocket’s tool (or the pass before) leaves, in its shapes and depths. Missing or empty: none. Left out when empty.
selectSelectoryesWhat the operation cuts: the shapes on a layer, or shapes by id.
start_depthnumberyesWhere the cut starts, mm down from the stock top: 0 for the top, more when an earlier operation already cut down to there.
startslist of 2 × numbernoWhere each wall ring starts, as points in drawing coordinates (mm): each moves the start of the wall ring nearest to it. Empty: chosen by Chipload.
step_downnumberyesThe deepest each pass goes, mm. The passes are equal, and the last one ends exactly at the end depth.
stepovernumberyesThe distance between the clearing rings, as a fraction of the tool diameter: more than 0, at most 1.
toolintegeryesThe id of the project tool it cuts with (tools).

"type": "vcarve"

V-carve: a V-bit follows the centre line of closed shapes, as deep as makes the cut exactly as wide as the shape.

FieldTypeRequiredMeaning
enabledbooleannoFalse: the operation stays in the project but isn’t cut. Missing: true.
end_depthnumberyesThe deepest the V-bit’s tip may go, mm down from the stock top. Strokes that need more are carved to it, narrower than drawn, with a warning.
feednumberyesThe feed, mm/min, for moves no steeper than 45°.
namestringnoA name for the operation, shown in the list and on the setup sheet. Empty: none.
partintegeryesThe id of the part it belongs to (parts).
plunge_feednumberyesThe feed for moves steeper than 45°, mm/min.
selectSelectoryesWhat the operation cuts: the shapes on a layer, or shapes by id.
start_depthnumberyesThe surface carved, mm down from the stock top: 0 for the top, more to carve on a floor an earlier pocket cut.
step_downnumber or nullnoCarve in passes no deeper than this, mm. Null: one pass.
toolintegeryesThe id of the project tool it cuts with (tools).

"type": "path"

Follow path: the tool centre on the selected shapes, open or closed.

FieldTypeRequiredMeaning
enabledbooleannoFalse: the operation stays in the project but isn’t cut. Missing: true.
end_depthnumberyesWhere the cut ends, mm down from the stock top. More than the start depth; below the stock bottom only within stock.max_overcut.
entryEntryyesHow the tool goes down at the start of each pass: plunge or ramp along the path.
feednumberyesThe cutting feed, mm/min.
namestringnoA name for the operation, shown in the list and on the setup sheet. Empty: none.
partintegeryesThe id of the part it belongs to (parts).
plunge_feednumberyesThe feed going down into the material, mm/min.
selectSelectoryesWhat the operation cuts: the shapes on a layer, or shapes by id.
start_depthnumberyesWhere the cut starts, mm down from the stock top: 0 for the top, more when an earlier operation already cut down to there.
step_downnumberyesThe deepest each pass goes, mm. The passes are equal, and the last one ends exactly at the end depth.
toolintegeryesThe id of the project tool it cuts with (tools).

"type": "holes"

Holes: drilled with a drill, bored with a helix with an endmill.

FieldTypeRequiredMeaning
enabledbooleannoFalse: the operation stays in the project but isn’t cut. Missing: true.
end_depthnumberyesWhere the hole ends, mm down from the stock top. For a drill, the depth of its point.
feednumberyesA bore’s feed round its helix and bottom circle, mm/min. A drill doesn’t use it.
methodHoleMethodyesHow the holes are cut: drill with a drill, or bore (a helix) with an endmill.
namestringnoA name for the operation, shown in the list and on the setup sheet. Empty: none.
partintegeryesThe id of the part it belongs to (parts).
plunge_feednumberyesA drill’s feed down, or a bore’s feed straight down to the start depth, mm/min.
selectSelectoryesWhat the operation cuts: the circles among the shapes on a layer, or shapes by id. Other shapes are skipped with a note.
start_depthnumberyesWhere the cut starts, mm down from the stock top: 0 for the top, more when an earlier operation already cut down to there.
toolintegeryesThe id of the project tool it cuts with (tools).

"type": "surface"

Surface: the whole stock top taken down flat, in straight passes back and forth.

FieldTypeRequiredMeaning
enabledbooleannoFalse: the operation stays in the project but isn’t cut. Missing: true.
end_depthnumberyesHow far down the stock top is taken, mm. At most the stock thickness.
feednumberyesThe cutting feed, mm/min.
namestringnoA name for the operation, shown in the list and on the setup sheet. Empty: none.
partintegeryesThe id of the part it belongs to (parts). The stock is faced once, whatever copies the part has.
plunge_feednumberyesThe feed going down beside the stock to each depth, mm/min.
start_depthnumberyesWhere the cut starts, mm down from the stock top: 0 for the top.
step_downnumberyesThe deepest each pass goes, mm. The passes are equal, and the last one ends exactly at the end depth.
stepovernumberyesThe distance between passes, as a fraction of the tool diameter: at least 0.1, at most 0.9.
toolintegeryesThe id of the project tool it cuts with (tools): an endmill.

Part

A part: a named group of operations, cut together, with its own copies (docs/specs/parts.md §2). It owns no geometry: its operations select the shapes.

FieldTypeRequiredMeaning
copiesCopies or nullnoCut the part several times in a grid. Null: once.
enabledbooleanyesFalse: the part and all its operations stay in the project but aren’t cut.
idintegeryesIts number, unique in the project: what operations name it by.
namestringyesIts name, unique in the project, shown in the Browser, the report and the sheet.

PathSegment

  • object:

  • object:

Placement

Where the imported drawing is put: a DXF point p goes to scale · rotate(p) + (dx, dy), turned and scaled about the DXF’s origin.

FieldTypeRequiredMeaning
dxnumberyesThen moved along X, mm.
dynumberyesThen moved along Y, mm.
rotationnumberyesTurned counter-clockwise about the DXF’s origin, degrees, at least 0 and less than 360, after the scale. Multiples of 90 are exact.
scalenumberyesScaled about the DXF’s origin by this factor, 0.001 to 1000; 1: as drawn.

Rest

Rest machining: the pocket clears only the material the larger tool after_tool can’t reach in its shapes.

FieldTypeRequiredMeaning
after_toolintegeryesThe id of the larger project tool whose leftovers this pocket clears.

RestPass

One rest pass of a pocket (docs/specs/rest-passes.md §2): it takes the pocket’s shapes, depths, clearance and direction, and clears only what the tool before it leaves.

FieldTypeRequiredMeaning
enabledbooleannoFalse: kept, but not cut. Missing: true.
entryEntryyesHow the tool goes down: plunge, ramp or helix.
feednumberyesThe cutting feed, mm/min.
plunge_feednumberyesThe feed going down into the material, mm/min.
step_downnumberyesThe deepest each pass goes, mm.
stepovernumberyesThe distance between the clearing rings, as a fraction of the tool diameter.
toolintegeryesThe id of the project tool it cuts with (tools): an endmill smaller than the tool before it.

Selector

FieldTypeRequiredMeaning
dxfinteger or nullnoOnly shapes from this DXF (an id in drawing.dxfs).
excludelist of integer or nullnoShapes of that DXF, image or text left out (ids); with dxf, image or text only. A contour with any of them isn’t cut. A traced image’s, or a text’s, are found again when it is made again.
imageinteger or nullnoOnly shapes traced from this image (an id in drawing.images).
layerstring or nullnoEvery shape on this layer (upper or lower case don’t matter).
shapeslist of integer or nullnoThese shapes, by id.
textinteger or nullnoOnly the letters of this text (an id in drawing.texts).

Shape

One shape of the drawing: imported from a DXF (path: lines and arcs, one shape per DXF entity), or drawn in Chipload (circle, rectangle, polyline). One flat object: id, layer, kind, then the fields of that kind.

FieldTypeRequiredMeaning
anglenumber or nullnorectangle: its rotation about the centre, radians, counter-clockwise.
bulgeslist of number or nullnopolyline: one per segment, as in DXF: tan(sweep / 4); 0 straight, 1 a counter-clockwise half circle, -1 clockwise.
center2 × number or nullnocircle, rectangle: the centre, mm.
closedboolean or nullnopath, polyline: whether it ends where it starts.
corner_radiusnumber or nullnorectangle: the radius of its corners, mm; 0 for sharp ones.
dxfinteger or nullnopath: the DXF it was imported from (its id in drawing.dxfs).
dxf_handlestring or nullnopath: the handle of the DXF entity it came from, which keeps its id when the DXF is updated.
dxf_typestring or nullnopath: the DXF entity’s type, e.g. LWPOLYLINE.
idintegeryesThe shape’s id, which operations select it by.
imageinteger or nullnopath: the image it was traced from; absent for shapes from a DXF.
kindShapeKindyespath (imported from a DXF), or a shape drawn in Chipload: circle, rectangle, polyline.
layerstringyesIts layer.
lengthnumber or nullnorectangle: its size along its own X axis, mm.
namestring or nullnocircle, rectangle, polyline: its name in the Browser; left out when it has none.
pointslist of 2 × number or nullnopolyline: its points, mm.
radiusnumber or nullnocircle: the radius, mm.
segmentslist of PathSegment or nullnopath: its lines and arcs, mm.
textinteger or nullnopath: the text it is a letter of (its id in drawing.texts).
widthnumber or nullnorectangle: its size along its own Y axis, mm.

ShapeKind

One of: "path", "circle", "rectangle", "polyline".

Side

One of: "inside", "outside", "on".

Skin

An onion skin on a profile.

FieldTypeRequiredMeaning
thicknessnumberyesLeft above the end depth until the last lap, mm: more than 0, at most the step down.

SourceIssue

An import-time issue that can’t be recomputed from the shapes.

FieldTypeRequiredMeaning
codestringyesWhat kind of issue, e.g. duplicate or open_contour (see the import page of the guide).
messagestringyesWhat it is, in words.
severityIssueSeverityyeswarning or error.

Spindle

  • "cw": M3

  • "ccw": M4

Stock

FieldTypeRequiredMeaning
max_overcutnumberyesHow far a cut may go below the stock bottom, into the spoilboard, mm.
originStockOriginnoWhere the stock lies around the drawing’s origin: its bottom_left corner or its center there.
thicknessnumberyesThickness, mm. Depths count down from the top.
xnumberyesSize along X, mm.
ynumberyesSize along Y, mm.
z_zeroZZeronoWhere Z0 is: the stock top or bottom.

StockCorner

One of: "center", "bottom_left", "bottom_right", "top_left", "top_right".

StockOrigin

One of: "bottom_left", "center".

Tabs

FieldTypeRequiredMeaning
atlist of 2 × numbernoTab centres placed by hand, in drawing coordinates (mm): a contour with points gets exactly those tabs, one without gets count, evenly spaced. Left out when empty.
countintegeryesTabs per contour, at least 1.
flank_anglenumberyesThe slope of the tab’s sides, radians: π/2 (90°) straight, less for sloped tabs a ramped profile follows.
heightnumberyesThe bridge’s thickness, up from the bottom of the cut, mm.
widthnumberyesThe bridge left on the part, along its edge, mm (the flat top of a sloped tab).

Text

A text written into shapes: what it says, its font and size, and where it goes. Its letters are path shapes on its layer that name it in text, made again when it changes; the font is needed only for that, not to cut them.

FieldTypeRequiredMeaning
alignTextAlignyesHow the lines line up against each other.
anchorTextAnchornoWhat x and y are: the box’s lower-left corner (before the turn), or its centre. A centred text stays centred there when its words, font or size change. Missing: the corner.
fontstringyesA built-in font: FreeSans, FreeSans Bold, FreeSerif, FreeSerif Bold, FreeMono or FreeMono Bold (chipload text fonts).
heightnumberyesThe height of a capital letter, mm.
idintegeryesThe text’s id, which its letters name.
layerstringyesThe layer its letters go on.
line_spacingnumberyesFrom one line’s base to the next, in capital heights.
rotationnumberyesTurned counter-clockwise about the box’s centre, degrees, at least 0 and less than 360.
spacingnumberyesExtra space between letters, mm; 0: the font’s own spacing, kerning included.
textstringyesWhat it says; a line break (“\n”) starts a new line.
xnumberyesX of the text’s anchor on the stock, mm: the lower-left corner of its box (before the turn) or its centre.
ynumberyesY of the text’s anchor on the stock, mm.

TextAlign

How a text’s lines line up.

One of: "left", "center", "right".

TextAnchor

What a text’s position is (docs/specs/text.md §3).

  • "corner": The lower-left corner of the text’s box, before the turn.

  • "center": The centre of the text’s box (the turn keeps it in place).

Tool

FieldTypeRequiredMeaning
anglenumber or nullnoV-bits: the included angle, radians. Null: unknown; a V-carve then refuses the tool.
center_cuttingboolean or nullnoWhether it can plunge straight down. False: profiles ramp in and pockets go down round a helix. Null: unknown.
diameternumberyesDiameter, mm. For a V-bit, its widest cutting diameter.
flutesinteger or nullnoNumber of flutes, for the chip load. Null: unknown.
idintegeryesThe tool’s number: what operations name it by, and its T number in the G-code.
library_uidstring or nullnoThe uid of the library tool it came from, for reference; nothing that cuts reads it. Null: not from the library.
namestring or nullnoThe library tool it came from, for reference.
rpmnumber or nullnoSpindle speed, rpm. Needed to generate.
tip_diameternumber or nullnoV-bits: the flat tip’s diameter, mm. Null: pointed.
typeToolTypenoendmill, drill or vbit.

ToolChange

How a job with several tools is written.

  • "files": One G-code file per tool group; the user changes the tool and sets Z zero between.

  • "program": One file with T<n> M6 at each change, for a sender that handles it.

ToolType

One of: "endmill", "drill", "vbit".

Travel

FieldTypeRequiredMeaning
xnumberyesTravel along X, mm.
ynumberyesTravel along Y, mm.
znumberyesTravel along Z, mm.

Units

One of: "mm", "inch".

UnitsFrom

  • "dxf": Declared by the DXF ($INSUNITS).

  • "user": The DXF declared none; the user chose.

Wall

One of a corner’s two walls, by length.

One of: "longer", "shorter".

WorkZero

Where the G-code’s X0 Y0 is. The geometry never moves; only the output is translated.

  • object: The drawing’s own origin (the only choice before work_zero existed). An empty struct variant, not a unit one, so serde refuses stray fields here too.

  • object: A corner or the centre of the stock, as placed by stock.origin.

  • object: Any point, in drawing coordinates (mm).

ZZero

One of: "top", "bottom".