Alloy
Mesh StorageIngest

Overview

Four ways to get data into Mesh Storage

Mesh Storage accepts MCAP files via four paths. Pick the one that matches how you record:

  • Web uploadalready have MCAP files on your laptop? Drag and drop them into Mesh Storage from your browser. Best for one-off or ad-hoc files.
  • Python SDKuploading from a notebook, script, backend job, or CI run? Use alloy-sdk to upload files directly into Mesh. Best for code-driven workflows.
  • Dockerno recording stack yet? Pull the prebuilt edge image. You get recorder, compression, diagnostics, and graph recording end-to-end. Best for production fleets.
  • Track a folder (binary)already have your own ROS2 image or recorder? Install the lightweight binary and point it at a directory of MCAP files.

Web uploads land in the uploads/ folder. SDK uploads land in uploads/sdk-uploads/. Device uploads (Docker or binary) land in the devices/<device-id>/ folder. All are queryable from the same place once processed.

How the edge client uploads

Both device paths — Docker and track a folder — run the Alloy edge client (alloy-edge), a lightweight process that records, queues, and uploads MCAP data with no operator action after a one-time approval. With the default signed-URL upload, the backend issues a short-lived URL per file and the device streams straight to cloud storage, so no Alloy cloud credentials live on the robot.

ALLOY CLOUD🌐 Web Appanalysis (MCAP, ROS graph)edge controlBackend☁️ Cloud StorageEDGE CLIENTEdge Manager📋 edge-manager.yamlapi_key, edge_id, poll_secsEdge Sync📋 edge-sync.yamlinput_dir, file_patternoptionalFilter MCAP(eg. redact sensitive data)ROS2 Processorsdiagnostics, compressiongraph recording🤖 Recorderros2 bag record📁 /recordingsconfig + controlconfigconfigtopicswatchescleanup.mcapuploadsigned URL

Edge Sync is the uploader — it streams each closed file to cloud storage. Filter MCAP is an optional redaction stage that sits on that upload path; it's off by default, so unless you configure redaction, files upload as-is.

Once approved, the client runs unattended:

  • files queue locally when the network drops and resume when it returns
  • in-progress recordings are left untouched until their MCAP footer is written
  • oldest files are evicted first when the local disk quota is hit

See the configuration reference for every edge-manager.yaml and edge-sync.yaml field, or Redact to strip sensitive data on the device before upload.

What the Docker image bundles on top of the binary

Bundled extraWhat it gives you
Transport compressionJPEG (40x), H.264 (43x), Draco (3.6x), LZ4 (2.8x)
System diagnosticsCPU, memory, disk, temperature as ROS2 topics
ROS graph recordingComputational graph snapshot at 1 Hz
Pre-wired recorderros2 bag record configured for compression and output paths
Multi-distro / multi-archHumble + Jazzy, amd64 + arm64
ROS2 middlewareFastDDS (default), CycloneDDS, and Zenoh support

If you already have a recording stack — or don't need these extras — the binary is the lighter option.

On this page