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

Repository Summary

Description
Checkout URI https://github.com/noelex/rclnet.git
VCS Type git
VCS Version main
Last Updated 2026-10-20
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

README

rclnet

πŸš€Modern ROS 2 for .NET.

rclnet is a high-performance .NET client library for ROS 2, designed for modern .NET applications with idiomatic async APIs and low-overhead native interop.

  • High-performance message interop β€” generated bindings map ROSIDL native message layouts directly into C#, enabling efficient bulk access with Span<T> and low-overhead native interop.
  • Native message buffers β€” work directly with ROS message memory through RosMessageBuffer when allocation and conversion overhead matter, while keeping convenient managed message APIs for normal application code.
  • Async by design β€” topics, services, actions, timers, and graph operations integrate naturally with async/await, Task, CancellationToken, and IAsyncEnumerable<T>.
  • Managed ROS primitives β€” services and actions are designed around .NET abstractions, allowing asynchronous and concurrent workflows to compose naturally.
  • Build once, run everywhere β€” run the same application binaries across supported ROS 2 releases.
  • NuGet and MSBuild first β€” use ROS 2 from a normal .NET project with interface generation integrated into dotnet build.

What’s New in 3.0

  • ROS 2 Lyrical support
  • Portable ROSIDL ABI support
  • Loaned message support for publishers and native subscriptions on supported middleware
  • Incremental MSBuild support for generated interfaces
  • .NET TimeProvider integration, including ROS-time-aware delays and timers

ROS 2 Feature Support

| Feature | Support | Notes | | ———————– | β€”β€”- | β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” | | Topics | βœ… | | | Services | βœ… | | | Actions | βœ… | Managed implementation | | Clocks & Timers | βœ… | use_sim_time supported; .NET TimeProvider integration | | Guard Conditions | βœ… | | | ROS Graph | βœ… | Managed graph API | | Logging | βœ… | stdout, /rosout, log files | | Content Filtered Topics | βœ… | Humble+ | | Network Flow Endpoints | βœ… | Humble+ | | Service Introspection | βœ… | Iron+ | | Parameters | ⚠️ | Local parameters and parameter files; no parameter client | | Lifecycle Nodes | ❌ | |

βœ…Supported ⚠️Partial support ❌Not supported ⏳In development

Supported Platforms

ROS 2 distributions

Distribution ROSIDL ABI Support
Lyrical Luth V2 βœ… Supported
Kilted Kaiju V1 βœ… Supported
Jazzy Jalisco V1 βœ… Supported
Humble Hawksbill V1 βœ… Supported
Iron Irwini V1 🟑 Legacy
Foxy Fitzroy V1 🟑 Legacy

Legacy distributions remain compatible where practical, but new features may require a currently supported ROS 2 distribution.

.NET and operating systems

  • .NET: 8, 9, 10
  • Operating systems: Linux and Windows

macOS is not currently tested or officially supported.

Installing

Install rclnet from NuGet:

dotnet add package Rcl.NET

rclnet uses the native ROS 2 runtime installed on the target machine. The NuGet package contains the managed .NET libraries, but does not bundle ROS 2 itself.

Quick Start

Project setup

Generated ROS interface types use unsafe native interop. Enable unsafe code in your project:

<PropertyGroup>
  <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Create an AssemblyInfo.cs file in the project and add:

[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling]

Create a ros2cs.spec file in the project directory and select the ROS interface packages used by the examples below:

from-ament-index

include geometry_msgs
include sensor_msgs
include std_srvs
include example_interfaces

ros2cs runs automatically during build and generates the corresponding C# message, service and action types.

File truncated at 100 lines see the full file

No version for distro jazzy showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/noelex/rclnet.git
VCS Type git
VCS Version main
Last Updated 2026-10-20
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

README

rclnet

πŸš€Modern ROS 2 for .NET.

rclnet is a high-performance .NET client library for ROS 2, designed for modern .NET applications with idiomatic async APIs and low-overhead native interop.

  • High-performance message interop β€” generated bindings map ROSIDL native message layouts directly into C#, enabling efficient bulk access with Span<T> and low-overhead native interop.
  • Native message buffers β€” work directly with ROS message memory through RosMessageBuffer when allocation and conversion overhead matter, while keeping convenient managed message APIs for normal application code.
  • Async by design β€” topics, services, actions, timers, and graph operations integrate naturally with async/await, Task, CancellationToken, and IAsyncEnumerable<T>.
  • Managed ROS primitives β€” services and actions are designed around .NET abstractions, allowing asynchronous and concurrent workflows to compose naturally.
  • Build once, run everywhere β€” run the same application binaries across supported ROS 2 releases.
  • NuGet and MSBuild first β€” use ROS 2 from a normal .NET project with interface generation integrated into dotnet build.

