#noodles #record #bam #bio #writer #io

noodles-bam

Binary Alignment/Map (BAM) format reader and writer

79 breaking releases

new 0.80.0 May 16, 2025
0.78.0 Apr 6, 2025
0.77.0 Mar 8, 2025
0.72.0 Dec 20, 2024
0.2.1 Jul 30, 2021

#10 in #noodles

Download history 666/week @ 2025-01-27 1450/week @ 2025-02-03 794/week @ 2025-02-10 759/week @ 2025-02-17 1145/week @ 2025-02-24 1086/week @ 2025-03-03 961/week @ 2025-03-10 886/week @ 2025-03-17 600/week @ 2025-03-24 574/week @ 2025-03-31 795/week @ 2025-04-07 600/week @ 2025-04-14 467/week @ 2025-04-21 676/week @ 2025-04-28 645/week @ 2025-05-05 1060/week @ 2025-05-12

2,886 downloads per month
Used in 48 crates (5 directly)

MIT license

1MB
28K SLoC

noodles-bam handles the reading and writing of the BAM (Binary Alignment/Map) file format.

The BAM format contains the same information as SAM (Sequence Alignment/Map), namely a SAM header and a list of records.

Examples

Read all records

use noodles_bam as bam;

let mut reader = bam::io::reader::Builder::default().build_from_path("sample.bam")?;
let header = reader.read_header()?;

for result in reader.records() {
    let record = result?;
    // ...
}

Query records

Querying allows filtering records by region. It requires an associated BAM index (BAI).

use noodles_bam as bam;

let mut reader = bam::io::indexed_reader::Builder::default().build_from_path("sample.bam")?;
let header = reader.read_header()?;

let region = "sq0:5-8".parse()?;
let query = reader.query(&header, &region)?;

for result in query {
    let record = result?;
    // ...
}

Dependencies

~3.5–10MB
~91K SLoC