Releases: RobotWebTools/rclnodejs
Release list
rclnodejs v2.1.0 (2026-06-25)
First stable release in the 2.1 line. The headline is a full ES Module migration: rclnodejs is now a native ESM package that ships both ESM and CommonJS from a single artifact, so import and require consumers — and TypeScript under NodeNext — all resolve the right entry automatically.
This release promotes the 2.1.0-beta.0 baseline to stable and rolls in the fixes and maintenance that landed during the beta cycle. Upgrading from 2.0.0 is seamless — require('rclnodejs') keeps working unchanged, and you can now also import it without a shim or interop wrapper.
The migration landed in three staged phases (rename CJS-only tooling → convert the library and tests to native ESM → add the dual build), so the git history stays bisectable and each step is reviewable on its own.
🎉 A milestone release — 2.1.0 is the 100th release of rclnodejs on npm. Thank you to everyone who has contributed code, issues, and feedback over the years to get us here. 🙌
📣 Important Notes
- rclnodejs is now
"type": "module". The package publishes a tsup-builtdist/that emits both an ESM (import) and a CommonJS (require) entry for every public surface, selected at resolution time throughpackage.jsonexportsconditions — covering the root entry plus therclnodejs/web,rclnodejs/web/server, andrclnodejs/rosocketsubpaths. - CommonJS consumers are unaffected.
const rclnodejs = require('rclnodejs')continues to work exactly as before, including therclnodejs/webandrclnodejs/rosocketsubpaths under therequirecondition. - ESM consumers can now
import rclnodejs from 'rclnodejs'and use top-levelawaitdirectly, with nocreateRequireshim. - TypeScript projects on
module/moduleResolution: NodeNextget correct types for both module systems. - Build and generator tooling (e.g. the message generator and JSDoc tooling) remain CommonJS and are kept on
.cjsextensions; this is internal and does not affect consumers. - Downstream code that reached into undocumented
lib/internals via deep relative paths should switch to the publishedexports/subpath entry points. - Minimum Node.js remains 20.20.2. The same Linux x64 / arm64 N-API prebuilds run unchanged on every Node.js ≥ 20.20.2 (including 24.x and 26.x) across Humble, Jazzy, Kilted, Lyrical, and Rolling.
✨ Highlights
ESM migration — dual ESM + CommonJS package
- Phase 1 — rename CJS-only build and generator files to
.cjs, isolating tooling that must stay CommonJS from the soon-to-be-ESM runtime (#1529) - Phase 2 — convert
lib/,index.js, and the full test suite to native ES modules (#1530) - Phase 3 — dual ESM + CommonJS build via tsup, wired through
package.jsonexportsconditions so each consumer resolves the right artifact (#1531) - Add type declarations for the
rclnodejs/rosocketsubpath — ships.d.ts/.d.ctsso the WebSocket gateway types cleanly under both module systems (#1533) - Modernize
tsconfig.jsonfor Node.js module resolution (#1528)
API and types
- Add
enable_logger_serviceoption for runtime log-level control (#1522) - Add
publisher/subscriptionevent_type_is_supportedchecks (#1520) - Infer concrete types from constructor
TypeClassforms for sharper type inference (#1526)
🛡️ Bug Fixes and Safeguards
- Fix native build failure on the Visual Studio 2026 toolset (Windows) (#1539)
- Electron demos load prebuilt binaries at runtime (#1546)
🔧 Maintenance
- Pump
commanderto 15.0.0 (#1524) - Pump
node-gypto 13.0.0 (#1544) - Pump
@types/node(#1549) - Modernize the TypeScript demos to NodeNext + ES2022 (#1534)
- Switch the npmjs README examples to ESM (#1542)
🚀 CI, Packaging, and Tooling
- Add a per-release GitHub release-notes link to the generated JSDoc sidebar (#1551)
Getting Started with ESM
// ESM
import rclnodejs from 'rclnodejs';
await rclnodejs.init();
const node = new rclnodejs.Node('publisher_example_node');
const publisher = node.createPublisher('std_msgs/msg/String', 'topic');
publisher.publish('Hello ROS 2 from rclnodejs');
node.spin();// CommonJS — still supported, unchanged
const rclnodejs = require('rclnodejs');
rclnodejs.init().then(() => {
const node = new rclnodejs.Node('publisher_example_node');
const publisher = node.createPublisher('std_msgs/msg/String', 'topic');
publisher.publish('Hello ROS 2 from rclnodejs');
node.spin();
});The rclnodejs/web and rclnodejs/rosocket subpaths resolve under both module systems:
import { connect } from 'rclnodejs/web'; // ESM
const { connect } = require('rclnodejs/web'); // CommonJSnpm i rclnodejsFull Changelog: 2.0.0...2.1.0
rclnodejs v2.1.0-beta.0 (2026-06-11)
First beta of the 2.1 line. The headline is a full ES Module migration: rclnodejs is now a native ESM package that ships both ESM and CommonJS from a single artifact, so import and require consumers — and TypeScript under NodeNext — all resolve the right entry automatically.
This is a pre-release. Everything from 2.0.0 carries over unchanged; the dual-format packaging is the main thing to validate before 2.1.0 final. If you upgrade from 2.0.0, nothing breaks — require('rclnodejs') keeps working, and you can now also import it without a shim or interop wrapper.
The migration landed in three staged phases (rename CJS-only tooling → convert the library and tests to native ESM → add the dual build), so the git history stays bisectable and each step is reviewable on its own.
📣 Important Notes
• rclnodejs is now "type": "module". The package publishes a tsup-built dist/ that emits both an ESM (import) and a CommonJS (require) entry for every public surface, selected at resolution time through package.json exports conditions — covering the root entry plus the rclnodejs/web, rclnodejs/web/server, and rclnodejs/rosocket subpaths.
• CommonJS consumers are unaffected. const rclnodejs = require('rclnodejs') continues to work exactly as before, including the rclnodejs/web and rclnodejs/rosocket subpaths under the require condition.
• ESM consumers can now import rclnodejs from 'rclnodejs' and use top-level await directly, with no createRequire shim.
• TypeScript projects on module/moduleResolution: NodeNext get correct types for both module systems; the rclnodejs/rosocket subpath now ships its own .d.ts/.d.cts so it types cleanly under import and require.
• Build-time and message-generation tooling (e.g. the message generator and JSDoc tooling) remain CommonJS and are kept on .cjs extensions; this is internal and does not affect consumers.
• Downstream code that reached into undocumented lib/ internals via deep relative paths should switch to the published exports/subpath entry points.
• Minimum Node.js remains 20.20.2. The same Linux x64 / arm64 N-API prebuilds run unchanged on every Node.js ≥ 20.20.2 (including 24.x and 26.x) across Humble, Jazzy, Kilted, Lyrical, and Rolling.
✨ Highlights
ESM migration — dual ESM + CommonJS package
• Phase 1 — rename CJS-only build and generator files to .cjs, isolating tooling that must stay CommonJS from the soon-to-be-ESM runtime (#1529)
• Phase 2 — convert lib/, index.js, and the full test suite to native ES modules (#1530)
• Phase 3 — dual ESM + CommonJS build via tsup, wired through package.json exports conditions so each consumer resolves the right artifact (#1531)
• Add type declarations for the rclnodejs/rosocket subpath — ships .d.ts/.d.cts so the WebSocket gateway types cleanly under both module systems (#1533)
• Modernize tsconfig.json for Node.js (NodeNext) module resolution (#1528)
• Modernize the bundled TypeScript demos to NodeNext + ES2022 (#1534)
API and types
• Add enable_logger_service option for runtime log-level control (#1522)
• Add publisher/subscription event_type_is_supported checks (#1520)
• Infer concrete types from constructor TypeClass forms for sharper type inference (#1526)
🔧 Maintenance
• Pump commander to 15.0.0 (#1524)
Getting Started with ESM
// ESM
import rclnodejs from 'rclnodejs';
await rclnodejs.init();
const node = new rclnodejs.Node('publisher_example_node');
const publisher = node.createPublisher('std_msgs/msg/String', 'topic');
publisher.publish('Hello ROS 2 from rclnodejs');
node.spin();// CommonJS — still supported, unchanged
const rclnodejs = require('rclnodejs');
rclnodejs.init().then(() => {
const node = new rclnodejs.Node('publisher_example_node');
const publisher = node.createPublisher('std_msgs/msg/String', 'topic');
publisher.publish('Hello ROS 2 from rclnodejs');
node.spin();
});The rclnodejs/web and rclnodejs/rosocket subpaths resolve under both module systems:
import { connect } from 'rclnodejs/web'; // ESM
const { connect } = require('rclnodejs/web'); // CommonJSnpm i rclnodejs@2.1.0-beta.0Full Changelog: 2.0.0...2.1.0-beta.0
rclnodejs v2.0.0 (2026-05-25)
First stable release in the 2.x series. Aligned with the ROS 2 Lyrical Luth GA (Ubuntu 26.04).
This release rolls up the 2.0.0-beta.0 baseline (Lyrical support, Node.js 20.20.2 minimum, removal of legacy 1.x compatibility code, and the rosocket WebSocket gateway) and adds the headline new capability for the 2.x line: rclnodejs/web — a typed Browser SDK plus a small capability runtime that lets a web page talk to ROS 2 over a single WebSocket, with the same capabilities also reachable over plain HTTP for curl, Postman, and AI agents.
2.0.0 also folds in the full 1.9.0 feature set — ParameterEventHandler, waitForMessage, timer autostart + TimerInfo, QoS overriding options, pre/post-set parameter callbacks, ClockEvent, Observable subscriptions (RxJS), MessageIntrospector, action-client feedback content filters, and the rest. Anything you had on 1.x is still here; upgrades from 1.9.0 are additive aside from the breaking changes called out below.
📣 Important Notes
- rclnodejs 2.0.0 supports ROS 2 Lyrical Luth (Ubuntu 26.04, distro id
2605) in addition to Humble, Jazzy, Kilted, and Rolling. - Minimum Node.js raised to 20.20.2. Node.js 16.x and 18.x are no longer supported.
- Linux x64 / arm64 ship N-API prebuilds — one artifact built against Node.js 20.20.2 runs unchanged on every Node.js ≥ 20.20.2, including 24.x and 26.x. Electron prebuilds target Electron 34.x.
- Internal compatibility shims and unused utilities have been removed (#1479); downstream code depending on undocumented
lib/internals may need updates. rclnodejs/webandrosocketship side by side as siblings, not layers — they share the monorepo but serve different audiences (typed declarative SDK vs. raw resource-style WebSocket gateway).
✨ Highlights
rclnodejs/web — typed Browser SDK + capability runtime
rclnodejs/webcapability runtime over WebSocket — declarativeruntime.expose({...})allow-list (#1509)- Typed Browser SDK with single-string-generic API over auto-generated
MessagesMap/ServicesMap(#1511) - HTTP transport for
call/publish—POST /capability/call/<name>returns the JSON reply (#1512) rclnodejs-webCLI launcher — declarativeweb.jsonconfig (or--call/--publish/--subscribeflags), zero server code (#1513)- WebSocket and HTTP transports default to a shared
/capabilitypath; SDK auto-derives sibling URLs (#1515) - SDK guide (
web/README.md) plus JS-only and TypeScript + Vite demos underdemo/web/(#1514)
Distros, RMW, and runtime
- Add ROS 2 Lyrical Luth support (#1496)
- Add explicit LYRICAL distro identifier (
2605) (#1488) - Add lightweight WebSocket bridge (
rosocket) for browser access to ROS 2 (#1495) - Add
rmw_zenoh_cppas RMW vendor and update distribution metadata (#1487) - Treat unrecognized
ROS_DISTROas a future distro (#1485) - Refresh Electron prebuild target and demo apps (#1492)
🛡️ Bug Fixes and Safeguards
- Fix SIGSEGV on ROS 2 Rolling caused by rosidl sequence ABI change (#1480)
- Gate C++ standard by ROS distro (#1477)
🔧 Maintenance
- Raise Node.js minimum to 20.20.2 (#1478)
- Pump to Node 26.x (#1497)
- Remove compatibility and custom utility code carried over from 1.x (#1479)
- Consolidate all demos under
demo/and add rosocket demo (#1503) - Refine README and npmjs landing page (#1508)
- Surface ROS 2 Lyrical and the 2.0.0-beta.0 baseline in docs (#1507)
- Pump
lint-stagedandsinonto latest (#1505) - Reorganize badges on README (#1483)
🚀 CI, Packaging, and Tooling
- Run primary CI lanes on Lyrical instead of Jazzy (#1506)
- Install ROS 2 Lyrical from apt-deb repo instead of dated tarball (#1516)
- Install
test-msgsandmrpt-msgsuniformly across all ROS 2 distros (#1518) - Add Lyrical Luth lane to Linux prebuild workflows (#1498)
- Migrate Rolling build to Ubuntu 26.04 (#1493)
- Add GitHub Actions workflow to deploy JSDoc to GitHub Pages (#1490)
- Use
npm installindeploy-docsworkflow (#1491) - Trigger
npm-publishon prerelease tags (#1501)
Getting Started with rclnodejs/web
// Browser
import { connect } from 'rclnodejs/web';
const ros = await connect('ws://robot.local:9000/capability');
const reply = await ros.call<'example_interfaces/srv/AddTwoInts'>(
'/add_two_ints', { a: '2n', b: '40n' }
);
console.log(reply.sum); // '42n'# Server (no JavaScript needed)
source /opt/ros/lyrical/setup.bash
npx -p rclnodejs rclnodejs-web --port 9000 --http-port 9001 \
--call /add_two_ints=example_interfaces/srv/AddTwoIntsFull Changelog: 1.9.0...2.0.0
rclnodejs v2.0.0-beta.0 (2026-05-06)
Note: This is a pre-release for testing the 2.x line on ROS 2 Lyrical Luth. Install with
npm install rclnodejs@2.0.0-beta.0. Thelatesttag on npm still points to1.9.0.
This pre-release kicks off the rclnodejs 2.x series. The headline change is first-class support for ROS 2 Lyrical Luth (Ubuntu 26.04, distro id 2605), together with a refreshed toolchain — Node.js 20.20.2 minimum, Node 26.x in CI and prebuilds, and the removal of legacy compatibility code carried over from the 1.x line. A lightweight WebSocket bridge now lets browser apps talk to ROS 2 directly, and the Electron demo apps have been refreshed against current Electron and Node.js.
📣 Important Notes
- rclnodejs 2.0 targets ROS 2 Lyrical Luth as the next supported LTS, in addition to existing distros.
- Minimum Node.js raised to 20.20.2. Node.js 16.x and 18.x are no longer supported.
- Linux prebuilds are now built on Node 26.x (x64 + arm64) and include a dedicated Lyrical Luth lane.
- Internal compatibility shims and unused utilities have been removed; downstream code depending on undocumented
lib/internals may need updates. - The
latestnpm tag continues to point to 1.9.0 until 2.0.0 is final.
✨ Highlights
- Add ROS 2 Lyrical Luth support (#1496)
- Add explicit LYRICAL distro identifier (
2605) (#1488) - Add lightweight WebSocket bridge for browser access to ROS 2 (#1495)
- Add
rmw_zenoh_cppas RMW vendor and update distribution metadata (#1487) - Treat unrecognized
ROS_DISTROas a future distro (#1485) - Refresh Electron prebuild target and demo apps (#1492)
🛡️ Bug Fixes And Safeguards
- Fix SIGSEGV on ROS 2 Rolling caused by rosidl sequence ABI change (#1480)
- Gate C++ standard by ROS distro (#1477)
🔧 Maintenance
- Raise Node.js minimum to 20.20.2 (#1478)
- Pump to Node 26.x (#1497)
- Remove compatibility and custom utility code carried over from 1.x (#1479)
- Reorganize badges on README (#1483)
🚀 CI, Packaging, And Tooling
- Add Lyrical Luth lane to Linux prebuild workflows (#1498)
- Migrate rolling build to Ubuntu 26.04 (#1493)
- Add GitHub Actions workflow to deploy JSDoc to GitHub Pages (#1490)
- Use
npm installindeploy-docsworkflow (#1491) - Trigger
npm-publishon prerelease tags (#1501) - Pump to 2.0.0-beta.0 pre-release (#1499)
Full Changelog: 1.9.0...2.0.0-beta.0
rclnodejs v1.9.0 Release (2026-04-07)
We are pleased to announce rclnodejs v1.9.0. This stable release adds new subscription, timer, parameter, QoS, and action capabilities, along with CI and publishing improvements introduced during the 1.9.0 alpha cycle.
📣 Important Notes
- rclnodejs 1.9.0 is the final release in the 1.x series.
- ROS 2 Lyrical support will begin with rclnodejs 2.x.
- rclnodejs 1.9.0 is the final release with Node.js 16.x support.
- rclnodejs 1.9.0 is the final release with C++17 support.
✨ Highlights
- Add QoS overriding options for publishers and subscriptions (#1468)
- Add pre-set and post-set parameter callbacks (#1470)
- Add timer autostart and TimerInfo callback support (#1472)
- Add ParameterEventHandler node filtering support (#1474)
- Add ParameterEventHandler for cross-node parameter monitoring (#1438)
- Expose MessageInfo metadata on subscription callbacks (#1440)
- Add waitForMessage utility for one-shot message reception (#1444)
- Add support check for content filter feature in subscription (#1451)
- Support feedback subscription content filter for action client (#1457)
🛡️ Bug Fixes And Safeguards
- Guard publishFeedback and execute for valid goal states (#1466)
🚀 CI, Packaging, And Tooling
- Add OIDC trusted publishing and npm provenance support (#1460)
- Skip lifecycle scripts when packing release artifacts (#1461)
- Support pre-release publishing in the npm publish workflow (#1464)
- Add AddressSanitizer memory testing for the native addon (#1430)
- Prevent CI hangs from unbounded subprocess waits (#1434)
- Re-enable tests on Jazzy for Windows (#1435)
- Update TypeScript to 6.0.2 (#1455)
- Clarify README install and quick start guidance (#1453)
- Update README documentation (#1449)
- Move JSDoc tooling under tools/jsdoc and document the publish workflow (#1447)
- Align clang-format include ordering with cpplint rules (#1428)
Full Changelog: 1.8.3...1.9.0
rclnodejs v1.9.0-alpha.0 (2026-04-01)
Note: This is a pre-release for testing purposes. Install with
npm install rclnodejs@1.9.0-alpha.0. Thelatesttag on npm still points to1.8.3.
This pre-release introduces several new features including action client feedback content filtering, subscription message metadata, cross-node parameter monitoring, and a one-shot message utility. It also debuts automated npm publishing via GitHub Actions with OIDC trusted publishing and SLSA provenance attestation.
✨ New Features
- Support feedback subscription content filter for action client (#1457)
- Add support check for content filter feature in subscription (#1451)
- Add
waitForMessageutility for one-shot message reception (#1444) - Expose
MessageInfometadata on subscription callbacks (#1440) - Add
ParameterEventHandlerfor cross-node parameter monitoring (#1438)
🚀 CI/CD & Infrastructure
- NPM Publish Workflow with OIDC trusted publishing and provenance (#1460)
- Support pre-release publishing in npm-publish workflow (#1464)
- Skip lifecycle scripts when packing (#1461)
- Add AddressSanitizer (ASan) memory testing for native addon (#1430)
🔧 Maintenance
- Pump TypeScript to 6.0.2 (#1455)
- Clarify README install and quick start guidance (#1453)
- Update README (#1449)
- Move JSDoc tooling under
tools/jsdocand document publish workflow (#1447) - Re-enable tests on Jazzy for Windows (#1435)
- Prevent CI hangs from unbounded subprocess waits (#1434)
- Align clang-format include ordering with cpplint rules (#1428)
Full Changelog: 1.8.3...1.9.0-alpha.0
rclnodejs v1.8.3 Release (2026-03-09)
We are pleased to announce rclnodejs v1.8.3! This release includes parser and generator updates, multiple native and JavaScript bug fixes, test corrections, documentation updates, and Node options compatibility improvements.
🐛 Bug Fixes
- Fix potential issues in parser.py (#1404)
- Evaluate error message before resetting error state in macros (#1406)
- Resolve memory leaks, use-after-free, and correctness issues in native bindings (#1408)
- Resolve logic bugs, resource leaks, and error handling issues in JavaScript
lib/(#1410) - Fix bugs in
rosidl_genandindex.js, and add tests (#1412) - Fix bugs in examples and Electron demos (#1414)
- Fix bugs in test files (#1418)
- Fix action server goal expiration and correct broken test assertions (#1420)
- Fix memory leaks, error handling, and type-safety issues in N-API bindings (#1422)
- Fix Node creation crash when using plain object as options (#1424)
✨ Improvements
- Leverage
rosidl_parser.parserto parse.idlfiles directly (#1401) - Update docs and tutorials (#1416)
🔧 Maintenance
- Pump
nycto18.0.0(#1400)
Full Changelog: 1.8.2...1.8.3
rclnodejs v1.8.2 Release (2026-02-24)
We are pleased to announce rclnodejs v1.8.2! This patch release focuses on improving ROS 2 Rolling compatibility, extending ROSIDL message support, and enhancing Electron Forge packaging for all demos.
🐛 Bug Fixes
ROS 2 Rolling Compilation (#1392)
- Fixed a compilation error when building against ROS 2 Rolling caused by a breaking API change in
rcl_lifecycle_state_machine_init, which now requires a clock parameter. Added a version-specific code path (ROS_VERSION >= 5000) and updated JavaScript code to pass the node's clock handle to the native lifecycle state machine creation function.
Hyphenated ROSIDL Subdirectory Support (#1390)
- Fixed
generate-ros-messagesfailure for packages with hyphenated subdirectory names (e.g.,msg-common,msg-ros2inmrpt_msgs). UpdatedgetSubFolder()to normalize hyphenated subdirectory names to their base interface types (msg,srv,action).
✨ Improvements
Electron Forge Packaging (#1387)
- Configured Electron Forge packaging across all four Electron demos (topics, turtle_tf2, manipulator, car) to enable distributable application creation.
- Added ASAR unpack configuration for rclnodejs, which requires file system access to generated code and native bindings.
- Migrated manipulator demo from CDN-based Three.js to npm package and added GPU rendering workarounds.
- Added comprehensive packaging documentation to all demo READMEs.
Compiler Warnings (#1385)
- Replaced the broad
<node.h>include with the more targeted<node_version.h>inrcl_bindings.cppto mitigate compiler warnings from unnecessary Node C++ API exposure.
🔧 Infrastructure
- Windows Rolling CI: Re-enabled rolling builds on Windows by updating the download URL to the new GitHub Releases location for ROS 2 Rolling nightly binaries (#1382).
- Dependencies: Updated
@eslint/jsto ^10.0.1 andeslintto ^10.0.2 (#1396).
Full Changelog: 1.8.1...1.8.2
rclnodejs v1.8.1 Release (2026-01-22)
We are pleased to announce rclnodejs v1.8.1! This patch release focuses on improving stability, fixing critical bugs related to concurrency and Electron compatibility, and significantly enhancing test coverage and reliability.
🐛 Bug Fixes
Critical Race Condition Fix (#1372)
- Resolved a crash (
SIGABRT/ "pure virtual method called") that occurred when callingsetContentFilter()while the node was spinning. - Solution: The fix enforces a thread-safe pattern. Users should stop the node before modifying content filters and restart it afterwards.
Electron Compatibility (#1375, #1379)
- File System Operations: Replaced
fs.access()withfs.stat()for file existence checks. This ensures compatibility with Electron's ASAR packaging system, wherefs.accesscan sometimes fail. - Demo Updates: Updated Electron demos to use Electron v40.0.0 and fixed type issues in the
turtle_tf2demo by usingBigIntfor timer periods.
Message Type Correctness (#1371)
- Time.toMsg(): Corrected the return type of
Time.toMsg(). It now returns JavaScript numbers instead ofBigIntsforsecandnanosecfields, aligning correctly with the ROS 2builtin_interfaces/msg/Timespecification.
Stability Improvements
- Content Filtering: Fixed memory allocation bugs (using wrong size calculation) and improved error handling in content filter operations (#1369).
- Flaky Tests: Resolved test flakiness in
type-description-serviceand content filtering tests (#1367, #1369).
🧪 Enhancements & Infrastructure
- Test Coverage: Major effort to improve unit test coverage. Added comprehensive tests for core modules like
utils.js,client.js,logging.js, andtimer.js, achieving >80% coverage (#1363). - Windows CI: Fixed GitHub Actions failures on Windows by explicitly configuring Python 3.11 (#1376).
- Dependencies: Updated
globalspackage to v17.0.0 (#1365).
Full Changelog: 1.8.0...1.8.1
rclnodejs v1.8.0 Release (2026-01-07)
Overview
We're excited to announce rclnodejs v1.8.0! This release brings reactive programming support with RxJS, enhanced logging capabilities, comprehensive clock/timer management, and improved message introspection tools.
🎉 Major Features
1. RxJS Observables Support (#1357)
- Observable Subscriptions: You can now use RxJS Observables for subscriptions, enabling powerful reactive programming patterns for handling message streams.
2. Advanced Logging Capabilities (#1336, #1337, #1338)
- Rosout Logging: Added support for publishing log messages to the standard
/rosouttopic. - Logging Directory: New
getLoggingDirectory()API to programmatically retrieve the current logging location. - Thread Safety: Improved thread safety for logging operations.
3. Enhanced Time and Clock Management
- Clock Callbacks: Added support for clock callbacks (#1355) and
ClockEvent(#1354). - Timer Improvements:
4. Message Introspection and Validation (#1346, #1341)
- MessageIntrospector: New capability to inspect message schemas at runtime.
- Enhanced Validation: Stronger message validation logic with non-throwing variants and better TypeScript definitions (#1345).
✨ New Capabilities
Node & Graph Information
- Service Introspection: Added
getServersInfoByServiceandgetClientsInfoByServiceto query service availability and connectivity (#1335). - Liveliness Assertion: Added
assertLiveliness()method for Publishers, critical for certain QoS configurations (#1331). - Content Filtering: Added
getContentFilterfor Subscriptions to inspect filtering rules (#1334).
Utilities
- Argument Handling:
🔧 Improvements & Fixes
Bug Fixes
- Memory Management: Fixed potential leak by calling
rcl_action_goal_status_array_fini()when publishing status fails (#1332). - Request Handling: Replaced
rcl_take_requestwithrcl_take_request_with_infofor more robust service request processing (#1333).
Build System
- Dependencies: Added
node-gyptodevDependenciesexplicitly (#1351). - CI: Removed 'rolling' distribution from Windows workflows (#1352).
Full Changelog: 1.7.0...1.8.0
Doc: https://robotwebtools.github.io/rclnodejs/docs/1.8.0/index.html