Repository Summary
| Description | |
| Checkout URI | https://github.com/ros-tooling/nodl.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-10 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| ament_nodl | 2.0.3 |
| nodl_tutorial_basics | 2.0.3 |
| nodl_tutorial_dummy_robot | 2.0.3 |
| nodl | 2.0.3 |
| nodl_common_interfaces | 2.0.3 |
| nodl_docgen | 2.0.3 |
| nodl_generator_common | 2.0.2 |
| nodl_generator_cpp | 2.0.3 |
| nodl_generator_py | 0.1.0 |
| nodl_observe | 2.0.3 |
| nodl_schema | 2.0.3 |
| ros2nodl | 2.0.3 |
| test_ament_nodl | 2.0.3 |
| test_nodl_generators | 0.1.0 |
| test_nodl_generators_downstream | 2.0.3 |
README
NoDL - Node Definition Language

NoDL (Node Definition Language) is a schema and toolkit to describe a ROS 2 node’s interface: parameters, topics (publishers and subscriptions), services (clients and servers), and actions (clients and servers).
Find complete documentation at https://nodl.readthedocs.io/en/latest/
Repository structure
- ament_nodl/: CMake macros to register NoDL documents with the ament index
-
nodl/: Metapackage that pulls in the other packages as dependencies. Acts as an easy default for those who don’t want a-la-carte.
- doc/: Documentation source for the ReadTheDocs page
- nodl_common_interfaces/: Language-independent NoDL descriptions for the standard ROS 2 node and lifecycle-node base types, with C++ and Python code-generation metadata.
- nodl_docgen/: Sphinx extension rendering a NoDL document into a documentation page at build time.
- nodl_generator_common/: Language-agnostic code generator logic shared by NoDL generators.
- nodl_generator_cpp/: C++ code generator — produces an abstract base class from a NoDL document, with a CMake macro for build integration.
-
nodl_generator_py/: Python code generator — produces an
rclpybase class from a NoDL document at build time. -
nodl_observe/: C++ (
ament_cmake) package that observes a running ROS 2 node and produces its runtime interface as arosgraph_msgs/Nodemessage — a reusableobserve_node(...)library plus anobserveexecutable. Stage one of Observe → Describe. - nodl_schema/: Package providing the NoDL schema, validation tools, a typed data model, and semantic comparison of loaded documents. nodl.schema.yaml: The NoDL schema, key to this whole thing!
-
ros2nodl/:
ros2cliextension providingros2 nodl ...commands - test_nodl_generators/: End-to-end integration tests for the C++ and Python NoDL generators.
-
test_nodl_generators_downstream/: Builds against the exported libraries of
test_nodl_generatorsfrom a separate package. - tools/: Scripts supporting development and build workflows
Developing
Setup
- Clone the repo and install pre-commit hooks:
pre-commit install
pre-commit install --hook-type prepare-commit-msg
The prepare-commit-msg hook will automatically add the Signed-off-by line to your commits. If you prefer to sign off manually, use git commit -s.
Pip dependencies for full test suite
The packages in this repository use a few package only available from pip as test_depends.
For the buildfarm environment, these dependencies and tests are disabled, because a package may not be packaged into a deb/rpm against dependencies from another package manager (pip).
To install all dependencies and run the full test suite, export environment variable ENABLE_PIP_TEST_DEPENDS=1 - which the GitHub Action CI for this repo does.
ROS Distribution Status
| Distro | Dev | Doc | Ubuntu Bin |
|---|---|---|---|
| Humble | |||
| Jazzy | |||
| Lyrical | |||
| Rolling |
Unsupported Distributions
These ROS distributions will receive no future release updates or code compatibility support.
| Distro | Date Support Ended | Reason |
|---|---|---|
| Kilted Kaiju | October 5, 2026 | Distro EOL in November |
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros-tooling/nodl.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-10 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| ament_nodl | 2.0.3 |
| nodl_tutorial_basics | 2.0.3 |
| nodl_tutorial_dummy_robot | 2.0.3 |
| nodl | 2.0.3 |
| nodl_common_interfaces | 2.0.3 |
| nodl_docgen | 2.0.3 |
| nodl_generator_common | 2.0.2 |
| nodl_generator_cpp | 2.0.3 |
| nodl_generator_py | 0.1.0 |
| nodl_observe | 2.0.3 |
| nodl_schema | 2.0.3 |
| ros2nodl | 2.0.3 |
| test_ament_nodl | 2.0.3 |
| test_nodl_generators | 0.1.0 |
| test_nodl_generators_downstream | 2.0.3 |
README
NoDL - Node Definition Language

