Hi all,
rclnodejs 2.1.0 is out — and it’s a step toward making rclnodejs a web-native SDK for ROS 2: a platform for bringing ROS 2 to the browser and the modern JavaScript ecosystem. With 2.1.0, the whole package is now native ESM, so building web dashboards, teleop UIs, and browser bridges on ROS 2 feels native to today’s web tooling — with the full ROS 2 runtime still underneath whenever you need real nodes.
TL;DR — 2.1.0 makes rclnodejs native ESM end-to-end.
import rclnodejs from 'rclnodejs'just works, the browser SDK (rclnodejs/web) brings ROS 2 to the web, and existingrequire()nodes keep running untouched — the full ROS 2 runtime is still underneath.
A web-native SDK for ROS 2
- ROS 2 on the web — reach ROS 2 from a web page with
rclnodejs/web: typed APIs over WebSocket, no proxy, no codegen. - Native ESM — first-class
importand top-levelawait, ready for Vite/esbuild and the modern web toolchain. - Full ROS 2 runtime underneath — real nodes, pub/sub, services, actions, parameters, lifecycle, whenever you need them.
- Backward compatible — every existing CommonJS (
require) project upgrades with zero code changes.
One package, both module systems
// Modern Node / browser — ESM
import rclnodejs from 'rclnodejs'; // full ROS 2 node API
import { connect } from 'rclnodejs/web'; // typed browser SDK
// Existing CommonJS nodes — unchanged
const rclnodejs = require('rclnodejs');
Where this is heading
Each release moves rclnodejs one step closer to a typed, web-native way into ROS 2:
- 2.0.0
— a typed browser SDK (rclnodejs/web) backed by a capability runtime that exposes only whatweb.jsondeclares, with HTTPcall/publishfor non-JS clients. - 2.1.0
— native ESM across the whole package, so rclnodejs sits naturally alongside the rest of your web stack.
The arc: from “a Node.js client that happens to run in browsers” → “a typed, allow-listed Web SDK for ROS 2”
Try it
npm i rclnodejs
SDK guide: web/README.md
JS demo (no toolchain): demo/web/javascript/
TS + Vite demo: demo/web/typescript/
Feedback welcome — especially from anyone wiring ROS 2 into web frontends. ![]()
Cheers,
Minggang