One query. Every format you need.
Results are unified across signal types — tables for SQL consumers, structured objects for programmatic processing, chart-ready data for visualization, and causality graphs for message tracing.
Why ROSQL?
Robot observability is hard. ROS2 systems generate a firehose of traces, logs, and sensor data across dozens of nodes, but general-purpose query languages have no awareness of topics, action graphs, or message causality. ROSQL closes that gap: write queries in the language of your robot, not your database.
Robotics-native syntax
First-class support for ROS2 nodes, actions, topics, and ParentSpanId-based message causality. No glue code.
Cross-signal correlation
DURING() correlates events across traces, logs, metrics, and topics in a single query — something SQL has no primitive for.
Unified results
Results are returned as structured objects ready for tables, charts, further programmatic processing, or graph visualization.
Causality graphs
MESSAGE JOURNEY walks the parent_span_id chain recursively — see exactly how a message propagated through your robot's nodes.
One query, multiple signals
Find every navigation failure that happened while the battery was critically low. One sentence. One query. No JOINs.
SELECT trace_id, span_name_col, service_name, duration, status_code, span_attributes
FROM traces
WHERE status = 'ERROR' AND action_name = '/navigate_to_pose'
DURING(
FROM topics WHERE topic_name = '/battery_state'
AND fields['percentage'] < 15
)
SINCE 6 hours ago
Architecture
Quick start
Requires the Rust toolchain.
cargo install rosql --features server,postgres
rosql query "FROM traces WHERE status = 'ERROR' SINCE 1 hour ago" \
--backend postgres \
--url postgresql://user:pass@localhost:5432/telemetry
Need fleet-scale telemetry?
ROSQL is created and used by Robot Ops, Inc. to power the Robot Ops observability platform — managed ingestion, storage, and dashboards with lifecycle anchors, fleet-wide anomaly detection, and ClickHouse performance.
Explore Robot Ops →