NoDL (Node Definition Language) is a schema and toolkit to describe a ROS 2 node’s interface: parameters, topics (publishers and subscriptions), services (clients and servers), and actions (clients and servers).
Find complete documentation at https://nodl.readthedocs.io/en/latest/
Repository structure
- ament_nodl/: CMake macros to register NoDL documents with the ament index
-
nodl/: Metapackage that pulls in the other packages as dependencies. Acts as an easy default for those who don’t want a-la-carte.
- doc/: Documentation source for the ReadTheDocs page
- nodl_common_interfaces/: Language-independent NoDL descriptions for the standard ROS 2 node and lifecycle-node base types, with C++ and Python code-generation metadata.
- nodl_docgen/: Sphinx extension rendering a NoDL document into a documentation page at build time.
- nodl_generator_common/: Language-agnostic code generator logic shared by NoDL generators.
- nodl_generator_cpp/: C++ code generator — produces an abstract base class from a NoDL document, with a CMake macro for build integration.
-
nodl_generator_py/: Python code generator — produces an
rclpybase class from a NoDL document at build time. -
nodl_observe/: C++ (
ament_cmake) package that observes a running ROS 2 node and produces its runtime interface as arosgraph_msgs/Nodemessage — a reusableobserve_node(...)library plus anobserveexecutable. Stage one of Observe → Describe. - nodl_schema/: Package providing the NoDL schema, validation tools, a typed data model, and semantic comparison of loaded documents. nodl.schema.yaml: The NoDL schema, key to this whole thing!
-
ros2nodl/:
ros2cliextension providingros2 nodl ...commands - test_nodl_generators/: End-to-end integration tests for the C++ and Python NoDL generators.
-
test_nodl_generators_downstream/: Builds against the exported libraries of
test_nodl_generatorsfrom a separate package. - tools/: Scripts supporting development and build workflows
Developing
Setup
- Clone the repo and install pre-commit hooks:
pre-commit install
pre-commit install --hook-type prepare-commit-msg
The prepare-commit-msg hook will automatically add the Signed-off-by line to your commits. If you prefer to sign off manually, use git commit -s.
Pip dependencies for full test suite
The packages in this repository use a few package only available from pip as test_depends.
For the buildfarm environment, these dependencies and tests are disabled, because a package may not be packaged into a deb/rpm against dependencies from another package manager (pip).
To install all dependencies and run the full test suite, export environment variable ENABLE_PIP_TEST_DEPENDS=1 - which the GitHub Action CI for this repo does.
ROS Distribution Status
| Distro | Dev | Doc | Ubuntu Bin |
|---|---|---|---|
| Humble | |||
| Jazzy | |||
| Lyrical | |||
| Rolling |
Unsupported Distributions
These ROS distributions will receive no future release updates or code compatibility support.
| Distro | Date Support Ended | Reason |
|---|---|---|
| Kilted Kaiju | October 5, 2026 | Distro EOL in November |
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros-tooling/nodl.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-10 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| ament_nodl | 2.0.3 |
| nodl_tutorial_basics | 2.0.3 |
| nodl_tutorial_dummy_robot | 2.0.3 |
| nodl | 2.0.3 |
| nodl_common_interfaces | 2.0.3 |
| nodl_docgen | 2.0.3 |
| nodl_generator_common | 2.0.2 |
| nodl_generator_cpp | 2.0.3 |
| nodl_generator_py | 0.1.0 |
| nodl_observe | 2.0.3 |
| nodl_schema | 2.0.3 |
| ros2nodl | 2.0.3 |
| test_ament_nodl | 2.0.3 |
| test_nodl_generators | 0.1.0 |
| test_nodl_generators_downstream | 2.0.3 |
README
NoDL - Node Definition Language

