Beta · Rust · Apache-2.0

The open data plane for robotics.

Capture. Transform. Buffer. Replay.

Thadam records robotic and industrial telemetry in a local durable log before it acknowledges the source. It then normalizes the data and delivers it to Parquet, S3-compatible object storage, and analytical databases.

How it works

Accepted messages are committed to one local log. Each sink reads that log through its own chain, so a slow or failed sink is isolated from the others (see ADR-0003).

01 · Capture

  • MQTTPersistent sessions, ack after WAL commitAvailable
  • ROS 2 recordingsMCAP, offlineAvailable
  • ROS 2 liveExperimental, opt-in ros2-live build featureAvailable
  • HTTPAvailable
  • gRPCAvailable
  • Modbus TCPAvailable
  • SocketCANLinux onlyAvailable
  • OPC UAOpt-in opcua build featureAvailable

02 · Durable

Write-ahead log Committed before ack; the log is the source of truth

03 · Process

Per-sink chains Decode and transform, one chain per sink

04 · Deliver

  • P0Local Parquet segmentsAvailable
  • P0S3-compatible object storageAvailableChaos verification pending
  • P1ClickHouseAvailableOutside the core v0.1 reliability gate
  • P2IcebergAvailableExperimental, opt-in iceberg build feature
  • P2Managed destinationsPlanned
  • Apache KafkaAvailable
  • NATS JetStreamAvailable
  • MQTT publishAvailable
The log is the source of truth. Each sink reads it independently.

Status

Thadam is in beta. Nothing is published to a package registry, and there are no release binaries yet. Available means implemented in this repository. In progress means being built. Planned means not started. The readiness tracker records how far each part has been verified.

Sources and sinks
KindComponentStatus
SourceMQTT, with persistent sessions and acknowledgement after WAL commitAvailable
SourceROS 2 offline recordings (MCAP)Available
SourceHTTP, gRPC, Modbus TCP, SocketCANAvailable SocketCAN is Linux only
SourceOPC UA, behind the opt-in opcua build featureAvailable
SourceLive ROS 2 transport (rmw_zenoh)Available experimental, opt-in ros2-live build feature
Sink (P0)Local Parquet segmentsAvailable
Sink (P0)S3-compatible object storageAvailable chaos verification pending
Sink (P1)ClickHouseAvailable outside the core v0.1 reliability gate
Sink (P2)Iceberg, behind the opt-in iceberg build featureAvailable experimental
Sink (P2)Managed destinationsPlanned
SinkApache Kafka, NATS JetStream, MQTT publishAvailable

Build from source

The Rust toolchain is pinned by rust-toolchain.toml, and rustup installs it on first use. Linux x86_64 and ARM64 are the durability targets. macOS builds are for development and make no durability claims.

git clone https://github.com/Dineshkarthik/thadam.git
cd thadam
cargo build --release -p thadam
./target/release/thadam version

Next, follow your first pipeline.

Latest changes

Changes are recorded in the CHANGELOG. Design decisions are ADRs in docs/design/adr, and milestone progress is on the roadmap.

Delivery claims

Guarantees are stated per hop, and only where the claims register has evidence. Thadam does not claim exactly-once or zero-loss delivery end to end. Acknowledged data survives a process crash when fsync is enabled. For MQTT QoS 1 and 2, capture is at-least-once, with acknowledgement after WAL commit. The conditions for each claim are in delivery guarantees.