Skip to main content

DeCAD

CI License: Apache 2.0 Python 3.10+

English | 日本語

DeCAD is an open-source toolkit for reverse CAD and product disassembly. Its core is the OD-BOM (Open Disassembly & Reverse BOM) format: an open, machine-readable standard that captures how a physical product comes apart — what it contains, what holds it together, what blocks what, and how a robot can take it apart.

Traditional eBOM/mBOM formats describe how products are built. OD-BOM describes how they are unbuilt: reverse hierarchies, interference and precedence constraint graphs, tool and trajectory requirements per removal step, and end-of-life material classification for circular-economy valuation.

The format in 30 seconds

{
  "$schema": "https://open-disassembly.org/schemas/v0.1.0/odbom.schema.json",
  "metadata": { "odbom_version": "0.1.0", "product_id": "URN:PRODUCT:EV-BATTERY-PACK-2026", "name": "EV Battery Pack" },
  "nodes": [
    { "id": "node_top_cover", "type": "structural_part", "label": "Aluminum Top Housing Cover" },
    { "id": "node_m6_screw_01", "type": "fastener", "label": "M6 Torx Head Screw" },
    { "id": "node_cell_array_01", "type": "sub_assembly", "label": "Li-Ion Pouch Cell Array" }
  ],
  "graph_edges": {
    "fasteners": [
      { "fastener_id": "node_m6_screw_01", "retains": ["node_top_cover"], "anchored_to": "node_cell_array_01", "removal_method": "unscrew" }
    ],
    "interferences": [
      { "blocker": "node_top_cover", "blocked_node": "node_cell_array_01", "blocked_vectors": [[0.0, 0.0, 1.0]] }
    ]
  },
  "disassembly_execution_plan": [
    { "step_id": 1, "action": "unfasten", "target_nodes": ["node_m6_screw_01"] },
    { "step_id": 2, "action": "pick_and_lift", "target_nodes": ["node_top_cover"] }
  ]
}

Three things worth noticing:

  1. Nodes carry EoL classification — recyclability category and hazard flags, ready for recovery-value math.
  2. Edges are constraints a planner can use — the screws retain the cover; the cover blocks the cell array along +Z.
  3. The plan is checkable — decad validate proves the steps are executable in the given order against the constraint graph.

Install

Pre-release; install from a checkout (Python 3.10+, uv recommended):

git clone https://github.com/daikiito-dk/DeCAD.git
cd DeCAD
make setup        # creates .venv and installs -e ".[dev]"

Plain pip works too: python -m venv .venv && pip install -e .

CLI

$ decad validate examples/smartphone.odbom.json
OK: examples/smartphone.odbom.json is a valid OD-BOM document.

$ decad order examples/ev_battery_pack.odbom.json
node_m6_screw_01	M6 Torx Head Screw
node_top_cover	Aluminum Top Housing Cover
node_cell_array_01	Li-Ion Pouch Cell Array

$ decad summary examples/ev_battery_pack.odbom.json
Product:        Generic EV Battery Pack Module A (URN:PRODUCT:EV-BATTERY-PACK-2026)
OD-BOM version: 0.1.0
Nodes:          3 (fastener: 1, structural_part: 1, sub_assembly: 1)
Hazardous:      Li-Ion Pouch Cell Array
Edges:          fasteners: 1, bonds: 0, interferences: 1, precedences: 0
Plan steps:     2
Removal order:  node_m6_screw_01 -> node_top_cover -> node_cell_array_01

$ decad dot examples/smartphone.odbom.json | dot -Tsvg -o smartphone.svg

Python API

import decad

result = decad.validate_path("examples/ev_battery_pack.odbom.json")
assert result.valid
assert result.warnings == []

doc = decad.load("examples/ev_battery_pack.odbom.json")
doc.removal_order()  # ['node_m6_screw_01', 'node_top_cover', 'node_cell_array_01']
doc.summary()  # overview dict (nodes by type, hazards, edges, plan)
doc.to_dot()  # Graphviz DOT of the constraint graph

Repository layout

DeCAD/
├── schemas/            # Versioned OD-BOM JSON Schemas (the standard itself)
│   └── v0.1.0/odbom.schema.json
├── examples/           # Reference .odbom documents
├── docs/specification.md
├── src/decad/          # Python validator library + CLI
└── tests/              # Schema, semantics, graph, CLI coverage

Schema versioning & governance

  • The schema is versioned with SemVer and published under schemas/vX.Y.Z/.
  • Additive changes bump the minor version; breaking changes bump the major version.
  • A test enforces that the packaged schema copy (src/decad/_data/) stays identical to the canonical one.
  • Unknown x-* vendor extension keys are allowed everywhere and preserved by conforming tools.

Roadmap

  • Phase 1 (this release): OD-BOM v0.1.0 schema, specification, reference validator + CLI, examples, CI.
  • Phase 2: CAD converters (decad convert from STEP / OpenSCAD / FreeCAD assemblies), ROS 2 integration package mapping steps to behavior trees and MoveIt 2 (ros2_odbom), Scan-to-CAD baselines (image/point cloud → CAD command sequence → OD-BOM).
  • Phase 3: submit the stabilized specification to open-source robotics and circular-economy consortiums (e.g. ROS Industrial, Linux Foundation projects).

Contributing

See CONTRIBUTING.md. Licensed under Apache-2.0.

Metadata

Release files for decad 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for decad 0.1.0
File Size Uploaded
decad-0.1.0.tar.gz 29.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for decad 0.1.0
File Interpreter ABI Platform
decad-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 50.5 kB

Release files / decad-0.1.0.tar.gz

Download URL decad-0.1.0.tar.gz
Size 29.6 kB
Tags Source
SHA-256 checksum
How to use checksums
81d6139749bc95165f096bec9031550cf7e9888d9484ec1091e8973fc69a7cbd
BLAKE2b-256 checksum
How to use checksums
838715eebec383b5bbb2581d450e385d9a1c3a07d91244eebbfcae05957ada4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release files / decad-0.1.0-py3-none-any.whl

Download URL decad-0.1.0-py3-none-any.whl
Size 20.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d3f7875f61b7f096dec1f06ed355e36ff06fdc1cc311090c870351828adb1d52
BLAKE2b-256 checksum
How to use checksums
0cd14c7e300ab6cdc056385b178d77607fc36118f5577605db845062043e7340
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page