NoDL (Node Definition Language) is a schema and toolkit to describe a ROS 2 node’s interface: parameters, topics (publishers and subscriptions), services (clients and servers), and actions (clients and servers).
Find complete documentation at https://nodl.readthedocs.io/en/latest/
Repository structure
- ament_nodl/: CMake macros to register NoDL documents with the ament index
-
nodl/: Metapackage that pulls in the other packages as dependencies. Acts as an easy default for those who don’t want a-la-carte.
- doc/: Documentation source for the ReadTheDocs page
- nodl_common_interfaces/: Language-independent NoDL descriptions for the standard ROS 2 node and lifecycle-node base types, with C++ and Python code-generation metadata.
- nodl_docgen/: Sphinx extension rendering a NoDL document into a documentation page at build time.
- nodl_generator_common/: Language-agnostic code generator logic shared by NoDL generators.
- nodl_generator_cpp/: C++ code generator — produces an abstract base class from a NoDL document, with a CMake macro for build integration.
-
nodl_generator_py/: Python code generator — produces an
rclpybase class from a NoDL document at build time. -
nodl_observe/: C++ (
ament_cmake) package that observes a running ROS 2 node and produces its runtime interface as arosgraph_msgs/Nodemessage — a reusableobserve_node(...)library plus anobserveexecutable. Stage one of Observe → Describe. - nodl_schema/: Package providing the NoDL schema, validation tools, a typed data model, and semantic comparison of loaded documents. nodl.schema.yaml: The NoDL schema, key to this whole thing!
-
ros2nodl/:
ros2cliextension providingros2 nodl ...commands - test_nodl_generators/: End-to-end integration tests for the C++ and Python NoDL generators.
-
test_nodl_generators_downstream/: Builds against the exported libraries of
test_nodl_generatorsfrom a separate package. - tools/: Scripts supporting development and build workflows
Developing
Setup
- Clone the repo and install pre-commit hooks:
pre-commit install
pre-commit install --hook-type prepare-commit-msg
The prepare-commit-msg hook will automatically add the Signed-off-by line to your commits. If you prefer to sign off manually, use git commit -s.
Pip dependencies for full test suite
The packages in this repository use a few package only available from pip as test_depends.
For the buildfarm environment, these dependencies and tests are disabled, because a package may not be packaged into a deb/rpm against dependencies from another package manager (pip).
To install all dependencies and run the full test suite, export environment variable ENABLE_PIP_TEST_DEPENDS=1 - which the GitHub Action CI for this repo does.
ROS Distribution Status
| Distro | Dev | Doc | Ubuntu Bin |
|---|---|---|---|
| Humble | |||
| Jazzy | |||
| Lyrical | |||
| Rolling |
Unsupported Distributions
These ROS distributions will receive no future release updates or code compatibility support.
| Distro | Date Support Ended | Reason |
|---|---|---|
| Kilted Kaiju | October 5, 2026 | Distro EOL in November |
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros-tooling/nodl.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-10 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| ament_nodl | 2.0.3 |
| nodl_tutorial_basics | 2.0.3 |
| nodl_tutorial_dummy_robot | 2.0.3 |
| nodl | 2.0.3 |
| nodl_common_interfaces | 2.0.3 |
| nodl_docgen | 2.0.3 |
| nodl_generator_common | 2.0.2 |
| nodl_generator_cpp | 2.0.3 |
| nodl_generator_py | 0.1.0 |
| nodl_observe | 2.0.3 |
| nodl_schema | 2.0.3 |
| ros2nodl | 2.0.3 |
| test_ament_nodl | 2.0.3 |
| test_nodl_generators | 0.1.0 |
| test_nodl_generators_downstream | 2.0.3 |
README
NoDL - Node Definition Language