What’s New in 3.0

  • ROS 2 Lyrical support
  • Portable ROSIDL ABI support
  • Loaned message support for publishers and native subscriptions on supported middleware
  • Incremental MSBuild support for generated interfaces
  • .NET TimeProvider integration, including ROS-time-aware delays and timers

ROS 2 Feature Support

| Feature | Support | Notes | | ———————– | β€”β€”- | β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” | | Topics | βœ… | | | Services | βœ… | | | Actions | βœ… | Managed implementation | | Clocks & Timers | βœ… | use_sim_time supported; .NET TimeProvider integration | | Guard Conditions | βœ… | | | ROS Graph | βœ… | Managed graph API | | Logging | βœ… | stdout, /rosout, log files | | Content Filtered Topics | βœ… | Humble+ | | Network Flow Endpoints | βœ… | Humble+ | | Service Introspection | βœ… | Iron+ | | Parameters | ⚠️ | Local parameters and parameter files; no parameter client | | Lifecycle Nodes | ❌ | |

βœ…Supported ⚠️Partial support ❌Not supported ⏳In development

Supported Platforms

ROS 2 distributions

Distribution ROSIDL ABI Support
Lyrical Luth V2 βœ… Supported
Kilted Kaiju V1 βœ… Supported
Jazzy Jalisco V1 βœ… Supported
Humble Hawksbill V1 βœ… Supported
Iron Irwini V1 🟑 Legacy
Foxy Fitzroy V1 🟑 Legacy

Legacy distributions remain compatible where practical, but new features may require a currently supported ROS 2 distribution.

.NET and operating systems

  • .NET: 8, 9, 10
  • Operating systems: Linux and Windows

macOS is not currently tested or officially supported.

Installing

Install rclnet from NuGet:

dotnet add package Rcl.NET

rclnet uses the native ROS 2 runtime installed on the target machine. The NuGet package contains the managed .NET libraries, but does not bundle ROS 2 itself.

Quick Start

Project setup

Generated ROS interface types use unsafe native interop. Enable unsafe code in your project:

<PropertyGroup>
  <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Create an AssemblyInfo.cs file in the project and add:

[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling]

Create a ros2cs.spec file in the project directory and select the ROS interface packages used by the examples below:

from-ament-index

include geometry_msgs
include sensor_msgs
include std_srvs
include example_interfaces

ros2cs runs automatically during build and generates the corresponding C# message, service and action types.

File truncated at 100 lines see the full file

No version for distro kilted showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/noelex/rclnet.git
VCS Type git
VCS Version main
Last Updated 2026-10-20
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

README

rclnet

πŸš€Modern ROS 2 for .NET.

rclnet is a high-performance .NET client library for ROS 2, designed for modern .NET applications with idiomatic async APIs and low-overhead native interop.

  • High-performance message interop β€” generated bindings map ROSIDL native message layouts directly into C#, enabling efficient bulk access with Span<T> and low-overhead native interop.
  • Native message buffers β€” work directly with ROS message memory through RosMessageBuffer when allocation and conversion overhead matter, while keeping convenient managed message APIs for normal application code.
  • Async by design β€” topics, services, actions, timers, and graph operations integrate naturally with async/await, Task, CancellationToken, and IAsyncEnumerable<T>.
  • Managed ROS primitives β€” services and actions are designed around .NET abstractions, allowing asynchronous and concurrent workflows to compose naturally.
  • Build once, run everywhere β€” run the same application binaries across supported ROS 2 releases.
  • NuGet and MSBuild first β€” use ROS 2 from a normal .NET project with interface generation integrated into dotnet build.

What’s New in 3.0

  • ROS 2 Lyrical support
  • Portable ROSIDL ABI support
  • Loaned message support for publishers and native subscriptions on supported middleware
  • Incremental MSBuild support for generated interfaces
  • .NET TimeProvider integration, including ROS-time-aware delays and timers

ROS 2 Feature Support

