Releases: selfpatch/ros2_medkit
v0.3.0
Highlights
Gateway plugin framework
ros2_medkit now supports runtime-loaded C++ plugins for extending the gateway with custom endpoints and capabilities. Plugins are shared libraries (.so) loaded at startup, with full lifecycle management, API versioning, and access to gateway internals via PluginContext. The first built-in plugin type is UpdateProvider for software updates. (#237)
Software updates endpoints
8 new REST endpoints under /api/v1/{entity}/updates implement the SOVD software update lifecycle - from listing available campaigns through installation to activation. The update logic is fully delegated to plugins, so any backend (OTA server, local repo, custom protocol) can be integrated without touching gateway code. (#231, #237)
SSE-based periodic data subscriptions
Clients can now subscribe to entity data streams via Server-Sent Events at /api/v1/{entity}/data/{resource}/subscriptions, receiving periodic samples without polling. Each subscription runs independently with configurable intervals. (#223)
Multi-distro CI: Humble, Jazzy, and Rolling
The entire workspace now builds and passes tests on ROS 2 Humble, Jazzy, and Rolling. This required a compatibility shim for ament_target_dependencies (deprecated on Rolling), GenericClient backport for Humble, and fixes for GCC 11, older rosbag2, and DDS behavior differences. (#219, #242)
Rate limiting
New token-bucket rate limiting middleware protects the gateway from request floods. Limits are configurable per-endpoint group (data, operations, faults, config, discovery, bulk_data) with separate burst and sustained rate settings. (#220)
Dedicated integration test package
All integration tests and demo nodes have been extracted into a standalone ros2_medkit_integration_tests package with a shared ros2_medkit_test_utils library, GatewayTestCase base class, and structured test categories (features, scenarios). (#227)
What's Changed
Features
- Gateway plugin framework with dynamic C++ plugin loading by @bburda in #237
- Software updates plugin system with 8 SOVD endpoints by @bburda in #231
- SSE-based periodic data subscriptions by @bburda in #223
- Bulk data upload and delete endpoints by @bburda in #216
- Token-bucket rate limiting middleware by @eclipse0922 in #220
- Global
DELETE /api/v1/faultsendpoint by @mfaferek93 in #228 - Return HEALED/PREPASSED faults via status filter by @mfaferek93 in #218
Bug Fixes & Improvements
- Accurate HIGHEST_SEVERITY reassignment and stale
fault_to_cluster_cleanup by @eclipse0922 in #221 - Clean up
pending_clusters_when fault cleared beforemin_countby @eclipse0922 in #211 - Reduce lock contention in ConfigurationManager by @eclipse0922 in #194
- Cache component topic map to avoid per-request graph rebuild by @eclipse0922 in #212
- Add missing
ament_index_cppdependency topackage.xmlby @eclipse0922 in #191 - Require cpp-httplib >= 0.14 in pkg-config check by @bburda in #230
Testing
- Unit tests for HealthHandlers by @eclipse0922 in #232
- Unit tests for DataHandlers by @eclipse0922 in #234
- Unit tests for AuthHandlers by @eclipse0922 in #233
- Refactor integration test suite into dedicated package by @bburda in #227
CI & Build
- Multi-distro CI support for ROS 2 Humble, Jazzy, and Rolling by @bburda in #219
- Migrate
ament_target_dependenciesto compat shim for Rolling by @bburda in #242 - Standardize include guards to
#pragma onceby @eclipse0922 in #192 - Use
foreachloop for CMake coverage flags by @eclipse0922 in #193
Docs
- REP-2004 Quality Declaration (Level 3) by @mfaferek93 in #172
- Streamline README Quick Start by @mfaferek93 in #170
- Fix deprecated
needs_extra_linksin sphinx conf by @eclipse0922 in #236 - Fix invalid URLs in CONTRIBUTING.md by @bburda in #187
New Contributors
- @eclipse0922 made their first contribution in #191
Full Changelog: 0.2.0...0.3.0
v0.2.0
What's Changed
- feat(serialization): vendor dynmsg library by @mfaferek93 in #163
- docs: add hero GIF to README by @mfaferek93 in #166
- Gateway: Add SOVD bulk-data endpoints and fault detail response by @bburda in #165
- Add pre-commit hooks for clang-format, flake8, cmake-lint, shellcheck and copyright by @bburda in #167
- Feat/rosdistro release prep by @mfaferek93 in #169
Full Changelog: v0.1.0...0.2.0
v0.1.0
Changelog
All notable changes to ros2_medkit are documented in this file.
The format is based on Keep a Changelog <https://keepachangelog.com/en/1.1.0/>,
and this project adheres to Semantic Versioning <https://semver.org/spec/v2.0.0.html>.
[0.1.0] - 2026-02-01
First public release of ros2_medkit.
Added
Gateway (ros2_medkit_gateway)
- REST API gateway exposing ROS 2 graph via SOVD-compatible endpoints
- Discovery endpoints:
/areas,/components,/apps,/functions - Data access: Read topic data, publish to topics
- Operations: Call ROS 2 services and actions with execution tracking
- Configurations: Read/write/reset ROS 2 node parameters
- Faults: Query and clear faults from fault manager
- Three discovery modes: runtime_only, hybrid, manifest_only
- Manifest-based discovery with YAML system definitions
- Heuristic app detection in runtime mode
- JWT authentication with RBAC (viewer, operator, configurator, admin roles)
- TLS/HTTPS support with configurable TLS 1.2/1.3
- CORS configuration for browser clients
- SSE (Server-Sent Events) for real-time fault notifications
- Health check endpoint
Fault Manager (ros2_medkit_fault_manager)
- Centralized fault storage and management node
- ROS 2 services:
report_fault,get_faults,clear_fault - AUTOSAR DEM-style debounce lifecycle (PREFAILED → CONFIRMED → HEALED → CLEARED)
- Fault aggregation from multiple sources
- Severity escalation
- In-memory storage with thread-safe implementation
Fault Reporter (ros2_medkit_fault_reporter)
- Client library for reporting faults from ROS 2 nodes
- Local filtering with configurable threshold and time window
- Fire-and-forget async service calls
- High-severity bypass for immediate fault reporting
Diagnostic Bridge (ros2_medkit_diagnostic_bridge)
- Bridge node converting
/diagnosticsmessages to fault manager faults - Configurable severity mapping from diagnostic status levels
- Support for diagnostic arrays with multiple status entries
Serialization (ros2_medkit_serialization)
- Runtime JSON ↔ ROS 2 message serialization
- Dynamic message introspection without compile-time type knowledge
- Support for all ROS 2 built-in types, arrays, nested messages
- Type caching for performance
Messages (ros2_medkit_msgs)
Fault.msg: Fault status message with severity, timestamps, sourcesFaultEvent.msg: Fault event for subscriptionsReportFault.srv: Service for reporting faultsGetFaults.srv: Service for querying faults with filtersClearFault.srv: Service for clearing faults
Documentation
- Sphinx documentation with Doxygen integration
- Getting Started tutorial
- REST API reference
- Configuration reference (server, discovery, manifest)
- Authentication and HTTPS tutorials
- Docker deployment guide
- Companion project tutorials (web-ui, mcp-server)
Tooling
- Postman collection for API testing
- Development container configuration
- GitHub Actions CI/CD pipeline
Companion Projects
sovd_web_ui <https://github.com/selfpatch/sovd_web_ui>_: Web interface for entity browsingros2_medkit_mcp <https://github.com/selfpatch/ros2_medkit_mcp>_: MCP server for LLM integration
SOVD Compliance
This release implements a subset of the SOVD (Service-Oriented Vehicle Diagnostics)
specification adapted for ROS 2:
- Core discovery endpoints (areas, components)
- Extended discovery (apps, functions) via manifest mode
- Data access (read, write)
- Operations (services, actions with executions)
- Configurations (parameters)
- Faults (query, clear)
Not yet implemented:
- Bulk data transfer
- Software updates
- Locks
- Triggers
- Communication logs