NoDL (Node Definition Language) is a schema and toolkit to describe a ROS 2 node’s interface: parameters, topics (publishers and subscriptions), services (clients and servers), and actions (clients and servers).
Find complete documentation at https://nodl.readthedocs.io/en/latest/
Repository structure
- ament_nodl/: CMake macros to register NoDL documents with the ament index
-
nodl/: Metapackage that pulls in the other packages as dependencies. Acts as an easy default for those who don’t want a-la-carte.
- doc/: Documentation source for the ReadTheDocs page
- nodl_common_interfaces/: Language-independent NoDL descriptions for the standard ROS 2 node and lifecycle-node base types, with C++ and Python code-generation metadata.
- nodl_docgen/: Sphinx extension rendering a NoDL document into a documentation page at build time.
- nodl_generator_common/: Language-agnostic code generator logic shared by NoDL generators.
- nodl_generator_cpp/: C++ code generator — produces an abstract base class from a NoDL document, with a CMake macro for build integration.
-
nodl_generator_py/: Python code generator — produces an
rclpybase class from a NoDL document at build time. -
nodl_observe/: C++ (
ament_cmake) package that observes a running ROS 2 node and produces its runtime interface as arosgraph_msgs/Nodemessage — a reusableobserve_node(...)library plus anobserveexecutable. Stage one of Observe → Describe. - nodl_schema/: Package providing the NoDL schema, validation tools, a typed data model, and semantic comparison of loaded documents. nodl.schema.yaml: The NoDL schema, key to this whole thing!
-
ros2nodl/:
ros2cliextension providingros2 nodl ...commands - test_nodl_generators/: End-to-end integration tests for the C++ and Python NoDL generators.
-
test_nodl_generators_downstream/: Builds against the exported libraries of
test_nodl_generatorsfrom a separate package. - tools/: Scripts supporting development and build workflows
Developing
Setup
- Clone the repo and install pre-commit hooks:
pre-commit install
pre-commit install --hook-type prepare-commit-msg
The prepare-commit-msg hook will automatically add the Signed-off-by line to your commits. If you prefer to sign off manually, use git commit -s.
Pip dependencies for full test suite
The packages in this repository use a few package only available from pip as test_depends.
For the buildfarm environment, these dependencies and tests are disabled, because a package may not be packaged into a deb/rpm against dependencies from another package manager (pip).
To install all dependencies and run the full test suite, export environment variable ENABLE_PIP_TEST_DEPENDS=1 - which the GitHub Action CI for this repo does.
ROS Distribution Status
| Distro | Dev | Doc | Ubuntu Bin |
|---|---|---|---|
| Humble | |||
| Jazzy | |||
| Lyrical | |||
| Rolling |
Unsupported Distributions
These ROS distributions will receive no future release updates or code compatibility support.
| Distro | Date Support Ended | Reason |
|---|---|---|
| Kilted Kaiju | October 5, 2026 | Distro EOL in November |
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros-tooling/nodl.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-10 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| ament_nodl | 2.0.3 |
| nodl_tutorial_basics | 2.0.3 |
| nodl_tutorial_dummy_robot | 2.0.3 |
| nodl | 2.0.3 |
| nodl_common_interfaces | 2.0.3 |
| nodl_docgen | 2.0.3 |
| nodl_generator_common | 2.0.2 |
| nodl_generator_cpp | 2.0.3 |
| nodl_generator_py | 0.1.0 |
| nodl_observe | 2.0.3 |
| nodl_schema | 2.0.3 |
| ros2nodl | 2.0.3 |
| test_ament_nodl | 2.0.3 |
| test_nodl_generators | 0.1.0 |
| test_nodl_generators_downstream | 2.0.3 |
README
NoDL - Node Definition Language

