No-nonsense version manager for Protocol Buffers (protoc). Clone and run — works on macOS and Linux. Requires Python 3.11+.
git clone https://github.com/tobybessant/protov.git ~/.protoc
Add to your shell profile:
export PATH="$HOME/.protoc/bin:$PATH"That's it. protoc now routes through protov's shim.
protov add 28.3 # download + switch to a version
protov add 28.3 --pick # choose a specific platform zip
protov ls # list installed versions
protov use 28.3 # switch active version
protov rm 25.9 # remove a version
Versions are stored in ~/.protoc/versions/. The active version is a symlink at ~/.protoc/current.
Protov downloads prebuilt protoc binaries from the protocolbuffers/protobuf GitHub releases. Each version is extracted into ~/.protoc/versions/<version>/, and the active version is a symlink at ~/.protoc/current. A small bash shim at ~/.protoc/bin/protoc forwards all calls to the active version's binary.
Platform is auto-detected from uname. If detection is ambiguous, an interactive picker lets you choose from the available downloads.
Set PROTOV_HOME to override the default ~/.protoc root.
Optional. Protov works out of the box without a config file.
protov config # show current config
protov config init # create default config file
protov config set <k> <v> # update a setting
Config is stored at ~/.config/protov/config (respects XDG_CONFIG_HOME).
| Setting | Values | Default | Description |
|---|---|---|---|
theme |
dark, light |
dark |
Light mode disables dim text for readability on light terminals |
No build step, no venv — just Python 3.11+ and uv.
uvx ruff check . # lint
uvx ruff format --check . # check formatting
uv run --with pytest pytest test_protov.py -v # run tests