tdms-rs

Crates.iotdms-rs
lib.rstdms-rs
version2.0.0
created_at2026-01-09 09:39:18.193393+00
updated_at2026-01-16 07:23:41.877326+00
descriptionPure Rust library for reading and writing National Instruments TDMS files with full format support and ergonomic APIs
homepagehttps://github.com/robingkn/tdms-rs
repositoryhttps://github.com/robingkn/tdms-rs
max_upload_size
id2031874
size143,335
(robingkn)

documentation

https://docs.rs/tdms-rs

README

tdms-rs

Crates.io Documentation License

A pure Rust library for reading and writing National Instruments TDMS (Technical Data Management Streaming) files with high performance and zero-copy capabilities.

🚀 Key Features

  • ⚡ High Performance: Designed for high-throughput I/O. Achieves near-disk bandwidth by minimizing syscalls and using efficient buffer management.
  • 📦 Lazy Loading: Only loads data when requested. Metadata is indexed eagerly, while raw data is read on-demand to minimize memory footprint.
  • 🛡️ Type Safe: Strongly-typed channel access ensures data integrity at compile time.
  • 🔗 Pure Rust: No external C dependencies, making cross-compilation seamless.
  • 📊 Full Format Support: Supports all TDMS data types, hierarchical structures, and multi-segment files (Little-Endian).

📖 Documentation

🛠️ Quick Start

Reading

use tdms_rs::TdmsFile;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let file = TdmsFile::open("data.tdms")?;
    let group = file.group("Sensors").ok_or("Group not found")?;
    let channel = group.channel("Temperature").ok_or("Channel not found")?;

    let mut data = vec![0.0f64; channel.len()];
    channel.read(0..channel.len(), &mut data)?;

    println!("Read {} samples", data.len());
    Ok(())
}

Writing

use tdms_rs::TdmsWriter;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut writer = TdmsWriter::create("output.tdms")?;
    let mut group = writer.add_group("DAQ")?;
    let mut channel = group.add_channel::<f64>("Voltage")?;
    
    channel.write(&[1.0, 2.0, 3.0])?;
    writer.close()?;
    Ok(())
}

📐 Philosophy & Guarantees

  1. Memory Efficiency: Never load data you don't ask for. Metadata is indexed; raw data is lazy-loaded.
  2. Safety First: Safe wrappers around unsafe memory operations.
  3. Modern MSRV: Supports the latest stable Rust features.

🤝 License

Licensed under either of Apache License 2.0 or MIT License at your option.

Commit count: 60

cargo fmt