NoDL (Node Definition Language) is a schema and toolkit to describe a ROS 2 node’s interface: parameters, topics (publishers and subscriptions), services (clients and servers), and actions (clients and servers).
Find complete documentation at https://nodl.readthedocs.io/en/latest/
Repository structure
- ament_nodl/: CMake macros to register NoDL documents with the ament index
-
nodl/: Metapackage that pulls in the other packages as dependencies. Acts as an easy default for those who don’t want a-la-carte.
- doc/: Documentation source for the ReadTheDocs page
- nodl_common_interfaces/: Language-independent NoDL descriptions for the standard ROS 2 node and lifecycle-node base types, with C++ and Python code-generation metadata.
- nodl_docgen/: Sphinx extension rendering a NoDL document into a documentation page at build time.
- nodl_generator_common/: Language-agnostic code generator logic shared by NoDL generators.
- nodl_generator_cpp/: C++ code generator — produces an abstract base class from a NoDL document, with a CMake macro for build integration.
-
nodl_generator_py/: Python code generator — produces an
rclpybase class from a NoDL document at build time. -
nodl_observe/: C++ (
ament_cmake) package that observes a running ROS 2 node and produces its runtime interface as arosgraph_msgs/Nodemessage — a reusableobserve_node(...)library plus anobserveexecutable. Stage one of Observe → Describe. - nodl_schema/: Package providing the NoDL schema, validation tools, a typed data model, and semantic comparison of loaded documents. nodl.schema.yaml: The NoDL schema, key to this whole thing!
-
ros2nodl/:
ros2cliextension providingros2 nodl ...commands - test_nodl_generators/: End-to-end integration tests for the C++ and Python NoDL generators.
-
test_nodl_generators_downstream/: Builds against the exported libraries of
test_nodl_generatorsfrom a separate package. - tools/: Scripts supporting development and build workflows
Developing
Setup
- Clone the repo and install pre-commit hooks:
pre-commit install
pre-commit install --hook-type prepare-commit-msg
The prepare-commit-msg hook will automatically add the Signed-off-by line to your commits. If you prefer to sign off manually, use git commit -s.
Pip dependencies for full test suite
The packages in this repository use a few package only available from pip as test_depends.
For the buildfarm environment, these dependencies and tests are disabled, because a package may not be packaged into a deb/rpm against dependencies from another package manager (pip).
To install all dependencies and run the full test suite, export environment variable ENABLE_PIP_TEST_DEPENDS=1 - which the GitHub Action CI for this repo does.
ROS Distribution Status
| Distro | Dev | Doc | Ubuntu Bin |
|---|---|---|---|
| Humble | |||
| Jazzy | |||
| Lyrical | |||
| Rolling |
Unsupported Distributions
These ROS distributions will receive no future release updates or code compatibility support.
| Distro | Date Support Ended | Reason |
|---|---|---|
| Kilted Kaiju | October 5, 2026 | Distro EOL in November |
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros-tooling/nodl.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-10 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| ament_nodl | 2.0.3 |
| nodl_tutorial_basics | 2.0.3 |
| nodl_tutorial_dummy_robot | 2.0.3 |
| nodl | 2.0.3 |
| nodl_common_interfaces | 2.0.3 |
| nodl_docgen | 2.0.3 |
| nodl_generator_common | 2.0.2 |
| nodl_generator_cpp | 2.0.3 |
| nodl_generator_py | 0.1.0 |
| nodl_observe | 2.0.3 |
| nodl_schema | 2.0.3 |
| ros2nodl | 2.0.3 |
| test_ament_nodl | 2.0.3 |
| test_nodl_generators | 0.1.0 |
| test_nodl_generators_downstream | 2.0.3 |
README
NoDL - Node Definition Language

