| Crates.io | changepacks |
| lib.rs | changepacks |
| version | 0.2.16 |
| created_at | 2025-11-05 12:46:39.906145+00 |
| updated_at | 2026-01-13 06:15:49.569945+00 |
| description | A unified version management and changelog tool for multi-language projects |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1917946 |
| size | 90,590 |
A unified version management and changelog tool for multi-language monorepos.
changepacks is a Rust-powered CLI tool that brings consistent version management and changelog generation to polyglot projects. Inspired by changesets, it extends beyond JavaScript to natively support Node.js, Python, Rust, and Dart ecosystems with a single, fast, and reliable tool.
workspace:* dependencies in package.json when referenced packages are updatedupdateOn in config to automatically trigger updates for dependent packages (e.g., bridge packages)| Language | Package Manager | File | Status |
|---|---|---|---|
| Node.js | npm, pnpm, yarn | package.json |
โ Supported |
| Python | pip, uv | pyproject.toml |
โ Supported |
| Rust | Cargo | Cargo.toml |
โ Supported |
| Dart | pub | pubspec.yaml |
โ Supported |
Choose your preferred package manager:
winget install Changepacks.Changepacks
cargo install changepacks
# pip
pip install changepacks
# uv (recommended)
uv add changepacks
uvx changepacks
# npm
npm install @changepacks/cli
npx @changepacks/cli
# pnpm
pnpm install @changepacks/cli
pnpm dlx @changepacks/cli
# yarn
yarn install @changepacks/cli
# bun
bun install @changepacks/cli
bunx @changepacks/cli
git clone https://github.com/changepacks/changepacks.git
cd changepacks
cargo build --release
The binary will be available at target/release/changepacks (or target/release/changepacks.exe on Windows).
changepacks init
changepacks
This opens an interactive session to select changed projects and write release notes.
changepacks update
changepacks publish
# 1. Check which projects have changed
changepacks check --tree
# 2. Create a changepack log for your changes
changepacks
# โ Select projects (Major/Minor/Patch)
# โ Write changelog notes
# 3. Preview version updates
changepacks update --dry-run
# 4. Apply version updates
changepacks update
# 5. Test publishing
changepacks publish --dry-run
# 6. Publish to registries
changepacks publish
View all projects with change detection:
changepacks check # List all projects
changepacks check --tree # Show dependency tree
changepacks check --filter workspace # Only workspaces
changepacks check --filter package # Only packages
changepacks check --remote # Compare with remote branch
Apply version bumps from changepack logs:
changepacks update # Interactive confirmation
changepacks update --dry-run # Preview without applying
changepacks update --yes # Skip confirmation
Publish packages to their respective registries:
changepacks publish
Options:
changepacks publish --dry-run # Preview what would be published without actually publishing
changepacks publish --yes # Skip confirmation prompts
changepacks publish --format json # Output results in JSON format
changepacks publish --remote # Use remote branch for change detection
The publish command will:
Default publish commands by language:
npm publishuv publishcargo publishdart pub publishView the loaded changepacks config (from .changepacks/config.json):
changepacks config
This prints the merged and defaulted configuration, for example:
{
"ignore": [
"**/*",
"!crates/changepacks/Cargo.toml",
"!bridge/node/package.json",
"!bridge/python/pyproject.toml"
],
"baseBranch": "main",
"latestPackage": "crates/changepacks/Cargo.toml",
"publish": {
"node": "npm publish",
"python": "uv publish",
"rust": "cargo publish",
"dart": "dart pub publish",
"bridge/node/package.json": "npm publish --access public"
},
"updateOn": {
"crates/changepacks/Cargo.toml": ["bridge/node/package.json", "bridge/python/pyproject.toml"]
}
}
You can edit .changepacks/config.json to customize:
ignore) using glob patterns (default: empty).baseBranch, default: "main").latestPackage, optional).publish):
"node", "python", "rust", "dart"."bridge/node/package.json").updateOn):
"crates/*/Cargo.toml").If the config file is missing or empty, sensible defaults are used.
Running changepacks without arguments starts an interactive session to select projects and create a changepack log.
changepacks/
โโโ crates/
โ โโโ cli/ # CLI interface and commands
โ โโโ core/ # Core types and traits
โ โโโ node/ # Node.js project support
โ โโโ python/ # Python project support
โ โโโ rust/ # Rust project support
โ โโโ dart/ # Dart project support
โ โโโ utils/ # Utility functions
โโโ examples/ # Example projects for testing
โโโ Cargo.toml # Workspace configuration
โโโ README.md
package.json, Cargo.toml, pyproject.toml, pubspec.yaml files.changepacks/changepack_log_*.json with notes and timestamps{
"changes": {
"packages/foo/package.json": "Minor",
"crates/bar/Cargo.toml": "Patch"
},
"note": "Add new feature X and fix bug Y",
"date": "2025-12-19T10:27:00.000Z"
}
cargo build
cargo test
cargo clippy
Test with example projects:
cd examples/node/common
changepacks check
The project follows a trait-based, modular architecture:
crates/core) - Defines common traits (Package, Workspace, ProjectFinder) and typescrates/{node,python,rust,dart}) - Implement language-specific project detection and version managementcrates/cli) - Command-line interface with clap, colored output, and interactive promptscrates/utils) - Shared utilities: git operations, version calculation, dependency sorting, config managementbridge/{node,python}) - N-API and PyO3 bindings for package manager distributiongit checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)We're grateful to our sponsors for supporting changepacks development! If you're interested in sponsoring this project, please get in touch.
The following open-source projects and companies are using changepacks:
If you're using changepacks in your project, we'd love to feature you here! Please open a Pull Request to add your project or company.
This project is distributed under the MIT License. See the LICENSE file for more details.
If you encounter any issues or have feature requests, please let us know on the Issues page.