Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

roboto-mcap-codec

Decodes one channel of an MCAP file into Apache Arrow, and single messages into Python objects. open_mcap_file reads the file through a byte-range reader you supply: its footer and summary, then only the chunks that hold the channel's messages within the requested row range and, for a window on log time, overlap that window. It decodes ROS 1 messages, ROS 2 and OMG IDL messages over CDR, and JSON or MessagePack messages described by a JSON Schema. The rows arrive as pyarrow.RecordBatch values, one per batch, each owning its data, so it stays valid after the file and the cursor that read it are gone.

Each open_mcap_file call opens a cursor over one channel of one file, and cursors on separate threads run in parallel, since each decodes without holding the interpreter lock. With the default limits, one cursor reads messages of up to 64 MiB, such as camera images and lidar point clouds.

The package ships prebuilt wheels for Linux (manylinux2014 and musllinux_1_2, x86-64 and aarch64), macOS (Intel and Apple Silicon) and Windows (x86-64 and ARM64). Each wheel targets CPython's stable ABI, so one wheel per platform serves CPython 3.10 and later. The package is published as these wheels only, so pip cannot install it on any other platform. It depends on PyArrow 20 or later, except on Windows ARM64, where PyArrow publishes no wheel and open_mcap_file needs one built separately.

Install

pip install roboto-mcap-codec

Quick start

import os

import mcap_codec

path = "recording.mcap"
with open(path, "rb") as file:

    # Called for each byte range the cursor reads; return exactly `length` bytes.
    def read_bytes(offset: int, length: int) -> bytes:
        file.seek(offset)
        return file.read(length)

    with mcap_codec.open_mcap_file(
        read_bytes,
        os.path.getsize(path),
        channel=mcap_codec.TopicName("/odometry"),
        projection=[["speed"], ["pose", "x"]],
        timestamp=mcap_codec.TimestampSource("message_log_time"),
        time_window=(1_700_000_000_000_000_000, 1_700_000_060_000_000_000),
    ) as cursor:
        for batch in cursor:
            ...  # use the rows of this pyarrow.RecordBatch
  • Column 0 of every batch is the row number: the message's zero-based position among the channel's messages, in the order the file stores them. Column 1 is the timestamp in nanoseconds, from the source the timestamp argument names. The projected fields follow. An open_mcap_file call without projection gets every top-level field, and an empty projection gets none.
  • Read each cursor from one thread at a time: a second call on a cursor while the first still runs raises RuntimeError.
  • cursor.to_record_batch_reader() returns a pyarrow.RecordBatchReader over the remaining batches, which PyArrow, DuckDB and Polars accept.
  • Close a cursor you stop reading, so it makes no further read_bytes calls; the with statement closes it when its block ends.
  • A failure raises CodecError, a ValueError whose code names it, such as unknown_channel, corrupt_input or resource_limit. The exceptions: an exception your read_bytes raises propagates unchanged, and a value of the wrong type, including a read_bytes result that is not bytes, raises TypeError.

The docstrings, such as help(mcap_codec.open_mcap_file), document every argument, class and error code.

Decoding single messages

A RosCdrCodec decodes one message at a time, from its bytes, without reading a file. Constructing one parses a schema, so build one per schema and reuse it for every message that schema describes:

from mcap_codec import RosCdrCodec, UnsupportedMessage

# schema_data: the schema's bytes, such as an MCAP Schema record's `data`
codec = RosCdrCodec("ros2msg", "cdr", schema_data, "sensor_msgs/msg/Imu")

# payload: a Message record's `data`; a CDR payload starts with its 4-byte
# encapsulation header
try:
    message = codec.decode(payload)
    partial = codec.decode_fields(
        payload, ["angular_velocity.x", "header.stamp.sec"]
    )
except UnsupportedMessage:
    message = partial = None  # a message the decoder declines; skip it

decode returns the message as dicts, lists and scalars, with each array of a fixed-width numeric type as an array.array. decode_fields returns the fields at the dotted paths it is given, nested as in the whole message, and builds no Python objects for the others. A message the decoder declines, such as one holding an IDL wstring outside a @mutable struct, raises UnsupportedMessage, a CodecError you can catch to skip it.

Changes from 0.1

  • McapBatchDecoder is removed; use open_mcap_file.
  • UnsupportedMessage derives from CodecError, and so from ValueError, where 0.1 derived it from Exception. Place an except UnsupportedMessage clause before any except ValueError clause, which would otherwise catch it.
  • RosCdrCodec raises CodecError, still a ValueError, with message text that differs from 0.1's; match on code, not on the text.

License

The package is licensed under MPL-2.0; see LICENSE. Versions 0.1.19 and earlier were published under Apache-2.0 and remain under it. NOTICE and THIRD_PARTY_LICENSES/ cover the third-party components compiled into the wheels.