NoDL (Node Definition Language) is a schema and toolkit to describe a ROS 2 node’s interface: parameters, topics (publishers and subscriptions), services (clients and servers), and actions (clients and servers).
Find complete documentation at https://nodl.readthedocs.io/en/latest/
Repository structure
- ament_nodl/: CMake macros to register NoDL documents with the ament index
-
nodl/: Metapackage that pulls in the other packages as dependencies. Acts as an easy default for those who don’t want a-la-carte.
- doc/: Documentation source for the ReadTheDocs page
- nodl_common_interfaces/: Language-independent NoDL descriptions for the standard ROS 2 node and lifecycle-node base types, with C++ and Python code-generation metadata.
- nodl_docgen/: Sphinx extension rendering a NoDL document into a documentation page at build time.
- nodl_generator_common/: Language-agnostic code generator logic shared by NoDL generators.
- nodl_generator_cpp/: C++ code generator — produces an abstract base class from a NoDL document, with a CMake macro for build integration.
-
nodl_generator_py/: Python code generator — produces an
rclpybase class from a NoDL document at build time. -
nodl_observe/: C++ (
ament_cmake) package that observes a running ROS 2 node and produces its runtime interface as arosgraph_msgs/Nodemessage — a reusableobserve_node(...)library plus anobserveexecutable. Stage one of Observe → Describe. - nodl_schema/: Package providing the NoDL schema, validation tools, a typed data model, and semantic comparison of loaded documents. nodl.schema.yaml: The NoDL schema, key to this whole thing!
-
ros2nodl/:
ros2cliextension providingros2 nodl ...commands - test_nodl_generators/: End-to-end integration tests for the C++ and Python NoDL generators.
-
test_nodl_generators_downstream/: Builds against the exported libraries of
test_nodl_generatorsfrom a separate package. - tools/: Scripts supporting development and build workflows
Developing
Setup
- Clone the repo and install pre-commit hooks:
pre-commit install
pre-commit install --hook-type prepare-commit-msg
The prepare-commit-msg hook will automatically add the Signed-off-by line to your commits. If you prefer to sign off manually, use git commit -s.
Pip dependencies for full test suite
The packages in this repository use a few package only available from pip as test_depends.
For the buildfarm environment, these dependencies and tests are disabled, because a package may not be packaged into a deb/rpm against dependencies from another package manager (pip).
To install all dependencies and run the full test suite, export environment variable ENABLE_PIP_TEST_DEPENDS=1 - which the GitHub Action CI for this repo does.
ROS Distribution Status
| Distro | Dev | Doc | Ubuntu Bin |
|---|---|---|---|
| Humble | |||
| Jazzy | |||
| Lyrical | |||
| Rolling |
Unsupported Distributions
These ROS distributions will receive no future release updates or code compatibility support.
| Distro | Date Support Ended | Reason |
|---|---|---|
| Kilted Kaiju | October 5, 2026 | Distro EOL in November |
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/ubuntu-robotics/nodl.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2022-11-17 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| nodl_python | 0.3.1 |
| ros2nodl | 0.3.1 |
README
NoDL - Node Definition Language
NoDL is the Node Definition Language - a common declarative representation of a Node’s interfaces including Parameters, Topics, Services, and Actions. See the design document (review in progress) for more context on the project.
This repository contains the CLI and parsing utilities for NoDL.
Installation
Run python3 setup.py install
Install the ‘ament_nodl’ extension for exporting NoDL .xml files:
sudo apt-get install ros-<ros2_distro>-ament-nodl
Configuration
Add to package.xml:
<depend>ament_nodl</depend>
Add to CMakeLists.txt:
find_package(ament_nodl REQUIRED)
nodl_export_node_description_file(<package_name>.nodl.xml)
Usage
Create a file called “
Valid values for the topic role tag are: publisher, subscription, or both.
Valid values for the service role tag are: server, client, or both.
Valid values for the action role tag are: server, client, or both.
Types can have custom names.
Example
<interface version="1">
<node name="<node1_name>" executable="<executable_name>">
<parameter name="rate" type="int" />
<topic name="/foo/bar" type="std_msgs/msg/String" role="subscription" />
<service name="/example_service" type="std_srvs/srv/Empty" role="client" />
<action name="/example_action" type="example_interfaces/action/Fibonacci" role="both" />
</node>
<node name="<node2_name>" executable="<executable_name>">
...
</node>
</interface>
CLI
See available verbs on the ROS 2 command line tools for NoDL repo.
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/ubuntu-robotics/nodl.git |
| VCS Type | git |
| VCS Version | master |
| Last Updated | 2022-11-17 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| nodl_python | 0.3.1 |
| ros2nodl | 0.3.1 |
README
NoDL - Node Definition Language
NoDL is the Node Definition Language - a common declarative representation of a Node’s interfaces including Parameters, Topics, Services, and Actions. See the design document (review in progress) for more context on the project.
This repository contains the CLI and parsing utilities for NoDL.
Installation
Run python3 setup.py install
Install the ‘ament_nodl’ extension for exporting NoDL .xml files:
sudo apt-get install ros-<ros2_distro>-ament-nodl
Configuration
Add to package.xml:
<depend>ament_nodl</depend>
Add to CMakeLists.txt:
find_package(ament_nodl REQUIRED)
nodl_export_node_description_file(<package_name>.nodl.xml)
Usage
Create a file called “
Valid values for the topic role tag are: publisher, subscription, or both.
Valid values for the service role tag are: server, client, or both.
Valid values for the action role tag are: server, client, or both.
Types can have custom names.
Example
<interface version="1">
<node name="<node1_name>" executable="<executable_name>">
<parameter name="rate" type="int" />
<topic name="/foo/bar" type="std_msgs/msg/String" role="subscription" />
<service name="/example_service" type="std_srvs/srv/Empty" role="client" />
<action name="/example_action" type="example_interfaces/action/Fibonacci" role="both" />
</node>
<node name="<node2_name>" executable="<executable_name>">
...
</node>
</interface>
CLI
See available verbs on the ROS 2 command line tools for NoDL repo.
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros-tooling/nodl.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-10 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| ament_nodl | 2.0.3 |
| nodl_tutorial_basics | 2.0.3 |
| nodl_tutorial_dummy_robot | 2.0.3 |
| nodl | 2.0.3 |
| nodl_common_interfaces | 2.0.3 |
| nodl_docgen | 2.0.3 |
| nodl_generator_common | 2.0.2 |
| nodl_generator_cpp | 2.0.3 |
| nodl_generator_py | 0.1.0 |
| nodl_observe | 2.0.3 |
| nodl_schema | 2.0.3 |
| ros2nodl | 2.0.3 |
| test_ament_nodl | 2.0.3 |
| test_nodl_generators | 0.1.0 |
| test_nodl_generators_downstream | 2.0.3 |
README
NoDL - Node Definition Language

