A browser-based diff tool for comparing Matter specification data models across versions. It parses the official XML cluster and device-type definitions and produces a structured, searchable diff.
This tool lets you pick any two Matter spec versions and instantly see what changed:
- Added / Removed / Modified clusters — with full detail down to individual attributes, commands, events, features, data types, and their fields.
- Added / Removed / Modified device types — including cluster requirements, condition requirements, features, and commands.
- Revision tracking — highlights clusters or device types whose content changed but whose revision number was not bumped ("No Revision Update" warnings).
- Deep search — type any term (an attribute name, a command, an event, a feature flag, an enum value) and the tool filters the diff to show only matching elements, even inside nested structures.
- Export — download the computed diff as a JSON file for offline analysis or integration with other tooling.
| Dark Mode | Light Mode |
|---|---|
![]() |
![]() |
build_tool.sh builds the local data files (see below) and, with --serve, starts a static HTTP server:
cd dm_diff_tool
./build_tool.sh --serve # add --port 9000 to change the portThen open http://localhost:8000 in your browser.
If you already have the data files built and just want to serve the directory, any static HTTP server works (e.g. python3 -m http.server 8000).
First-load note: The tool downloads the Pyodide Python runtime (~20 MB) on the first visit. A loading spinner is shown during this time. Subsequent loads are faster once the browser has cached the runtime.
Neither the raw XML files nor the built zips are committed — the deploy CI builds everything from connectedhomeip on every push to main.
To build locally for development:
# Auto-clones connectedhomeip (data_model/ only) into /tmp, then builds zips:
./build_tool.sh
# Or, if you already have a local connectedhomeip checkout:
MATTER_SDK_PATH=/path/to/connectedhomeip
./build_tool.sh
# Add --serve to build and then open a local server in one step:
./build_tool.sh --serveThis reads $MATTER_SDK_PATH/data_model/{version}/clusters/ and $MATTER_SDK_PATH/data_model/{version}/device_types/, produces one zip per version under data_model/zips/, and regenerates data_manifest.json.

