A simple, fast version bumping tool for Zig projects. Updates the version in your build.zig.zon file with a single command.
- π¦ Zig-Native - Written in Zig, for Zig projects
- β‘ Fast - Zero dependencies, compiles to native code (~231KB binary)
- π― Simple - One command to bump your version
- π¨ Interactive - Beautiful prompts show all version options
- π³ Git Integration - Auto-commit, tag, and push (like bumpx!)
- β Tested - Comprehensive test suite
- π Safe - Validates versions and handles errors gracefully
- π Production Ready - Used to version itself
git clone https://github.com/stacksjs/zig-bump.git
cd zig-bump
zig build -Doptimize=ReleaseFast
sudo cp zig-out/bin/bump /usr/local/bin/bump --help
Note: The binary is called
bump, but the project is calledzig-bump.
Run bump without arguments to get an interactive prompt:
$ bump Current version: 1.0.0 Select version bump: 1) patch 1.0.0 β 1.0.1 2) minor 1.0.0 β 1.1.0 3) major 1.0.0 β 2.0.0 Enter selection (1-3): 1 β Successfully bumped version from 1.0.0 to 1.0.1
# Bump patch version (commits, tags, pushes by default) bump patch # Bump minor version bump minor # Bump major version bump major
By default, bump will:
- Update your
build.zig.zonversion - Create a git commit
- Create a git tag (e.g.,
v1.0.1) - Push to remote
# Full workflow (default behavior) bump patch # Updates, commits, tags, pushes # Explicit --all flag (same as default) bump minor --all # Skip push (just commit and tag locally) bump patch --no-push # Just update the file (no git operations) bump major --no-commit # Preview changes without applying bump minor --dry-run # Custom tag name and message bump patch --tag-name "release-1.0.1" --tag-message "Production release"
# Starting with version 0.1.0 $ cat build.zig.zon .{ .name = "my_project", .version = "0.1.0", } # Bump patch $ bump patch Current version: 0.1.0 New version: 0.1.1 β Successfully bumped version from 0.1.0 to 0.1.1 $ cat build.zig.zon .{ .name = "my_project", .version = "0.1.1", }
zig-bump:
- Reads your
build.zig.zonfile - Finds the
.version = "X.Y.Z"line - Increments the appropriate version number
- Writes the updated content back to the file
| Command | Description | Example |
|---|---|---|
major |
Breaking changes | 1.0.0 β 2.0.0 |
minor |
New features | 1.0.0 β 1.1.0 |
patch |
Bug fixes | 1.0.0 β 1.0.1 |
| Flag | Description | Default |
|---|---|---|
-a, --all |
Commit, tag, and push | true |
-c, --commit |
Create git commit | true |
--no-commit |
Skip git commit | - |
-t, --tag |
Create git tag | true |
--no-tag |
Skip git tag | - |
-p, --push |
Push to remote | true |
--no-push |
Skip push | - |
--sign |
Sign commits/tags with GPG | false |
--no-verify |
Skip git hooks | false |
--tag-name <name> |
Custom tag name | v{version} |
--tag-message <msg> |
Custom tag message | Release {tag} |
| Flag | Description |
|---|---|
--dry-run |
Preview changes without applying |
-y, --yes |
Skip confirmation prompts |
-h, --help |
Show help message |
# Debug build zig build # Release build zig build -Doptimize=ReleaseFast # Run directly zig build run -- patch
# Run all tests zig build test # Run with verbose output zig build test --summary all
zig-bump/
βββ build.zig # Build configuration
βββ build.zig.zon # Package manifest
βββ src/
β βββ main.zig # Main CLI implementation
β βββ test_version.zig # Unit tests
βββ README.md # This file
- Zig 0.15.0 or later
- A
build.zig.zonfile in the current directory
The project includes comprehensive tests:
$ zig build test --summary all Build Summary: 3/3 steps succeeded; 8/8 tests passed
Tests cover:
- β Major version bumping
- β Minor version bumping
- β Patch version bumping
- β Version parsing from different formats
- β Error handling for invalid versions
- β Error handling for invalid release types
# .github/workflows/release.yml name: Release on: push: branches: [main] jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Zig uses: goto-bus-stop/setup-zig@v2 - name: Install zig-bump run: | git clone https://github.com/stacksjs/zig-bump.git cd zig-bump && zig build -Doptimize=ReleaseFast sudo cp zig-out/bin/bump /usr/local/bin/ - name: Bump version run: bump patch --no-push - name: Push changes run: git push --follow-tags
# .git/hooks/pre-push #!/bin/bash echo "Bumping patch version..." bump patch --no-push
- Basic version bumping (major, minor, patch)
- Comprehensive test suite
- Self-hosted (zig-bump can bump itself)
- Git integration (auto-commit, tag, push)
- Dry-run mode
- Custom tag names and messages
- Sign commits and tags
- Skip git hooks
- Interactive prompts
- Prerelease versions (alpha, beta, rc)
- Custom version formats
- Workspace support (multiple packages)
- Configuration file support
| Tool | Language | Size | Speed | Zig-Native |
|---|---|---|---|---|
| zig-bump | Zig | ~100KB | β‘ | β |
| npm version | JavaScript | ~40MB | π | β |
| cargo-bump | Rust | ~2MB | π | β |
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License - see LICENSE file for details
- Built with Zig
- Inspired by bumpx
- Created by the Stacks team
- π Report a bug
- π‘ Request a feature
- π Read the docs
Made with π¦ by the Stacks team