| Feature | Support | Notes | | ———————– | β€”β€”- | β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” | | Topics | βœ… | | | Services | βœ… | | | Actions | βœ… | Managed implementation | | Clocks & Timers | βœ… | use_sim_time supported; .NET TimeProvider integration | | Guard Conditions | βœ… | | | ROS Graph | βœ… | Managed graph API | | Logging | βœ… | stdout, /rosout, log files | | Content Filtered Topics | βœ… | Humble+ | | Network Flow Endpoints | βœ… | Humble+ | | Service Introspection | βœ… | Iron+ | | Parameters | ⚠️ | Local parameters and parameter files; no parameter client | | Lifecycle Nodes | ❌ | |

βœ…Supported ⚠️Partial support ❌Not supported ⏳In development

Supported Platforms

ROS 2 distributions

Distribution ROSIDL ABI Support
Lyrical Luth V2 βœ… Supported
Kilted Kaiju V1 βœ… Supported
Jazzy Jalisco V1 βœ… Supported
Humble Hawksbill V1 βœ… Supported
Iron Irwini V1 🟑 Legacy
Foxy Fitzroy V1 🟑 Legacy

Legacy distributions remain compatible where practical, but new features may require a currently supported ROS 2 distribution.

.NET and operating systems

  • .NET: 8, 9, 10
  • Operating systems: Linux and Windows

macOS is not currently tested or officially supported.

Installing

Install rclnet from NuGet:

dotnet add package Rcl.NET

rclnet uses the native ROS 2 runtime installed on the target machine. The NuGet package contains the managed .NET libraries, but does not bundle ROS 2 itself.

Quick Start

Project setup

Generated ROS interface types use unsafe native interop. Enable unsafe code in your project:

<PropertyGroup>
  <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Create an AssemblyInfo.cs file in the project and add:

[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling]

Create a ros2cs.spec file in the project directory and select the ROS interface packages used by the examples below:

from-ament-index

include geometry_msgs
include sensor_msgs
include std_srvs
include example_interfaces

ros2cs runs automatically during build and generates the corresponding C# message, service and action types.

File truncated at 100 lines see the full file

No version for distro lyrical showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/noelex/rclnet.git
VCS Type git
VCS Version main
Last Updated 2026-10-20
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

README

rclnet

πŸš€Modern ROS 2 for .NET.

rclnet is a high-performance .NET client library for ROS 2, designed for modern .NET applications with idiomatic async APIs and low-overhead native interop.

  • High-performance message interop β€” generated bindings map ROSIDL native message layouts directly into C#, enabling efficient bulk access with Span<T> and low-overhead native interop.
  • Native message buffers β€” work directly with ROS message memory through RosMessageBuffer when allocation and conversion overhead matter, while keeping convenient managed message APIs for normal application code.
  • Async by design β€” topics, services, actions, timers, and graph operations integrate naturally with async/await, Task, CancellationToken, and IAsyncEnumerable<T>.
  • Managed ROS primitives β€” services and actions are designed around .NET abstractions, allowing asynchronous and concurrent workflows to compose naturally.
  • Build once, run everywhere β€” run the same application binaries across supported ROS 2 releases.
  • NuGet and MSBuild first β€” use ROS 2 from a normal .NET project with interface generation integrated into dotnet build.

What’s New in 3.0

  • ROS 2 Lyrical support
  • Portable ROSIDL ABI support
  • Loaned message support for publishers and native subscriptions on supported middleware
  • Incremental MSBuild support for generated interfaces
  • .NET TimeProvider integration, including ROS-time-aware delays and timers

ROS 2 Feature Support

| Feature | Support | Notes | | ———————– | β€”β€”- | β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” | | Topics | βœ… | | | Services | βœ… | | | Actions | βœ… | Managed implementation | | Clocks & Timers | βœ… | use_sim_time supported; .NET TimeProvider integration | | Guard Conditions | βœ… | | | ROS Graph | βœ… | Managed graph API | | Logging | βœ… | stdout, /rosout, log files | | Content Filtered Topics | βœ… | Humble+ | | Network Flow Endpoints | βœ… | Humble+ | | Service Introspection | βœ… | Iron+ | | Parameters | ⚠️ | Local parameters and parameter files; no parameter client | | Lifecycle Nodes | ❌ | |

βœ…Supported ⚠️Partial support ❌Not supported ⏳In development

Supported Platforms

ROS 2 distributions

Distribution ROSIDL ABI Support
Lyrical Luth V2 βœ… Supported
Kilted Kaiju V1 βœ… Supported
Jazzy Jalisco V1 βœ… Supported
Humble Hawksbill V1 βœ… Supported
Iron Irwini V1 🟑 Legacy
Foxy Fitzroy V1 🟑 Legacy

Legacy distributions remain compatible where practical, but new features may require a currently supported ROS 2 distribution.

