# mdf4-rs
> **⚠️ Work in Progress**: This project is under active development and not yet ready for production use.
A safe, efficient Rust library for reading and writing ASAM MDF 4 (Measurement Data Format) files.
[](https://crates.io/crates/mdf4-rs)
[](https://docs.rs/mdf4-rs)
[](LICENSE)
## Features
- **100% safe Rust** - `#![forbid(unsafe_code)]`
- **Minimal dependencies** - Only `serde`/`serde_json` for 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
## Quick Start
```toml
[dependencies]
mdf4-rs = "0.1"
```
### Reading
```rust
use mdf4_rs::MDF;
let mdf = MDF::from_file("recording.mf4")?;
for group in mdf.channel_groups() {
for channel in group.channels() {
let values = channel.values()?;
println!("{}: {} samples", channel.name()?.unwrap_or_default(), values.len());
}
}
```
### Writing
```rust
use mdf4_rs::{MdfWriter, DataType, DecodedValue};
let mut writer = MdfWriter::new("output.mf4")?;
writer.init_mdf_file()?;
| `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` |
### Minimal Configuration
```toml
[dependencies]
mdf4-rs = { version = "0.1", default-features = false, features = ["alloc"] }
```
## Performance
| 1 MB | 6x faster | 50x less |
| 40 MB | 335x faster | 50x less |
## Examples
See [`examples/`](./examples/) for complete working examples:
- `can_logging.rs` - CAN bus logging workflows (decoded, raw, overlay, streaming)
- `read_file.rs` - Reading MDF4 files
- `write_file.rs` - Creating MDF4 files
- `index_operations.rs` - Efficient file indexing
- `merge_files.rs` - Merging multiple MDF4 files
- `cut_file.rs` - Extracting time segments
## Documentation
- [API Reference](https://docs.rs/mdf4-rs)
- [ARCHITECTURE.md](ARCHITECTURE.md) - Internal design
## License
MIT OR Apache-2.0. See [LICENSING.md](LICENSING.md).