A fast, dependency-free version bumping tool similar to bumpp and version-bump-prompt, built for Bun.
- π Zero dependencies - Built using only Node.js built-ins and Bun tooling
- π¦ Semver compliant - Supports all semantic versioning release types
- π Monorepo support - Recursive bumping with
--recursive
flag - π― Git integration - Automatic commit, tag, and push
- β‘ Fast execution - Compiled binary for instant startup
- π Highly configurable - Config file and CLI options
- π¨ Interactive prompts - Choose version increment interactively
- π§ Custom commands - Execute scripts before git operations
# Install globally
bun install -g @stacksjs/bumpx
# Or use with bunx
bunx @stacksjs/bumpx patch
# Bump patch version (1.0.0 β 1.0.1)
bumpx patch
# Bump minor version (1.0.0 β 1.1.0)
bumpx minor
# Bump major version (1.0.0 β 2.0.0)
bumpx major
# Bump to specific version
bumpx 1.2.3
# Interactive version selection
bumpx prompt
# Bump to prerelease
bumpx prepatch --preid beta # 1.0.0 β 1.0.1-beta.0
bumpx preminor --preid alpha # 1.0.0 β 1.1.0-alpha.0
bumpx premajor --preid rc # 1.0.0 β 2.0.0-rc.0
# Increment prerelease
bumpx prerelease # 1.0.1-beta.0 β 1.0.1-beta.1
# Disable git operations
bumpx patch --no-commit --no-tag --no-push
# Custom commit message
bumpx patch --commit "chore: release v{version}"
# Custom tag name
bumpx patch --tag "v{version}"
# Sign commits and tags
bumpx patch --sign
# Skip git hooks
bumpx patch --no-verify
# Bump all package.json files recursively
bumpx patch --recursive
# Bump specific files
bumpx patch package.json packages/*/package.json
# Execute custom commands
bumpx patch --execute "bun run build" --execute "bun test"
# Install dependencies after bump
bumpx patch --install
# Skip confirmation prompts
bumpx patch --yes
# CI mode (non-interactive, quiet)
bumpx patch --ci
# Print recent commits
bumpx patch --print-commits
# Skip git status check
bumpx patch --no-git-check
bumpx is designed to work seamlessly in CI/CD environments:
# CI mode - automatically non-interactive
bumpx patch --ci
# Or with explicit flags
bumpx patch --yes --quiet
# Auto-detect CI environment
export CI=true
bumpx patch # Automatically enables CI mode
name: Release
on:
workflow_dispatch:
inputs:
release_type:
description: Release type
required: true
default: patch
type: choice
options: [patch, minor, major]
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0
- uses: oven-sh/setup-bun@v1
- name: Install dependencies
run: bun install
- name: Configure git
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
- name: Version bump and release
run: bunx bumpx ${{ github.event.inputs.release_type }} --ci
For more CI/CD examples and configurations, see CI.md.
Create a bumpx.config.ts
file in your project root:
import { defineConfig } from '@stacksjs/bumpx'
export default defineConfig({
// Git options
commit: true,
tag: true,
push: true,
sign: false,
// Execution options
install: false,
execute: ['bun run build', 'bun run test'],
// UI options
confirm: true,
quiet: false,
// Advanced options
recursive: false,
printCommits: true
})
You can also use JSON configuration in package.json
:
{
"bumpx": {
"commit": true,
"tag": true,
"push": true,
"execute": ["bun run build"]
}
}
Option | Alias | Description | Default |
---|---|---|---|
--preid |
ID for prerelease | ||
--all |
Include all files | false |
|
--no-git-check |
Skip git status check | ||
--commit [msg] |
-c |
Create git commit | true |
--no-commit |
Skip git commit | ||
--tag [name] |
-t |
Create git tag | true |
--no-tag |
Skip git tag | ||
--push |
-p |
Push to remote | true |
--no-push |
Skip git push | ||
--sign |
Sign commits and tags | false |
|
--install |
Run npm install | false |
|
--execute |
-x |
Execute command | |
--recursive |
-r |
Bump recursively | false |
--yes |
-y |
Skip confirmation | false |
--quiet |
-q |
Quiet mode | false |
--ci |
CI mode (sets --yes --quiet) | false |
|
--no-verify |
Skip git hooks | false |
|
--ignore-scripts |
Ignore npm scripts | false |
|
--current-version |
Override current version | ||
--print-commits |
Show recent commits | false |
You can also use bumpx programmatically:
import { versionBump } from '@stacksjs/bumpx'
await versionBump({
release: 'patch',
commit: true,
tag: true,
push: true,
progress: ({ event, newVersion }) => {
console.log(`${event}: ${newVersion}`)
}
})
Please see our releases page for information on changes.
Please see CONTRIBUTING for details.
For help or discussion:
βSoftware that is free, but hopes for a postcard.β We love receiving postcards from around the world showing where Stacks is being used! We showcase them on our website too.
Our address: Stacks.js, 12665 Village Ln #2306, Playa Vista, CA 90094, United States π
version-bump-prompt
- for the initial inspiration- Antony Fu - for creating bumpp
- Chris Breuer
- All Contributors
We would like to extend our thanks to the following sponsors for funding Stacks development. If you are interested in becoming a sponsor, please reach out to us.
The MIT License (MIT). Please see LICENSE for more information.
Made with π