.NET and operating systems

  • .NET: 8, 9, 10
  • Operating systems: Linux and Windows

macOS is not currently tested or officially supported.

Installing

Install rclnet from NuGet:

dotnet add package Rcl.NET

rclnet uses the native ROS 2 runtime installed on the target machine. The NuGet package contains the managed .NET libraries, but does not bundle ROS 2 itself.

Quick Start

Project setup

Generated ROS interface types use unsafe native interop. Enable unsafe code in your project:

<PropertyGroup>
  <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Create an AssemblyInfo.cs file in the project and add:

[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling]

Create a ros2cs.spec file in the project directory and select the ROS interface packages used by the examples below:

from-ament-index

include geometry_msgs
include sensor_msgs
include std_srvs
include example_interfaces

ros2cs runs automatically during build and generates the corresponding C# message, service and action types.

File truncated at 100 lines see the full file

No version for distro rolling showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/noelex/rclnet.git
VCS Type git
VCS Version main
Last Updated 2026-10-20
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

README

rclnet

πŸš€Modern ROS 2 for .NET.

rclnet is a high-performance .NET client library for ROS 2, designed for modern .NET applications with idiomatic async APIs and low-overhead native interop.

  • High-performance message interop β€” generated bindings map ROSIDL native message layouts directly into C#, enabling efficient bulk access with Span<T> and low-overhead native interop.
  • Native message buffers β€” work directly with ROS message memory through RosMessageBuffer when allocation and conversion overhead matter, while keeping convenient managed message APIs for normal application code.
  • Async by design β€” topics, services, actions, timers, and graph operations integrate naturally with async/await, Task, CancellationToken, and IAsyncEnumerable<T>.
  • Managed ROS primitives β€” services and actions are designed around .NET abstractions, allowing asynchronous and concurrent workflows to compose naturally.
  • Build once, run everywhere β€” run the same application binaries across supported ROS 2 releases.
  • NuGet and MSBuild first β€” use ROS 2 from a normal .NET project with interface generation integrated into dotnet build.

What’s New in 3.0

  • ROS 2 Lyrical support
  • Portable ROSIDL ABI support
  • Loaned message support for publishers and native subscriptions on supported middleware
  • Incremental MSBuild support for generated interfaces
  • .NET TimeProvider integration, including ROS-time-aware delays and timers

ROS 2 Feature Support

| Feature | Support | Notes | | ———————– | β€”β€”- | β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” | | Topics | βœ… | | | Services | βœ… | | | Actions | βœ… | Managed implementation | | Clocks & Timers | βœ… | use_sim_time supported; .NET TimeProvider integration | | Guard Conditions | βœ… | | | ROS Graph | βœ… | Managed graph API | | Logging | βœ… | stdout, /rosout, log files | | Content Filtered Topics | βœ… | Humble+ | | Network Flow Endpoints | βœ… | Humble+ | | Service Introspection | βœ… | Iron+ | | Parameters | ⚠️ | Local parameters and parameter files; no parameter client | | Lifecycle Nodes | ❌ | |

βœ…Supported ⚠️Partial support ❌Not supported ⏳In development

Supported Platforms

ROS 2 distributions

Distribution ROSIDL ABI Support
Lyrical Luth V2 βœ… Supported
Kilted Kaiju V1 βœ… Supported
Jazzy Jalisco V1 βœ… Supported
Humble Hawksbill V1 βœ… Supported
Iron Irwini V1 🟑 Legacy
Foxy Fitzroy V1 🟑 Legacy

Legacy distributions remain compatible where practical, but new features may require a currently supported ROS 2 distribution.

.NET and operating systems

  • .NET: 8, 9, 10
  • Operating systems: Linux and Windows

macOS is not currently tested or officially supported.

Installing

Install rclnet from NuGet:

dotnet add package Rcl.NET

rclnet uses the native ROS 2 runtime installed on the target machine. The NuGet package contains the managed .NET libraries, but does not bundle ROS 2 itself.

Quick Start

Project setup

Generated ROS interface types use unsafe native interop. Enable unsafe code in your project:

<PropertyGroup>
  <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Create an AssemblyInfo.cs file in the project and add:

[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling]

Create a ros2cs.spec file in the project directory and select the ROS interface packages used by the examples below:

from-ament-index

include geometry_msgs
include sensor_msgs
include std_srvs
include example_interfaces

ros2cs runs automatically during build and generates the corresponding C# message, service and action types.

File truncated at 100 lines see the full file

Repository Summary

