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 (-)

README

NoDL - Node Definition Language

NoDL logo

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 rclpy base 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 a rosgraph_msgs/Node message — a reusable observe_node(...) library plus an observe executable. 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/: ros2cli extension providing ros2 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_generators from a separate package.
  • tools/: Scripts supporting development and build workflows

Developing

Setup

  1. 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 Hdev Hdoc Hbin
Jazzy Jdev Jdoc Jbin
Lyrical Ldev Ldoc Lbin
Rolling Rdev Rdoc Rbin

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

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 (-)

README

NoDL - Node Definition Language

NoDL logo

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 rclpy base 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 a rosgraph_msgs/Node message — a reusable observe_node(...) library plus an observe executable. 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/: ros2cli extension providing ros2 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_generators from a separate package.
  • tools/: Scripts supporting development and build workflows

Developing

Setup

  1. 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 Hdev Hdoc Hbin
Jazzy Jdev Jdoc Jbin
Lyrical Ldev Ldoc Lbin
Rolling Rdev Rdoc Rbin

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

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 (-)

README

NoDL - Node Definition Language

NoDL logo

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 rclpy base 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 a rosgraph_msgs/Node message — a reusable observe_node(...) library plus an observe executable. 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/: ros2cli extension providing ros2 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_generators from a separate package.
  • tools/: Scripts supporting development and build workflows

Developing

Setup

  1. 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 Hdev Hdoc Hbin
Jazzy Jdev Jdoc Jbin
Lyrical Ldev Ldoc Lbin
Rolling Rdev Rdoc Rbin

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

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 (-)

README

NoDL - Node Definition Language

NoDL logo

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 rclpy base 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 a rosgraph_msgs/Node message — a reusable observe_node(...) library plus an observe executable. 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/: ros2cli extension providing ros2 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_generators from a separate package.
  • tools/: Scripts supporting development and build workflows

Developing

Setup

  1. 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 Hdev Hdoc Hbin
Jazzy Jdev Jdoc Jbin
Lyrical Ldev Ldoc Lbin
Rolling Rdev Rdoc Rbin

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

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 (-)

README

NoDL - Node Definition Language

NoDL logo

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 rclpy base 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 a rosgraph_msgs/Node message — a reusable observe_node(...) library plus an observe executable. 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/: ros2cli extension providing ros2 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_generators from a separate package.
  • tools/: Scripts supporting development and build workflows

Developing

Setup

  1. 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 Hdev Hdoc Hbin
Jazzy Jdev Jdoc Jbin
Lyrical Ldev Ldoc Lbin
Rolling Rdev Rdoc Rbin

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
No version for distro github showing humble. Known supported distros are highlighted in the buttons above.

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 (-)

README

NoDL - Node Definition Language

NoDL logo

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 rclpy base 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 a rosgraph_msgs/Node message — a reusable observe_node(...) library plus an observe executable. 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/: ros2cli extension providing ros2 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_generators from a separate package.
  • tools/: Scripts supporting development and build workflows

Developing

Setup

  1. 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 Hdev Hdoc Hbin
Jazzy Jdev Jdoc Jbin
Lyrical Ldev Ldoc Lbin
Rolling Rdev Rdoc Rbin

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
Repo symbol

nodl repository

nodl_python ros2nodl

ROS Distro
galactic

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

Test NoDL

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 “.nodl.xml" in the same folder as your project's CMakeLists.txt. Include in this file the interface description for each node in the package. Node attributes can be `parameter`, `topic`, `service` or `action`.

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.

Repo symbol

nodl repository

nodl_python ros2nodl

ROS Distro
iron

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

Test NoDL

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 “.nodl.xml" in the same folder as your project's CMakeLists.txt. Include in this file the interface description for each node in the package. Node attributes can be `parameter`, `topic`, `service` or `action`.

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.

No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.

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 (-)

README

NoDL - Node Definition Language

NoDL logo

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 rclpy base 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 a rosgraph_msgs/Node message — a reusable observe_node(...) library plus an observe executable. 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/: ros2cli extension providing ros2 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_generators from a separate package.
  • tools/: Scripts supporting development and build workflows

Developing

Setup

  1. 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 Hdev Hdoc Hbin
Jazzy Jdev Jdoc Jbin
Lyrical Ldev Ldoc Lbin
Rolling Rdev Rdoc Rbin

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
No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.

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 (-)

README

NoDL - Node Definition Language

NoDL logo

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 rclpy base 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 a rosgraph_msgs/Node message — a reusable observe_node(...) library plus an observe executable. 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/: ros2cli extension providing ros2 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_generators from a separate package.
  • tools/: Scripts supporting development and build workflows

Developing

Setup

  1. 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 Hdev Hdoc Hbin
Jazzy Jdev Jdoc Jbin
Lyrical Ldev Ldoc Lbin
Rolling Rdev Rdoc Rbin

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