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.
- Multi-protocol capture
- Commit before acknowledging
- Per-sink transform chains
- Replay from the local log
- Open source, Apache-2.0
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-livebuild featureAvailable - HTTPAvailable
- gRPCAvailable
- Modbus TCPAvailable
- SocketCANLinux onlyAvailable
- OPC UAOpt-in
opcuabuild featureAvailable
02 · Durable
03 · Process
04 · Deliver
- P0Local Parquet segmentsAvailable
- P0S3-compatible object storageAvailableChaos verification pending
- P1ClickHouseAvailableOutside the core v0.1 reliability gate
- P2IcebergAvailableExperimental, opt-in
icebergbuild feature - P2Managed destinationsPlanned
- Apache KafkaAvailable
- NATS JetStreamAvailable
- MQTT publishAvailable
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.
| Kind | Component | Status |
|---|---|---|
| Source | MQTT, with persistent sessions and acknowledgement after WAL commit | Available |
| Source | ROS 2 offline recordings (MCAP) | Available |
| Source | HTTP, gRPC, Modbus TCP, SocketCAN | Available SocketCAN is Linux only |
| Source | OPC UA, behind the opt-in opcua build feature | Available |
| Source | Live ROS 2 transport (rmw_zenoh) | Available experimental, opt-in ros2-live build feature |
| Sink (P0) | Local Parquet segments | Available |
| Sink (P0) | S3-compatible object storage | Available chaos verification pending |
| Sink (P1) | ClickHouse | Available outside the core v0.1 reliability gate |
| Sink (P2) | Iceberg, behind the opt-in iceberg build feature | Available experimental |
| Sink (P2) | Managed destinations | Planned |
| Sink | Apache Kafka, NATS JetStream, MQTT publish | Available |
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.