Description
Checkout URI https://github.com/noelex/rclnet.git
VCS Type git
VCS Version main
Last Updated 2026-10-20
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

README

rclnet

πŸš€Modern ROS 2 for .NET.

rclnet is a high-performance .NET client library for ROS 2, designed for modern .NET applications with idiomatic async APIs and low-overhead native interop.

  • High-performance message interop β€” generated bindings map ROSIDL native message layouts directly into C#, enabling efficient bulk access with Span<T> and low-overhead native interop.
  • Native message buffers β€” work directly with ROS message memory through RosMessageBuffer when allocation and conversion overhead matter, while keeping convenient managed message APIs for normal application code.
  • Async by design β€” topics, services, actions, timers, and graph operations integrate naturally with async/await, Task, CancellationToken, and IAsyncEnumerable<T>.
  • Managed ROS primitives β€” services and actions are designed around .NET abstractions, allowing asynchronous and concurrent workflows to compose naturally.
  • Build once, run everywhere β€” run the same application binaries across supported ROS 2 releases.
  • NuGet and MSBuild first β€” use ROS 2 from a normal .NET project with interface generation integrated into dotnet build.

What’s New in 3.0

  • ROS 2 Lyrical support
  • Portable ROSIDL ABI support
  • Loaned message support for publishers and native subscriptions on supported middleware
  • Incremental MSBuild support for generated interfaces
  • .NET TimeProvider integration, including ROS-time-aware delays and timers

ROS 2 Feature Support

| Feature | Support | Notes | | ———————– | β€”β€”- | β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” | | Topics | βœ… | | | Services | βœ… | | | Actions | βœ… | Managed implementation | | Clocks & Timers | βœ… | use_sim_time supported; .NET TimeProvider integration | | Guard Conditions | βœ… | | | ROS Graph | βœ… | Managed graph API | | Logging | βœ… | stdout, /rosout, log files | | Content Filtered Topics | βœ… | Humble+ | | Network Flow Endpoints | βœ… | Humble+ | | Service Introspection | βœ… | Iron+ | | Parameters | ⚠️ | Local parameters and parameter files; no parameter client | | Lifecycle Nodes | ❌ | |

βœ…Supported ⚠️Partial support ❌Not supported ⏳In development

Supported Platforms

ROS 2 distributions

Distribution ROSIDL ABI Support
Lyrical Luth V2 βœ… Supported
Kilted Kaiju V1 βœ… Supported
Jazzy Jalisco V1 βœ… Supported
Humble Hawksbill V1 βœ… Supported
Iron Irwini V1 🟑 Legacy
Foxy Fitzroy V1 🟑 Legacy

Legacy distributions remain compatible where practical, but new features may require a currently supported ROS 2 distribution.

.NET and operating systems

  • .NET: 8, 9, 10
  • Operating systems: Linux and Windows

macOS is not currently tested or officially supported.

Installing

Install rclnet from NuGet:

dotnet add package Rcl.NET

rclnet uses the native ROS 2 runtime installed on the target machine. The NuGet package contains the managed .NET libraries, but does not bundle ROS 2 itself.

Quick Start

Project setup

Generated ROS interface types use unsafe native interop. Enable unsafe code in your project:

<PropertyGroup>
  <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Create an AssemblyInfo.cs file in the project and add:

[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling]

Create a ros2cs.spec file in the project directory and select the ROS interface packages used by the examples below:

from-ament-index

include geometry_msgs
include sensor_msgs
include std_srvs
include example_interfaces

ros2cs runs automatically during build and generates the corresponding C# message, service and action types.

File truncated at 100 lines see the full file

No version for distro galactic showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/noelex/rclnet.git
VCS Type git
VCS Version main
Last Updated 2026-10-20
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

README

rclnet

πŸš€Modern ROS 2 for .NET.

rclnet is a high-performance .NET client library for ROS 2, designed for modern .NET applications with idiomatic async APIs and low-overhead native interop.

  • High-performance message interop β€” generated bindings map ROSIDL native message layouts directly into C#, enabling efficient bulk access with Span<T> and low-overhead native interop.
  • Native message buffers β€” work directly with ROS message memory through RosMessageBuffer when allocation and conversion overhead matter, while keeping convenient managed message APIs for normal application code.
  • Async by design β€” topics, services, actions, timers, and graph operations integrate naturally with async/await, Task, CancellationToken, and IAsyncEnumerable<T>.
  • Managed ROS primitives β€” services and actions are designed around .NET abstractions, allowing asynchronous and concurrent workflows to compose naturally.
  • Build once, run everywhere β€” run the same application binaries across supported ROS 2 releases.
  • NuGet and MSBuild first β€” use ROS 2 from a normal .NET project with interface generation integrated into dotnet build.

