mdf4-rs
A safe, efficient Rust library for reading and writing ASAM MDF 4 (Measurement Data Format) files.
Maintained by Sigma Tactical Group for measurement logging in the Sigma stack. The crates.io package name mdf4-rs is unchanged for semver continuity. Earlier standalone development and contributors are upstream lineage — see CONTRIBUTORS.md.
Features
- 100% safe Rust -
#![forbid(unsafe_code)] - Minimal dependencies - Only
serde/serde_jsonfor serialization - Memory efficient - Streaming index for large files (335x faster, 50x less memory)
- Full read/write - Create, read, and modify MDF4 files
- CAN logging - Integrated CAN bus data logging with DBC support
Embedded-first
Product placement: no_std + alloc readers with slim features; alloc for writers/loggers/dbc today—details and backlog in ARCHITECTURE.md.
Quick Start
[]
= "0.3"
Reading
use MDF;
let mdf = MDFfrom_file?;
for group in mdf.channel_groups
Writing
use ;
let mut writer = new?;
writer.init_mdf_file?;
let cg = writer.add_channel_group?;
writer.add_channel?;
// ... write data
CAN Logging
use CanDbcLogger;
let dbc = parse?;
let mut logger = builder.build?;
logger.log;
let mdf_bytes = logger.finalize?;
Minimal (no_std)
[]
= { = "0.3", = false, = ["alloc"] }
See examples/ for complete working examples:
read_file.rs- Reading MDF4 fileswrite_file.rs- Creating MDF4 filescan_logging.rs- CAN bus logging with DBC supportethernet_logging.rs- Ethernet frame logginglin_logging.rs- LIN bus loggingflexray_logging.rs- FlexRay bus loggingindex_operations.rs- Efficient file indexingmerge_files.rs- Merging multiple MDF4 filescut_file.rs- Extracting time segmentsno_std_write.rs- Writing MDF4 in no_std environments
Feature Flags
| Feature | Description | Default |
|---|---|---|
std |
Standard library with serde/serde_json | Yes |
alloc |
Heap allocation | Via std |
can |
CAN bus support via embedded-can |
Yes |
dbc |
DBC decoding via dbc-rs |
Yes |
serde |
Serialization support | Via std |
compression |
DZ block decompression via miniz_oxide |
No |
Minimum Supported Rust Version (MSRV)
mdf4-rs requires Rust 1.97.0 or later (edition 2024, first supported in Rust 1.85.0).
Documentation
- API Reference
- ARCHITECTURE.md - Internal design (includes Embedded-first)
Brand & artwork
© Sigma Tactical Group. All rights reserved.
The Sigma Tactical Group name, logos, marks, artwork, and visual identity are proprietary. They are not covered by this repository's source-code license. See BRANDING.md.
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.