Skip to content

Installation

Prerequisites

  • Rust 1.95 or later
  • Cargo (comes with Rust)

Installing the CLI

From Source

Clone the repository and build:

git clone https://github.com/rnabioco/escapepod-rs.git
cd escapepod-rs
cargo build --release

The binary will be at target/release/escpod. You can copy it to a directory in your PATH:

cp target/release/escpod ~/.local/bin/
# or
sudo cp target/release/escpod /usr/local/bin/

Optional features

The default build ships the stable CLI surface (summary, view, inspect, merge, filter, bam-filter, subset). Extra commands live behind Cargo features:

Feature Commands unlocked
experimental repack, resquiggle, index
demux demux detect, fingerprint, classify, split, train
train implies demux; adds demux train-svm
gpu implies demux; batched GPU DTW for classify / train-svm (CUDA driver + libnvrtc required at runtime)
cnn-detect implies demux; ADAPTed-style CNN adapter detection (bring-your-own ONNX model)

Combine as needed:

cargo build --release --features experimental,demux
cargo install --git https://github.com/rnabioco/escapepod-rs --features experimental

See the Experimental section for per-command details.

Verify Installation

escpod --version
escpod --help

Installing the Python package

The escapepod Python package provides a pod5-compatible API. Install it from PyPI:

uv pip install escapepod

Wheels are published for CPython 3.9+ (abi3) on Linux (x86_64/aarch64, manylinux + musllinux) and macOS (x86_64/arm64). To build from a checkout instead (or on an unsupported platform), use maturin:

uv pip install maturin
maturin develop --release --manifest-path crates/escapepod-python/Cargo.toml

This installs escapepod into the active environment. See the Python API for usage.

Using the Rust Library

The workspace splits the library layer in two: escapepod-pod5 for format I/O and escapepod-signal for signal-processing algorithms. escapepod-signal re-exports the full escapepod-pod5 surface, so most users only need to depend on the signal crate:

[dependencies]
escapepod-signal = { git = "https://github.com/rnabioco/escapepod-rs.git" }

If you only need POD5 file I/O without the signal algorithms:

[dependencies]
escapepod-pod5 = { git = "https://github.com/rnabioco/escapepod-rs.git" }

Barcode demultiplexing lives in its own crate, escapepod-demux, which mirrors the CLI's demux feature gate.

Building Documentation

To build the API documentation locally:

cargo doc --open --no-deps

Development Setup

For contributing to escapepod-rs:

# Clone the repository
git clone https://github.com/rnabioco/escapepod-rs.git
cd escapepod-rs

# Run tests (cargo-nextest)
cargo nextest run

# Run doctests separately — nextest does not execute them
cargo test --doc --workspace

# Run clippy lints
cargo clippy

# Format code
cargo fmt