What’s New in 3.0

  • ROS 2 Lyrical support
  • Portable ROSIDL ABI support
  • Loaned message support for publishers and native subscriptions on supported middleware
  • Incremental MSBuild support for generated interfaces
  • .NET TimeProvider integration, including ROS-time-aware delays and timers

ROS 2 Feature Support

| Feature | Support | Notes | | ———————– | β€”β€”- | β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” | | Topics | βœ… | | | Services | βœ… | | | Actions | βœ… | Managed implementation | | Clocks & Timers | βœ… | use_sim_time supported; .NET TimeProvider integration | | Guard Conditions | βœ… | | | ROS Graph | βœ… | Managed graph API | | Logging | βœ… | stdout, /rosout, log files | | Content Filtered Topics | βœ… | Humble+ | | Network Flow Endpoints | βœ… | Humble+ | | Service Introspection | βœ… | Iron+ | | Parameters | ⚠️ | Local parameters and parameter files; no parameter client | | Lifecycle Nodes | ❌ | |

βœ…Supported ⚠️Partial support ❌Not supported ⏳In development

Supported Platforms

ROS 2 distributions

Distribution ROSIDL ABI Support
Lyrical Luth V2 βœ… Supported
Kilted Kaiju V1 βœ… Supported
Jazzy Jalisco V1 βœ… Supported
Humble Hawksbill V1 βœ… Supported
Iron Irwini V1 🟑 Legacy
Foxy Fitzroy V1 🟑 Legacy

Legacy distributions remain compatible where practical, but new features may require a currently supported ROS 2 distribution.

.NET and operating systems

  • .NET: 8, 9, 10
  • Operating systems: Linux and Windows

macOS is not currently tested or officially supported.

Installing

Install rclnet from NuGet:

dotnet add package Rcl.NET

rclnet uses the native ROS 2 runtime installed on the target machine. The NuGet package contains the managed .NET libraries, but does not bundle ROS 2 itself.

Quick Start

Project setup

Generated ROS interface types use unsafe native interop. Enable unsafe code in your project:

<PropertyGroup>
  <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Create an AssemblyInfo.cs file in the project and add:

[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling]

Create a ros2cs.spec file in the project directory and select the ROS interface packages used by the examples below:

from-ament-index

include geometry_msgs
include sensor_msgs
include std_srvs
include example_interfaces

ros2cs runs automatically during build and generates the corresponding C# message, service and action types.

File truncated at 100 lines see the full file

No version for distro iron showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/noelex/rclnet.git
VCS Type git
VCS Version main
Last Updated 2026-10-20
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

README

rclnet

πŸš€Modern ROS 2 for .NET.

rclnet is a high-performance .NET client library for ROS 2, designed for modern .NET applications with idiomatic async APIs and low-overhead native interop.

  • High-performance message interop β€” generated bindings map ROSIDL native message layouts directly into C#, enabling efficient bulk access with Span<T> and low-overhead native interop.
  • Native message buffers β€” work directly with ROS message memory through RosMessageBuffer when allocation and conversion overhead matter, while keeping convenient managed message APIs for normal application code.
  • Async by design β€” topics, services, actions, timers, and graph operations integrate naturally with async/await, Task, CancellationToken, and IAsyncEnumerable<T>.
  • Managed ROS primitives β€” services and actions are designed around .NET abstractions, allowing asynchronous and concurrent workflows to compose naturally.
  • Build once, run everywhere β€” run the same application binaries across supported ROS 2 releases.
  • NuGet and MSBuild first β€” use ROS 2 from a normal .NET project with interface generation integrated into dotnet build.

What’s New in 3.0

  • ROS 2 Lyrical support
  • Portable ROSIDL ABI support
  • Loaned message support for publishers and native subscriptions on supported middleware
  • Incremental MSBuild support for generated interfaces
  • .NET TimeProvider integration, including ROS-time-aware delays and timers

ROS 2 Feature Support

| Feature | Support | Notes | | ———————– | β€”β€”- | β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” | | Topics | βœ… | | | Services | βœ… | | | Actions | βœ… | Managed implementation | | Clocks & Timers | βœ… | use_sim_time supported; .NET TimeProvider integration | | Guard Conditions | βœ… | | | ROS Graph | βœ… | Managed graph API | | Logging | βœ… | stdout, /rosout, log files | | Content Filtered Topics | βœ… | Humble+ | | Network Flow Endpoints | βœ… | Humble+ | | Service Introspection | βœ… | Iron+ | | Parameters | ⚠️ | Local parameters and parameter files; no parameter client | | Lifecycle Nodes | ❌ | |

