One stack. Three vendors. Open Rust.
OpenProteo is the open-source Rust stack for proteomics raw-file access. Read Thermo, Bruker, and Waters acquisitions through a single API, convert them to PSI-MS mzML 1.1.0 with the canonical writer, and stream them straight into Arrow for downstream analytics. No vendor SDKs, no Windows-only DLLs, no binary blobs in your release pipeline.
| Layer | Crate | What it does |
|---|---|---|
| Umbrella | openproteo-io |
Feature-gated re-exports + detect_format + convert_to_mzml |
| CLI | openproteo-io-cli |
vendor2mzml one-shot binary |
| Python | openproteo |
Metapackage exposing the converter from Python |
| Shared core | openproteo-core | SpectrumRecord, Arrow batch, mzML writer |
Thermo .raw |
opentfraw | Finnigan reader |
Bruker .d/ |
opentimstdf | timsTOF TDF reader |
Waters .raw/ |
openwraw | MassLynx bundle reader |
Current pinned stack lives in STACK.md.
Pre-built vendor2mzml binaries land on the GitHub
Releases page.
Or build from source:
cargo install openproteo-io-cli --features all[dependencies]
openproteo-io = { version = "1.0", features = ["all"] }Vendor features are independent (thermo, bruker, waters) so you
only compile what you ship.
pip install openproteovendor2mzml /data/sample.raw /tmp/sample.mzML --indexedvendor2mzml sniffs the format from the path (or directory layout for
Bruker .d/ and Waters .raw/ bundles), routes through the matching
vendor crate, and writes indexed PSI-MS mzML 1.1.0.
use openproteo_io::{detect_format, convert_to_mzml};
let fmt = detect_format("sample.raw")?;
println!("detected: {fmt:?}");
convert_to_mzml("sample.raw", "sample.mzML", /* indexed */ true)?;import openproteo
openproteo.to_mzml("sample.raw", "sample.mzML", indexed=True)Full reference, conversion semantics, and the per-vendor parser notes live at sigilweaver.app/openproteo/docs.
The source for that site is in docs/ (Docusaurus). See
docs/README.md for the build commands.
Bug reports and PRs are welcome on any of the five repos. See SECURITY.md for the security policy.
This umbrella ships releases via scripts/release-stack.sh
which gates on the downstream ProLance
truth-test before tagging.
Apache-2.0. Each vendor crate carries its own header and upstream attribution; this repo only orchestrates them.