CabCodeXF — CabCode eXchange Format

An open, machine-neutral interchange format for panel furniture: board, per-edge edging, drilling/routing and assembly placement. CabCodeXF carries machining intent — a CAD system emits it; a factory imports it and generates the machine CAM.

Version 1.0 · draftxmlns: https://cabcode.uk/cabcodexf/1.0Open spec · free to implement

Downloads

Why CabCodeXF

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. CabCodeXF fills that gap: a CAD vendor emits intent, and the consuming factory owns the CAM step — so writing a CabCodeXF post-processor is cheap.

Conventions

  • Units millimetres; angles in degrees (declared in <Header>).
  • Part datum origin at the corner of reference face A; X along length, Y along width, Z normal to A.
  • Faces A/B (the two faces) plus four edges named by the coordinate they sit on: X0, Xmax, Y0, Ymax.
  • Length / width are the machining-frame extents (an op's x runs 0..length) — not the saw "longer side" convention.
  • Depth is a positive magnitude into the named face; through="true" overrides it.
  • Grain is stated explicitly on each part, never inferred.
  • Assembly is optional and additive — a pure cut-list omits it and still validates.

Elements

<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
name / noteoptional on every operation — a short label and a note for the operator; never changes what is machined
<Assembly>optional: places each part instance (position + orientation) for viewing

Worked example

One part (a cabinet gable) with board, edging, the three operation primitives, and an assembly instance:

<?xml version="1.0" encoding="UTF-8"?>
<CabCodeXF xmlns="https://cabcode.uk/cabcodexf/1.0" version="1.0">
  <Header units="mm" angleUnit="deg" producer="AcmeCAD / CabCodeXF 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>
</CabCodeXF>

Validation

Every CabCodeXF document validates against the XSD schema at /cabcodexf/cabcodexf-1.0.xsd (target namespace https://cabcode.uk/cabcodexf/1.0). Validate locally with xmllint:

xmllint --noout --schema cabcodexf-1.0.xsd your-cabinet.cabcodexf

A producer's post-processor is considered CabCodeXF-conformant when its output validates against this schema and the sample files above round-trip through a reference consumer.

Ownership & licensing

CabCodeXF 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.

drilling@cabcode.uk

Telephone : 0203 889 9227
Text : 07441 359001

Contact Us
About Us