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
timestampargument names. The projected fields follow. Anopen_mcap_filecall withoutprojectiongets every top-level field, and an emptyprojectiongets 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 apyarrow.RecordBatchReaderover the remaining batches, which PyArrow, DuckDB and Polars accept.- Close a cursor you stop reading, so it makes no further
read_bytescalls; thewithstatement closes it when its block ends. - A failure raises
CodecError, aValueErrorwhosecodenames it, such asunknown_channel,corrupt_inputorresource_limit. The exceptions: an exception yourread_bytesraises propagates unchanged, and a value of the wrong type, including aread_bytesresult that is notbytes, raisesTypeError.
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
McapBatchDecoderis removed; useopen_mcap_file.UnsupportedMessagederives fromCodecError, and so fromValueError, where 0.1 derived it fromException. Place anexcept UnsupportedMessageclause before anyexcept ValueErrorclause, which would otherwise catch it.RosCdrCodecraisesCodecError, still aValueError, with message text that differs from 0.1's; match oncode, 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)
| File | Reset | |||
|---|---|---|---|---|
| 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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