·
29 commits
to main
since this release
Breaking changes
mcap filteris now lossless by default: metadata and attachments are kept unless you pass the new--exclude-metadata/--exclude-attachmentsflags. The old--include-metadata/--include-attachmentsflags are now hidden deprecated no-ops that warn on stderr. (#1756)mcap filter --start/--endnow apply to messages only; attachments are no longer dropped when theirlog_timefalls outside the window (use--exclude-attachmentsto drop them). (#1756)mcap filter,mcap compress, andmcap decompressno longer silently re-sort indexed inputs: an out-of-order indexed file was previously re-sorted to log time, but the default is now--order preserve(keep stored message order). Pass--order log_timeto restore the previous behavior. (#1762)- Rewrite commands (
filter,compress,decompress,sort) now write records in a standardized physical layout (metadata after the header → messages → attachments before Data End), so byte-level output can differ from 0.2.0 even when logical content is unchanged. (#1756, #1757)
New features
- Shared
--order <preserve|log_time|topic>flag onfilter,compress,decompress, andsort.preservekeeps stored order,log_timesorts by ascending log time (log-timealias), andtopicgroups each channel's messages together (channels by topic name then channel ID), placing each channel in its own chunk(s) when chunking is enabled for contiguous single-topic reads. Note thattopicalways buffers the selected messages in memory, andlog_timebuffers them when the input has no summary. (#1762, #1754, #1757) mcap filtergains--exclude-metadataand--exclude-attachmentsto opt out of the new lossless default. (#1756)mcap filtergains--no-chunks(write records outside of chunks). (#1763)mcap filter,compress, anddecompressgain--no-crc(disable all output CRC fields), matchingconvert/merge/sort. (#1763)mcap sortgains an overridable--orderflag (defaults tolog_time), and its input and output are now optional — it reads from stdin and writes to stdout when omitted. (#1757)- Expanded and corrected
--helptext across commands (remote URL inputs and--allow-remote-scan, log-time semantics for time filters, correctedcat --jsonencoding names, attachment retrieval, and in-placeaddcorruption warnings), and hid the deprecated--start-nsecs/--end-nsecsflags from help (they remain accepted). (#1774)
Bug fixes
mcap cat --jsonnow emits protobuf fields set to their proto3 default value (e.g.0,"",false, enum zero-variants) instead of omitting them from the output. (#1765)- Rewrite commands no longer silently drop messages when an indexed input's
Statisticsrecord disagrees with its chunk message indexes (or a message index can't be parsed); the engine falls back to a linear scan. (#1771) mcap compress --compressioninvalid values are now rejected at parse time (exit code 2,[possible values: zstd, lz4, none]) instead of failing at runtime. (#1767)
Deprecations
These flags were renamed for consistency across the rewrite commands; the old names still work as hidden aliases that print a stderr warning, so existing invocations keep functioning.
mcap filter --output-compressionrenamed to--compression, matchingsortand the other rewrite commands (which already used--compression);--compressionwins if both are set. (#1761)mcap sort --output-filerenamed to--output(-ois unchanged), matching the other rewrite commands — previously onlysortandmergeused--output-file.filter,compress, anddecompressalso accept the deprecated--output-fileas a hidden alias for uniformity. (#1757)mcap merge --output-filerenamed to--output(-ois unchanged), for the same cross-command consistency. (#1771)
Performance
- Bounded memory for piped stdin: rewrite commands now spool non-seekable stdin to a temporary file and memory-map it instead of buffering the whole MCAP in memory. (#1759)
- Standardizing record placement adds an up-front metadata scan on the linear (summaryless or fallback) path, a modest throughput regression (~12–22% in benchmarks); well-formed indexed inputs are unaffected. (#1756)