LinuxCommandLibrary

bpkg

Manage and build software packages

TLDR

Update the local index

$ bpkg update
copy

Install a package globally
$ bpkg install --global [package]
copy

Install a package in a subdirectory of the current directory
$ bpkg install [package]
copy

Install a specific version of a package globally
$ bpkg install [package]@[version] -g
copy

Show details about a specific package
$ bpkg show [package]
copy

Run a command, optionally specifying its arguments
$ bpkg run [command] [argument1 argument2 ...]
copy

SYNOPSIS

bpkg [global-options] <command> [<arguments>]

PARAMETERS

--help, -h
    Show help and exit

--version, -v
    Print version and exit

--quiet, -q
    Suppress non-error output

--verbose, -V, -VV, ...
    Increase verbosity (multiple for more detail)

--color[=WHEN]
    Control colored output (auto/always/never)

--cwd DIR
    Change to directory DIR before running

--cache DIR
    Set cache directory (default: ~/.cache/bpkg)

--config DIR
    Set config directory (default: ~/.config/bpkg)

--data DIR
    Set data directory (default: ~/.local/share/bpkg)

--prefix PREFIX
    Set installation prefix (default: ~/.local)

--registry URL
    Set package registry URL (default: https://repos.bpkg.io)

DESCRIPTION

bpkg is a minimalistic package manager designed specifically for Bash scripts and programs. It enables developers to install, update, and manage Bash packages from git repositories with ease. Unlike system-wide package managers like apt or yum, bpkg operates in user space, installing packages to ~/.local by default and linking executables into the PATH via symlinks.

Core workflow: Initialize a project with bpkg init, define dependencies in bpkg.json or package.json, then use bpkg install for resolution and linking. It supports global and local modes, dependency trees, and a central registry at repos.bpkg.io. Written entirely in Bash, it's portable, fast, and requires only git and Bash 4+. Ideal for scripting environments where full npm-like tooling is overkill.

bpkg emphasizes simplicity: no databases, just git clones and JSON metadata. Packages are versioned via git tags, with semantic versioning support.

CAVEATS

Not installed by default; requires manual setup or script. Depends on git. No binary packages—uses source clones. Limited ecosystem compared to npm. Potential symlink conflicts in PATH.

COMMON SUBCOMMANDS

init: Initialize bpkg project.
install [PKG]: Install/link packages.
uninstall PKG: Remove package.
link [PKG]: Link to PATH.
list: List installed packages.
upgrade: Update all.

CONFIGURATION

Uses bpkg.json or package.json for deps like "dependencies": {"pkg": "^1.0"}. Global config in ~/.config/bpkg.

HISTORY

Developed by Baptiste Wicht, first released in 2014. Evolved from need for Bash-specific packaging. Actively maintained on GitHub with focus on core simplicity; version 0.35+ added JSON deps and better linking.

SEE ALSO

git(1), npm(1)

Copied to clipboard