NoDL (Node Definition Language) is a schema and toolkit to describe a ROS 2 node’s interface: parameters, topics (publishers and subscriptions), services (clients and servers), and actions (clients and servers).
Find complete documentation at https://nodl.readthedocs.io/en/latest/
Repository structure
- ament_nodl/: CMake macros to register NoDL documents with the ament index
-
nodl/: Metapackage that pulls in the other packages as dependencies. Acts as an easy default for those who don’t want a-la-carte.
- doc/: Documentation source for the ReadTheDocs page
- nodl_common_interfaces/: Language-independent NoDL descriptions for the standard ROS 2 node and lifecycle-node base types, with C++ and Python code-generation metadata.
- nodl_docgen/: Sphinx extension rendering a NoDL document into a documentation page at build time.
- nodl_generator_common/: Language-agnostic code generator logic shared by NoDL generators.
- nodl_generator_cpp/: C++ code generator — produces an abstract base class from a NoDL document, with a CMake macro for build integration.
-
nodl_generator_py/: Python code generator — produces an
rclpybase class from a NoDL document at build time. -
nodl_observe/: C++ (
ament_cmake) package that observes a running ROS 2 node and produces its runtime interface as arosgraph_msgs/Nodemessage — a reusableobserve_node(...)library plus anobserveexecutable. Stage one of Observe → Describe. - nodl_schema/: Package providing the NoDL schema, validation tools, a typed data model, and semantic comparison of loaded documents. nodl.schema.yaml: The NoDL schema, key to this whole thing!
-
ros2nodl/:
ros2cliextension providingros2 nodl ...commands - test_nodl_generators/: End-to-end integration tests for the C++ and Python NoDL generators.
-
test_nodl_generators_downstream/: Builds against the exported libraries of
test_nodl_generatorsfrom a separate package. - tools/: Scripts supporting development and build workflows
Developing
Setup
- Clone the repo and install pre-commit hooks:
pre-commit install
pre-commit install --hook-type prepare-commit-msg
The prepare-commit-msg hook will automatically add the Signed-off-by line to your commits. If you prefer to sign off manually, use git commit -s.
Pip dependencies for full test suite
The packages in this repository use a few package only available from pip as test_depends.
For the buildfarm environment, these dependencies and tests are disabled, because a package may not be packaged into a deb/rpm against dependencies from another package manager (pip).
To install all dependencies and run the full test suite, export environment variable ENABLE_PIP_TEST_DEPENDS=1 - which the GitHub Action CI for this repo does.
ROS Distribution Status
| Distro | Dev | Doc | Ubuntu Bin |
|---|---|---|---|
| Humble | |||
| Jazzy | |||
| Lyrical | |||
| Rolling |
Unsupported Distributions
These ROS distributions will receive no future release updates or code compatibility support.
| Distro | Date Support Ended | Reason |
|---|---|---|
| Kilted Kaiju | October 5, 2026 | Distro EOL in November |
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/ros-tooling/nodl.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-10 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| ament_nodl | 2.0.3 |
| nodl_tutorial_basics | 2.0.3 |
| nodl_tutorial_dummy_robot | 2.0.3 |
| nodl | 2.0.3 |
| nodl_common_interfaces | 2.0.3 |
| nodl_docgen | 2.0.3 |
| nodl_generator_common | 2.0.2 |
| nodl_generator_cpp | 2.0.3 |
| nodl_generator_py | 0.1.0 |
| nodl_observe | 2.0.3 |
| nodl_schema | 2.0.3 |
| ros2nodl | 2.0.3 |
| test_ament_nodl | 2.0.3 |
| test_nodl_generators | 0.1.0 |
| test_nodl_generators_downstream | 2.0.3 |
README
NoDL - Node Definition Language

