zerv
Dynamic versioning from git. Every commit gets its version. Keep semantic-release on main. Let zerv prerelease every other branch.
Documentation: zerv.wisl.dev
Why zerv?
- Runs next to semantic-release - semantic-release decides releases on main; zerv versions every other build: any commit on any branch, even with uncommitted changes. No build is ever unversioned.
- Two modes -
zerv flowautomates pre-release management from Git branch patterns;zerv versiongives full manual control with schemas, overrides, and templates. - Any output format - SemVer, PEP440, CalVer, or Tera templates. Generate every format your pipelines need from a single ZERV RON payload.
See how zerv compares to semantic-release, setuptools-scm, dunamai, and git describe in Why zerv.
Installation
# Python (uv) - Recommended
uv tool install zerv-version
# Python (pip)
pip install zerv-version
# Rust (cargo)
cargo install zerv
# Installation script (latest, or `bash -s vX.X.X` for a specific version)
curl -sSL https://raw.githubusercontent.com/wislertt/zerv/main/scripts/install.sh | bash
# Pre-built binaries
# https://github.com/wislertt/zerv/releases
The PyPI wheel also exposes a Python binding: import zerv.
Quick Start
Version any Git state: zerv flow generates meaningful SemVer versions from any Git state, no manual configuration required.
# The current branch determines the output
zerv flow
# → 1.0.0 (on main branch with tag v1.0.0)
# → 1.0.1-rc.1.post.3 (on release branch with pre-release tag)
# → 1.0.1-beta.1.post.3+develop.3.gf297dd0 (on develop branch)
# → 1.0.1-alpha.59394.post.1+feature.new.auth.1.g4e9af24 (on feature branch)
# → 1.0.1-alpha.17015.post.1.dev.1764382150+feature.dirty.work.1.g54c499a (on dirty feature branch)
Fan one ZERV RON payload out to every format your pipelines need in the quickstart.
Documentation
Full documentation lives at zerv.wisl.dev:
- Why zerv - positioning vs semantic-release, setuptools-scm, dunamai,
git describe - Quickstart - one ZERV RON payload to every format
- Concepts - flow, version, schema system, formats and templates, config file
- CI/CD - GitHub Actions usage, coexisting with semantic-release
- CLI reference -
zerv version,zerv flow,zerv check,zerv render - Python binding -
import zervfrom the PyPI wheel - Troubleshooting
Development
git clone https://github.com/wislertt/zerv.git
cd zerv
uv tool install bakefile
bake setup-dev # Install pre-commit hooks and cargo-tarpaulin
bake test # Full test suite (Docker Git + Docker tests enabled)
bake test-rust # Rust tests only
bake test-python # Python binding tests only
bake lint # Formatting and clippy checks
bake docs # Local Mintlify docs dev server
The project uses uv and mise for dependency and tool management.
Contributing
Contributions are welcome. See CLAUDE.md for development guidelines, including project structure, testing conventions, and the development workflow.
Author
Wisaroot Lertthaweedech – wisl.dev
License
Licensed under the Apache License 2.0. See LICENSE for the full text.
The wordmark in docs/img/brand/ uses outlined paths from Sora, licensed under the SIL Open Font License 1.1.
Release files for zerv-version 0.8.30
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| zerv_version-0.8.30.tar.gz | 924.3 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| zerv_version-0.8.30-py3-none-win_arm64.whl | Python 3 | none | Windows ARM64 | Details |
| zerv_version-0.8.30-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| zerv_version-0.8.30-py3-none-musllinux_1_2_x86_64.whl | Python 3 | none | Linux musl 1.2+ x86-64 | Details |
| zerv_version-0.8.30-py3-none-musllinux_1_2_aarch64.whl | Python 3 | none | Linux musl 1.2+ ARM64 | Details |
| zerv_version-0.8.30-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| zerv_version-0.8.30-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| zerv_version-0.8.30-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| zerv_version-0.8.30-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
Total release size: 18.4 MB
Release files / zerv_version-0.8.30.tar.gz
| Download URL | zerv_version-0.8.30.tar.gz |
|---|---|
| Size | 924.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0bb003722a2cdb267e1476f00ef7ab33256dedb4ee9dceb42a8129bff7875111
|
|
BLAKE2b-256 checksum How to use checksums |
9b441b6686e25d1eff91dc89df5d09f674e7ea3bf0b18eb6cf0e0db2dc196043
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / zerv_version-0.8.30-py3-none-win_arm64.whl
| Download URL | zerv_version-0.8.30-py3-none-win_arm64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
2791965b6c08a2629ea7a6a911a45f3f17e01f400caabee2d8829a2527364a4a
|
|
BLAKE2b-256 checksum How to use checksums |
0ef99eef0a62da064bcdad6c5d78e33a261362bf9e2a7bbfb3a84c53179cc092
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / zerv_version-0.8.30-py3-none-win_amd64.whl
| Download URL | zerv_version-0.8.30-py3-none-win_amd64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5eadb08e6782d5f4e5d797e3bb02f41dcb01ccc9e3228d819538dbc2a8f2968f
|
|
BLAKE2b-256 checksum How to use checksums |
a2295a4681e726bff9a8b295d2d159730609bca11d2161972110426732bc2bce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / zerv_version-0.8.30-py3-none-musllinux_1_2_x86_64.whl
| Download URL | zerv_version-0.8.30-py3-none-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | Linux musl 1.2+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
9cc2d2a88e25c2396fa952a20b49c2403dffc7c84cde200bb8089da0f1fef364
|
|
BLAKE2b-256 checksum How to use checksums |
4f2104a3c91505e2b5f7cf9971e0c27b3f6ade3311434b5ef50751d9aef9695d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / zerv_version-0.8.30-py3-none-musllinux_1_2_aarch64.whl
| Download URL | zerv_version-0.8.30-py3-none-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | Linux musl 1.2+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
8598027f1c7d0b974bb93f417fa5623eac88bf847ae4c30a458733d6e4a62299
|
|
BLAKE2b-256 checksum How to use checksums |
b16d27db316b8f3037e0ebc6b4721f47e7a361f3a17b511d73fa8b150072d427
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / zerv_version-0.8.30-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | zerv_version-0.8.30-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.3 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
1acb15df245eeab3328f7044de56cc3a9f3f17280a22bf1a3c7defb29b6b14b3
|
|
BLAKE2b-256 checksum How to use checksums |
2266566f2699cf9c6bf21b37adb806e983f7ab0bfc7274d2133ce89a2ef7aaa5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / zerv_version-0.8.30-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | zerv_version-0.8.30-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
0709c6d1b068a034ab992dc16db87f9e70bfa76af2b93ecfb378910f207ea77f
|
|
BLAKE2b-256 checksum How to use checksums |
413a09cb33da81cb32627ba891ca9aa704f45b46ab3311a392bd0adc17e41cd9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / zerv_version-0.8.30-py3-none-macosx_11_0_arm64.whl
| Download URL | zerv_version-0.8.30-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ce1d3e63e6c22ee06a9a61f583982a357625bb33577902ec0cf67d97344ac1bc
|
|
BLAKE2b-256 checksum How to use checksums |
67dbb1829370b3bfe5f527b49a44aa33e877c54fb8ba96c45270247e1f21dc09
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / zerv_version-0.8.30-py3-none-macosx_10_12_x86_64.whl
| Download URL | zerv_version-0.8.30-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 2.2 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
b99a89b91e3aa2902f9e3ad8a4254d89e9d076125c09d179778db86cc6b68f39
|
|
BLAKE2b-256 checksum How to use checksums |
f9fea94a936228d6ddd29446266a9b3eb36f0f86cb661601fed9d7d29c1f5a3c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|