roschema catches breaking ROS 2 interface changes at PR time
No ROS install needed, runs in any CI, diffs against git or MCAP bags.
roschema is a new open-source tool from justagist that aims to eliminate the silent pain of breaking ROS 2 interface changes. In ROS 2, any edit to a .msg, .srv, or .action file (adding, removing, reordering, or retyping a field) breaks wire compatibility between mismatched nodes and renders old rosbags unreadable due to CDR’s positional serialization. While REP-2011 will eventually allow type evolution at runtime, there is currently no mechanism to catch accidental breakage before deployment — especially at pull request time. roschema fills that gap.
The tool diffs your interface definitions against a git ref (e.g., origin/main), a directory, an MCAP bag, or a lockfile, and classifies every change into four categories: wire, source, introspection, and behavior. Each rule has a stable ID that you can configure, suppress, or customize. Additionally, roschema lints naming conventions, includes a canonical formatter, and ships as a GitHub Action. It runs with a single command (uvx roschema check --against origin/main) and requires no ROS installation, making it usable in any CI container. The demo repo includes passing and failing branches with a ready-to-copy workflow. roschema is complementary to runtime protections like type hashes — it prevents errors at review time, not at runtime.
- Detects breaking changes in .msg/.srv/.action files by diffing against git, directory, MCAP bag, or lockfile.
- Classifies changes into wire, source, introspection, and behavior categories with configurable rule IDs.
- Ships a GitHub Action, needs no ROS installation, and runs in any CI container with a single uvx command.
Why It Matters
Prevents silent robot failures and broken rosbags by catching interface incompatibilities before deployment.