βœ…Supported ⚠️Partial support ❌Not supported ⏳In development

Supported Platforms

ROS 2 distributions

Distribution ROSIDL ABI Support
Lyrical Luth V2 βœ… Supported
Kilted Kaiju V1 βœ… Supported
Jazzy Jalisco V1 βœ… Supported
Humble Hawksbill V1 βœ… Supported
Iron Irwini V1 🟑 Legacy
Foxy Fitzroy V1 🟑 Legacy

Legacy distributions remain compatible where practical, but new features may require a currently supported ROS 2 distribution.

.NET and operating systems

  • .NET: 8, 9, 10
  • Operating systems: Linux and Windows

macOS is not currently tested or officially supported.

Installing

Install rclnet from NuGet:

dotnet add package Rcl.NET

rclnet uses the native ROS 2 runtime installed on the target machine. The NuGet package contains the managed .NET libraries, but does not bundle ROS 2 itself.

Quick Start

Project setup

Generated ROS interface types use unsafe native interop. Enable unsafe code in your project:

<PropertyGroup>
  <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Create an AssemblyInfo.cs file in the project and add:

[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling]

Create a ros2cs.spec file in the project directory and select the ROS interface packages used by the examples below:

from-ament-index

include geometry_msgs
include sensor_msgs
include std_srvs
include example_interfaces

ros2cs runs automatically during build and generates the corresponding C# message, service and action types.

File truncated at 100 lines see the full file

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

Repository Summary

Description
Checkout URI https://github.com/noelex/rclnet.git
VCS Type git
VCS Version main
Last Updated 2026-10-20
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

README

rclnet

πŸš€Modern ROS 2 for .NET.

rclnet is a high-performance .NET client library for ROS 2, designed for modern .NET applications with idiomatic async APIs and low-overhead native interop.

  • High-performance message interop β€” generated bindings map ROSIDL native message layouts directly into C#, enabling efficient bulk access with Span<T> and low-overhead native interop.
  • Native message buffers β€” work directly with ROS message memory through RosMessageBuffer when allocation and conversion overhead matter, while keeping convenient managed message APIs for normal application code.
  • Async by design β€” topics, services, actions, timers, and graph operations integrate naturally with async/await, Task, CancellationToken, and IAsyncEnumerable<T>.
  • Managed ROS primitives β€” services and actions are designed around .NET abstractions, allowing asynchronous and concurrent workflows to compose naturally.
  • Build once, run everywhere β€” run the same application binaries across supported ROS 2 releases.
  • NuGet and MSBuild first β€” use ROS 2 from a normal .NET project with interface generation integrated into dotnet build.

What’s New in 3.0

  • ROS 2 Lyrical support
  • Portable ROSIDL ABI support
  • Loaned message support for publishers and native subscriptions on supported middleware
  • Incremental MSBuild support for generated interfaces
  • .NET TimeProvider integration, including ROS-time-aware delays and timers

ROS 2 Feature Support

| Feature | Support | Notes | | ———————– | β€”β€”- | β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” | | Topics | βœ… | | | Services | βœ… | | | Actions | βœ… | Managed implementation | | Clocks & Timers | βœ… | use_sim_time supported; .NET TimeProvider integration | | Guard Conditions | βœ… | | | ROS Graph | βœ… | Managed graph API | | Logging | βœ… | stdout, /rosout, log files | | Content Filtered Topics | βœ… | Humble+ | | Network Flow Endpoints | βœ… | Humble+ | | Service Introspection | βœ… | Iron+ | | Parameters | ⚠️ | Local parameters and parameter files; no parameter client | | Lifecycle Nodes | ❌ | |

βœ…Supported ⚠️Partial support ❌Not supported ⏳In development

Supported Platforms

ROS 2 distributions

Distribution ROSIDL ABI Support
Lyrical Luth V2 βœ… Supported
Kilted Kaiju V1 βœ… Supported
Jazzy Jalisco V1 βœ… Supported
Humble Hawksbill V1 βœ… Supported
Iron Irwini V1 🟑 Legacy
Foxy Fitzroy V1 🟑 Legacy

Legacy distributions remain compatible where practical, but new features may require a currently supported ROS 2 distribution.

