mrrc 0.7.0

A Rust library for reading, writing, and manipulating MARC bibliographic records in ISO 2709 binary format
Documentation

MRRC: MARC Rust Crate

Tests Lint Build codecov CodSpeed

A Rust library for reading, writing, and manipulating MARC bibliographic records, with Python bindings.

Note: This project was developed using agentic coding tools (amp and Claude) and uses beads for agentic issue tracking. The package has not yet had extensive practical testing by humans and should be considered experimental.

Features

  • Reads and writes ISO 2709 (MARC21) binary format
  • Python bindings with pymarc-compatible API (minor differences documented)
  • Multiple serialization formats: JSON, XML, MARCJSON, CSV, Protobuf, Arrow, and others
  • MARC-8 and UTF-8 character encoding support
  • Benchmarked at ~4x pymarc throughput in Python, ~1M records/sec in Rust

Installation

Python (3.10+):

pip install mrrc
# or with uv:
uv add mrrc

Rust:

cargo add mrrc

For optional formats in Rust:

cargo add mrrc --features format-arrow,format-protobuf

Example

Python:

from mrrc import MARCReader

# Pass filename directly for best performance (releases GIL)
for record in MARCReader("records.mrc"):
    print(record.title())

File paths use pure Rust I/O, releasing Python's GIL for multi-threaded workloads. See the threading guide for details.

Rust:

use mrrc::MarcReader;
use std::fs::File;

let file = File::open("records.mrc")?;
let mut reader = MarcReader::new(file);
while let Some(record) = reader.read_record()? {
    if let Some(title) = record.title() {
        println!("{}", title);
    }
}

Documentation

Format Support

Format Read Write Python Rust
ISO 2709 Yes Yes built-in built-in
JSON Yes Yes built-in built-in
MARCJSON Yes Yes built-in built-in
XML Yes Yes built-in built-in
CSV - Yes built-in built-in
Protobuf Yes Yes built-in format-protobuf
Arrow Yes Yes built-in format-arrow
FlatBuffers Yes Yes built-in format-flatbuffers
MessagePack Yes Yes built-in format-messagepack
BIBFRAME Yes Yes built-in format-bibframe

Python wheels include all formats. Rust requires feature flags for optional formats.

Full format matrix

Platforms

Pre-built Python wheels are available for:

Platform Architectures
Linux x86_64, aarch64
macOS x86_64 (Intel), arm64 (Apple Silicon)
Windows x64

Status

Experimental. The Python API aims for pymarc compatibility but has some differences; see the migration guide. Rust APIs may change between minor versions.

Roadmap

Version 0.7.0 is suitable for testing but remains experimental. Before a 1.0 release, we plan to complete:

  1. Real-world data testing — Validate against large-scale MARC datasets from LOC, Internet Archive, and other sources to discover edge cases
  2. Code review — Thorough review of the codebase, particularly the Rust core and PyO3 bindings
  3. Performance analysis — Profile with production workloads, optimize bottlenecks, and update benchmark documentation

License

MIT

Links