bv

about

the problem

A bioinformatics pipeline written in January will, in March, produce different output, fail to install, or fail to run on the cluster. Conda environments don't reproduce: a pinned version string (samtools==1.20) is meaningless once its dependencies move, and the same environment.yml resolves differently on a laptop and on an HPC node. Container tags solve part of this but are mutable and rarely allowed on shared HPC where Docker isn't installed.

what bv does

bv pins each tool by its OCI manifest digest, not by tag or version string. bv add blast writes bv.toml and bv.lock, generates PATH shims under .bv/bin/, and pulls the image. Existing scripts that call blastn or samtools by name keep working. Commit the lockfile; bv sync on any other machine reproduces the exact bytes by digest, on Docker (laptop) or Apptainer (HPC), with the same manifest and the same bv run syntax on both.

install

curl -fsSL https://raw.githubusercontent.com/tejasprabhune/bv/main/install.sh | sh
# or: cargo install biov

Linux and macOS. On Windows, use WSL2 with Docker Desktop's WSL2 backend; native Windows is not yet supported.

tl;dr

bv add blast
bv exec blastn -query foo.fa -db nr
git add bv.toml bv.lock     # commit the pin; `bv sync` reproduces anywhere

speed

Two numbers matter: how long the first pipeline invocation takes (cold install) and how long every subsequent invocation takes (start latency). bv wins on start latency because containers fork-exec without an environment-activation step. On install, bv converges with pixi at scale: layer sharing across tools means the 10th tool in a typical bioinformatics stack reuses most of its layers from earlier installs.

first-run latency (per invocation, after install)

bv 0.35s vs pixi 3.5s vs micromamba 4.2s

install time, cold cache (1, 5, 10 tools)

install time at 1, 5, 10 tools for bv, pixi, micromamba

container runtime

bv shells out to Docker or Apptainer; install one first.

# Docker, typical on a laptop
curl -fsSL https://get.docker.com/rootless | sh

# Apptainer, typical on HPC nodes (no daemon, no root required)
conda install -c conda-forge apptainer

For GPU tools on Docker, install nvidia-container-toolkit. Apptainer uses the host's NVIDIA libraries directly with --nv.

links