.NET and operating systems

  • .NET: 8, 9, 10
  • Operating systems: Linux and Windows

macOS is not currently tested or officially supported.

Installing

Install rclnet from NuGet:

dotnet add package Rcl.NET

rclnet uses the native ROS 2 runtime installed on the target machine. The NuGet package contains the managed .NET libraries, but does not bundle ROS 2 itself.

Quick Start

Project setup

Generated ROS interface types use unsafe native interop. Enable unsafe code in your project:

<PropertyGroup>
  <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Create an AssemblyInfo.cs file in the project and add:

[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling]

Create a ros2cs.spec file in the project directory and select the ROS interface packages used by the examples below:

from-ament-index

include geometry_msgs
include sensor_msgs
include std_srvs
include example_interfaces

ros2cs runs automatically during build and generates the corresponding C# message, service and action types.

File truncated at 100 lines see the full file

No version for distro noetic showing github. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/noelex/rclnet.git
VCS Type git
VCS Version main
Last Updated 2026-10-20
Dev Status UNKNOWN
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

README

rclnet

πŸš€Modern ROS 2 for .NET.

rclnet is a high-performance .NET client library for ROS 2, designed for modern .NET applications with idiomatic async APIs and low-overhead native interop.

  • High-performance message interop β€” generated bindings map ROSIDL native message layouts directly into C#, enabling efficient bulk access with Span<T> and low-overhead native interop.
  • Native message buffers β€” work directly with ROS message memory through RosMessageBuffer when allocation and conversion overhead matter, while keeping convenient managed message APIs for normal application code.
  • Async by design β€” topics, services, actions, timers, and graph operations integrate naturally with async/await, Task, CancellationToken, and IAsyncEnumerable<T>.
  • Managed ROS primitives β€” services and actions are designed around .NET abstractions, allowing asynchronous and concurrent workflows to compose naturally.
  • Build once, run everywhere β€” run the same application binaries across supported ROS 2 releases.
  • NuGet and MSBuild first β€” use ROS 2 from a normal .NET project with interface generation integrated into dotnet build.

What’s New in 3.0

  • ROS 2 Lyrical support
  • Portable ROSIDL ABI support
  • Loaned message support for publishers and native subscriptions on supported middleware
  • Incremental MSBuild support for generated interfaces
  • .NET TimeProvider integration, including ROS-time-aware delays and timers

ROS 2 Feature Support

| Feature | Support | Notes | | ———————– | β€”β€”- | β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€” | | Topics | βœ… | | | Services | βœ… | | | Actions | βœ… | Managed implementation | | Clocks & Timers | βœ… | use_sim_time supported; .NET TimeProvider integration | | Guard Conditions | βœ… | | | ROS Graph | βœ… | Managed graph API | | Logging | βœ… | stdout, /rosout, log files | | Content Filtered Topics | βœ… | Humble+ | | Network Flow Endpoints | βœ… | Humble+ | | Service Introspection | βœ… | Iron+ | | Parameters | ⚠️ | Local parameters and parameter files; no parameter client | | Lifecycle Nodes | ❌ | |

βœ…Supported ⚠️Partial support ❌Not supported ⏳In development

Supported Platforms

ROS 2 distributions

Distribution ROSIDL ABI Support
Lyrical Luth V2 βœ… Supported
Kilted Kaiju V1 βœ… Supported
Jazzy Jalisco V1 βœ… Supported
Humble Hawksbill V1 βœ… Supported
Iron Irwini V1 🟑 Legacy
Foxy Fitzroy V1 🟑 Legacy

Legacy distributions remain compatible where practical, but new features may require a currently supported ROS 2 distribution.

.NET and operating systems

  • .NET: 8, 9, 10
  • Operating systems: Linux and Windows

macOS is not currently tested or officially supported.

Installing

Install rclnet from NuGet:

dotnet add package Rcl.NET

rclnet uses the native ROS 2 runtime installed on the target machine. The NuGet package contains the managed .NET libraries, but does not bundle ROS 2 itself.

Quick Start

Project setup

Generated ROS interface types use unsafe native interop. Enable unsafe code in your project:

<PropertyGroup>
  <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Create an AssemblyInfo.cs file in the project and add:

[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling]

Create a ros2cs.spec file in the project directory and select the ROS interface packages used by the examples below:

from-ament-index

include geometry_msgs
include sensor_msgs
include std_srvs
include example_interfaces

ros2cs runs automatically during build and generates the corresponding C# message, service and action types.

File truncated at 100 lines see the full file