Release files for roboto-mcap-codec 0.2.0rc3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for roboto-mcap-codec 0.2.0rc3
File
roboto_mcap_codec-0.2.0rc3-cp310-abi3-win_arm64.whl CPython 3.10 abi3 Windows ARM64 Details
roboto_mcap_codec-0.2.0rc3-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
roboto_mcap_codec-0.2.0rc3-cp310-abi3-musllinux_1_2_x86_64.whl CPython 3.10 abi3 Linux musl 1.2+ x86-64 Details
roboto_mcap_codec-0.2.0rc3-cp310-abi3-musllinux_1_2_aarch64.whl CPython 3.10 abi3 Linux musl 1.2+ ARM64 Details
roboto_mcap_codec-0.2.0rc3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
roboto_mcap_codec-0.2.0rc3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 abi3 Linux glibc 2.17+ ARM64 Details
roboto_mcap_codec-0.2.0rc3-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
roboto_mcap_codec-0.2.0rc3-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 17.7 MB

Release files / roboto_mcap_codec-0.2.0rc3-cp310-abi3-win_arm64.whl

Download URL roboto_mcap_codec-0.2.0rc3-cp310-abi3-win_arm64.whl
Size 2.1 MB
Tags CPython 3.10 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
b9872a50189800c5a21bcd1c9b53dd32a4e499ff9adfdd1b42e52bdf4bef84d9
BLAKE2b-256 checksum
How to use checksums
bc6e65c9ee72788d95cb3e5aafabfaa7209df2d0b36acd34b5b0e6f8677b8092
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / roboto_mcap_codec-0.2.0rc3-cp310-abi3-win_amd64.whl

Download URL roboto_mcap_codec-0.2.0rc3-cp310-abi3-win_amd64.whl
Size 2.2 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
a4021ed94750221c60eb0ab7f4e06eb5299f9de1c984c9d857e52771245fcd20
BLAKE2b-256 checksum
How to use checksums
3227ffb2fff996ff663c10e00cc35c9956c298dfe6a07b4714c216cbc395dab1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / roboto_mcap_codec-0.2.0rc3-cp310-abi3-musllinux_1_2_x86_64.whl

Download URL roboto_mcap_codec-0.2.0rc3-cp310-abi3-musllinux_1_2_x86_64.whl
Size 2.5 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
5422be14f4e3f3145a9611171c29214e065fd51aa7ab2143116c55157512676a
BLAKE2b-256 checksum
How to use checksums
a48a4daac0ad58771482553ef973dd2adb2784a55a7f3acce4d2605ef7bedc48
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / roboto_mcap_codec-0.2.0rc3-cp310-abi3-musllinux_1_2_aarch64.whl

Download URL roboto_mcap_codec-0.2.0rc3-cp310-abi3-musllinux_1_2_aarch64.whl
Size 2.3 MB
Tags CPython 3.10 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
a5eb326f517a2d59f53df703f3ba4e04fc750c5b7d2b90a4c81228d6c6affd8c
BLAKE2b-256 checksum
How to use checksums
147e4cd48eed212009aa5122e3235a154f6fa18ecffc94d94d6def72b82f6b19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / roboto_mcap_codec-0.2.0rc3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL roboto_mcap_codec-0.2.0rc3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.3 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
434e45b0f2bca44256027bb21a9994416b476a9c7cac6056b11e1793ce742873
BLAKE2b-256 checksum
How to use checksums
7a99af124391a01f71b39a82cc09cfd1a0cfb9a6f7a98476e7f958f63de00f6a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / roboto_mcap_codec-0.2.0rc3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL roboto_mcap_codec-0.2.0rc3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 2.1 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
a1b845c9ac00c586ea7c1210c1ed3a6ace182998ae7060e437352659f3fab445
BLAKE2b-256 checksum
How to use checksums
9b47aef783c50aa35f907e1e9011dc7d542dc8a509a68a0c077e4cfbd7834ef4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / roboto_mcap_codec-0.2.0rc3-cp310-abi3-macosx_11_0_arm64.whl

Download URL roboto_mcap_codec-0.2.0rc3-cp310-abi3-macosx_11_0_arm64.whl
Size 2.1 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0148b5d08c74967a37fc80d0d8be0bec9cfcce25ec2907ef111ff65a416f60db
BLAKE2b-256 checksum
How to use checksums
e888ff30c1d64108e5f69f8103e567094c4784412ddd74250e148e938462f4e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / roboto_mcap_codec-0.2.0rc3-cp310-abi3-macosx_10_12_x86_64.whl

Download URL roboto_mcap_codec-0.2.0rc3-cp310-abi3-macosx_10_12_x86_64.whl
Size 2.2 MB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
7b1d93bf9ac7c3ea1f6103e9b421e1633f5a1b40911396d92bc5ad48a96ce4f1
BLAKE2b-256 checksum
How to use checksums
0d0e810890cb252305ffc9afbba37ec7d7925a775743c0da4ed3bc8d1300b2c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page