NoDL (Node Definition Language) is a schema and toolkit to describe a ROS 2 node’s interface: parameters, topics (publishers and subscriptions), services (clients and servers), and actions (clients and servers).
Find complete documentation at https://nodl.readthedocs.io/en/latest/
Repository structure
- ament_nodl/: CMake macros to register NoDL documents with the ament index
-
nodl/: Metapackage that pulls in the other packages as dependencies. Acts as an easy default for those who don’t want a-la-carte.
- doc/: Documentation source for the ReadTheDocs page
- nodl_common_interfaces/: Language-independent NoDL descriptions for the standard ROS 2 node and lifecycle-node base types, with C++ and Python code-generation metadata.
- nodl_docgen/: Sphinx extension rendering a NoDL document into a documentation page at build time.
- nodl_generator_common/: Language-agnostic code generator logic shared by NoDL generators.
- nodl_generator_cpp/: C++ code generator — produces an abstract base class from a NoDL document, with a CMake macro for build integration.
-
nodl_generator_py/: Python code generator — produces an
rclpybase class from a NoDL document at build time. -
nodl_observe/: C++ (
ament_cmake) package that observes a running ROS 2 node and produces its runtime interface as arosgraph_msgs/Nodemessage — a reusableobserve_node(...)library plus anobserveexecutable. Stage one of Observe → Describe. - nodl_schema/: Package providing the NoDL schema, validation tools, a typed data model, and semantic comparison of loaded documents. nodl.schema.yaml: The NoDL schema, key to this whole thing!
-
ros2nodl/:
ros2cliextension providingros2 nodl ...commands - test_nodl_generators/: End-to-end integration tests for the C++ and Python NoDL generators.
-
test_nodl_generators_downstream/: Builds against the exported libraries of
test_nodl_generatorsfrom a separate package. - tools/: Scripts supporting development and build workflows
Developing
Setup
- Clone the repo and install pre-commit hooks:
pre-commit install
pre-commit install --hook-type prepare-commit-msg
The prepare-commit-msg hook will automatically add the Signed-off-by line to your commits. If you prefer to sign off manually, use git commit -s.
Pip dependencies for full test suite
The packages in this repository use a few package only available from pip as test_depends.
For the buildfarm environment, these dependencies and tests are disabled, because a package may not be packaged into a deb/rpm against dependencies from another package manager (pip).
To install all dependencies and run the full test suite, export environment variable ENABLE_PIP_TEST_DEPENDS=1 - which the GitHub Action CI for this repo does.
ROS Distribution Status
| Distro | Dev | Doc | Ubuntu Bin |
|---|---|---|---|
| Humble | |||
| Jazzy | |||
| Lyrical | |||
| Rolling |
Unsupported Distributions
These ROS distributions will receive no future release updates or code compatibility support.
| Distro | Date Support Ended | Reason |
|---|---|---|
| Kilted Kaiju | October 5, 2026 | Distro EOL in November |