An open, machine-neutral interchange format for panel furniture: board, per-edge edging, drilling/routing and assembly placement. CCX carries machining intent — a CAD system emits it; a factory imports it and generates the machine CAM.
No open, vendor-neutral format describes panel/cabinet machining intent the way BTLx does for timber. Machine formats like WoodWOP .mpr or Biesse .cix are post-processor output; DXF is geometry without machining semantics. CCX fills that gap: a CAD vendor emits intent, and the consuming factory owns the CAM step — so writing a CCX post-processor is cheap.
<Header>).A/B (the two faces) plus four edges named by the coordinate they sit on: X0, Xmax, Y0, Ymax.x runs 0..length) — not the saw "longer side" convention.through="true" overrides it.| <Header> | units (mm), producer, timestamp |
| <Materials> | board definitions, referenced by id (neutral manufacturer/decor/finish/thickness) |
| <EdgeMaterials> | edge-band definitions, referenced by id |
| <Part> | one panel: length/width/thickness, grain, material; holds edging + operations |
| <Edging> | per-edge banding (edges X0/Xmax/Y0/Ymax) |
| <Bore> | drilling — face bore (A/B) or edge bore; optional repeat <Pattern> |
| <Route> | routing — a path of <Line> and <Arc> segments; toolSide left/right puts the cutter beside the finished edge, centre cuts a groove |
| <Pocket> | pocketing — a rectangular recess by its centre, size, corner radius and angle |
| <Assembly> | optional: places each part instance (position + orientation) for viewing |
One part (a cabinet gable) with board, edging, the three operation primitives, and an assembly instance:
<?xml version="1.0" encoding="UTF-8"?>
<CCX xmlns="https://cabcode.uk/ccx/1.0" version="1.0">
<Header units="mm" angleUnit="deg" producer="AcmeCAD / CCX post-processor 1.0"/>
<Materials>
<Material id="M2" token="U960" manufacturer="Egger" decor="U960"
finish="ST9" type="MFC" thickness="18"/>
</Materials>
<EdgeMaterials>
<EdgeMaterial id="E1" kind="ABS" thickness="2.0"/>
</EdgeMaterials>
<Part id="P1" name="Gable" quantity="2"
length="720" width="300" thickness="18" grain="length" material="M2">
<Edging>
<Edge edge="Y0" as="W1" edgeMaterial="E1"/>
</Edging>
<Operations>
<Bore face="A" diameter="5" depth="12"> <!-- shelf line-boring -->
<At x="100" y="37"/>
<Pattern count="5" dx="32" dy="0"/>
</Bore>
<Bore face="Xmax" diameter="8" depth="30" z="9"> <!-- edge dowels -->
<At u="60"/><At u="240"/>
</Bore>
<Route face="B" toolWidth="4" depth="10"> <!-- back groove -->
<Line x1="8" y1="285" x2="712" y2="285"/>
</Route>
</Operations>
</Part>
<Assembly id="CAB-1" name="600 Base Unit" units="mm">
<Instance part="P1" id="GABLE-L">
<Position x="0" y="0" z="0"/>
<Orientation localX="+Z" localY="+Y" localZ="+X"/>
</Instance>
<!-- …further instances… -->
</Assembly>
</CCX> Every CCX document validates against the XSD schema at /ccx/ccx-1.0.xsd (target namespace https://cabcode.uk/ccx/1.0). Validate locally with xmllint:
xmllint --noout --schema ccx-1.0.xsd your-cabinet.ccxA producer's post-processor is considered CCX-conformant when its output validates against this schema and the sample files above round-trip through a reference consumer.
CCX is stewarded by CabCode and published as an open spec, free to produce and consume. The format and schema may be implemented by any CAD or machine vendor without fee. Questions, conformance and implementation support: drilling@cabcode.uk.