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
| Name | Version |
|---|---|
| ros2cs_abi_test_msgs | 0.0.0 |
| ros2cs_test_msgs | |
| rclnet_tests | 0.0.0 |
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
RosMessageBufferwhen 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, andIAsyncEnumerable<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
TimeProviderintegration, 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
CONTRIBUTING
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
| Name | Version |
|---|---|
| ros2cs_abi_test_msgs | 0.0.0 |
| ros2cs_test_msgs | |
| rclnet_tests | 0.0.0 |
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
RosMessageBufferwhen 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, andIAsyncEnumerable<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
TimeProviderintegration, 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
CONTRIBUTING
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
| Name | Version |
|---|---|
| ros2cs_abi_test_msgs | 0.0.0 |
| ros2cs_test_msgs | |
| rclnet_tests | 0.0.0 |
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
RosMessageBufferwhen 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, andIAsyncEnumerable<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
TimeProviderintegration, 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
CONTRIBUTING
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
| Name | Version |
|---|---|
| ros2cs_abi_test_msgs | 0.0.0 |
| ros2cs_test_msgs | |
| rclnet_tests | 0.0.0 |
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
RosMessageBufferwhen 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, andIAsyncEnumerable<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
TimeProviderintegration, 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
CONTRIBUTING
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
| Name | Version |
|---|---|
| ros2cs_abi_test_msgs | 0.0.0 |
| ros2cs_test_msgs | |
| rclnet_tests | 0.0.0 |
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
RosMessageBufferwhen 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, andIAsyncEnumerable<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
TimeProviderintegration, 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
CONTRIBUTING
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
| Name | Version |
|---|---|
| ros2cs_abi_test_msgs | 0.0.0 |
| ros2cs_test_msgs | |
| rclnet_tests | 0.0.0 |
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
RosMessageBufferwhen 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, andIAsyncEnumerable<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
TimeProviderintegration, 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
CONTRIBUTING
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
| Name | Version |
|---|---|
| ros2cs_abi_test_msgs | 0.0.0 |
| ros2cs_test_msgs | |
| rclnet_tests | 0.0.0 |
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
RosMessageBufferwhen 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, andIAsyncEnumerable<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
TimeProviderintegration, 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
CONTRIBUTING
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
| Name | Version |
|---|---|
| ros2cs_abi_test_msgs | 0.0.0 |
| ros2cs_test_msgs | |
| rclnet_tests | 0.0.0 |
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
RosMessageBufferwhen 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, andIAsyncEnumerable<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
TimeProviderintegration, 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
CONTRIBUTING
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
| Name | Version |
|---|---|
| ros2cs_abi_test_msgs | 0.0.0 |
| ros2cs_test_msgs | |
| rclnet_tests | 0.0.0 |
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
RosMessageBufferwhen 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, andIAsyncEnumerable<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
TimeProviderintegration, 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
CONTRIBUTING
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
| Name | Version |
|---|---|
| ros2cs_abi_test_msgs | 0.0.0 |
| ros2cs_test_msgs | |
| rclnet_tests | 0.0.0 |
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
RosMessageBufferwhen 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, andIAsyncEnumerable<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
TimeProviderintegration, 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