The Rust rewrite of bulker — faster, cleaner, zero Python dependencies.
Single static binary. No Python, no pip, no virtualenvs. One curl command and you're done. Works on any Linux or macOS machine, no runtime required.
Native binary launches in milliseconds. No interpreter overhead on every command invocation. Shell activation is a real shell function — no eval tricks on every use.
Same crate manifests, same registries, same workflows. Your existing crates just work. Migrate by uninstalling the Python version and installing bulkers.
The new bulkers crate list shows installed crates grouped by namespace, with the latest version highlighted and a (+N more) hint when multiple versions are installed. A shared crate root path is shown in the header, keeping paths out of the main listing. Use --versions to show all installed tags, or --simple for scriptable output.
The install script adds a shell function to your ~/.bashrc or ~/.zshrc automatically. After that, bulkers activate and bulkers deactivate just work — no eval "$(...)" on every use. Your prompt updates to show the active crate, and deactivate cleanly restores the original PATH.
For scripts, CI, and AI agents, bulkers exec crate -- cmd is a plain binary with no shell function required.
bulkers activate databio/pepatac now fetches the manifest from the registry automatically if it isn't already cached. There's no separate install step. The lifecycle is simple: init → activate → deactivate.
Once a crate is cached, subsequent activations are instant. Use bulkers crate install only if you want to pre-cache a crate in advance (e.g., on a build step or with --build to pull images ahead of time). Use bulkers crate clean to remove a cached crate.
Commands are grouped into logical subgroups: daily use commands (activate, exec) at the top level, optional cache management under bulkers crate, and configuration under bulkers config. No more flat list of commands to memorize.
crate uninstall and crate update are gone. Use crate clean to remove a cached crate, and simply re-activate to pull a fresh copy. Mock subcommands are now cleanly grouped as mock record and mock run.
Shell completions are generated via bulkers init-shell, giving you tab-complete for commands, subcommands, and installed crate names.
Apptainer (the successor to Singularity) is now a first-class container runtime alongside Docker. Set container = apptainer in your config and crates run natively with apptainer exec. No shims, no hacks. Both apptainer and singularity are supported; bulkers uses whichever is on your PATH.
This matters on HPC clusters where Docker is unavailable and Apptainer is the standard.
Cratefiles can import other crates. Imports are resolved at activate time, not install time. Update a shared crate once, and all cratefiles that import it automatically pick up the change. No rebuilding, no reinstalling — just activate and go.
You can also activate directly from a local YAML file: bulkers activate ./my-pipeline.yaml. No need to publish to a registry or run an install step first — point at a file and you're in.
This makes it practical to maintain a small library of well-tested tool crates and compose them into pipeline environments without duplication.
Record real container outputs with bulkers mock record, then replay them with bulkers mock run. Tests that depend on containerized tools run in seconds without Docker. Mock outputs are plain files you can commit to your test fixtures.
This makes it practical to write fast, deterministic tests for pipelines that use bulkers-managed tools — without pulling images in CI.
When a crate is activated, each tool command is a symlink pointing to the bulkers binary itself. When you call samtools, bulkers inspects argv[0] to know which tool was requested and dispatches accordingly.
This means config changes take effect immediately — no shell reload, no re-activation. Update your container runtime, change a mount, toggle a flag: the next invocation picks it up automatically.
Downloads the binary and adds the shell function to your ~/.bashrc or ~/.zshrc. Restart your shell or source ~/.bashrc after installing.
bulkers is in alpha. It's a full rewrite — not a port — with architectural improvements throughout. The Python bulker continues to work; we recommend trying bulkers alongside it.
Core features are stable. Some edge cases and less-common container runtimes are still being worked out.
Report issues on GitHub — feedback during alpha directly shapes the API.