bunvm
Version:
Bun Version Manager - Switch between different versions of Bun easily
225 lines (154 loc) • 5.81 kB
Markdown
# BVM - Bun Version Manager
**BVM** is a simple and fast CLI tool to manage multiple versions of [Bun](https://bun.sh), the all-in-one JavaScript runtime. Inspired by tools like `nvm` and `rvm`, BVM lets you easily install, switch, and manage different Bun versions.
## 🚀 Features
- 📥 Install any version of Bun
- 🔁 Switch between installed versions seamlessly
- 📦 Uninstall versions you no longer need
- 📃 List installed and remote Bun versions
- 🎯 Interactive prompts for `install`, `use`, and `uninstall` (powered by [Clack](https://github.com/natemoo-re/clack))
- 🔒 SHA-256 checksum verification before extracting downloads
- 🐧 Smart platform detection (Apple Silicon, Alpine/musl, AVX2 baseline, Rosetta)
- 🐚 Auto-configure shell environment (bash, zsh, fish)
- 🔔 Update notifications when a newer bvm release is available
- 🧠 Lightweight and fast – built with Node.js and TypeScript
- 🔗 Automatic symlink management for `bun` and `bunx`
- ✨ Command completions support
## 🖥️ Platform Support
| Platform | Status | Tested |
| -------- | ---------------- | ------------------------------- |
| Linux | ✅ Supported | ✅ Tested on Ubuntu/Debian |
| macOS | ✅ Supported | ✅ Tested on M2 (Apple Silicon) |
| Windows | ❌ Not supported | ❌ Not supported yet |
**Note**: BVM supports macOS and Linux only. Windows support is not implemented.
## 📦 Installation
### Install from npm
```bash
# With npm
npm install -g bunvm
# With pnpm (recommended)
pnpm add -g bunvm
# With yarn
yarn global add bunvm
# With Bun
bun add -g bunvm
```
After installation, you can use the `bvm` command from anywhere in your terminal.
### Install from source
```bash
git clone https://github.com/MrHacker26/bvm.git
cd bvm
pnpm install
pnpm build
pnpm link
```
## 🛠️ Usage
Once installed, you can use `bvm` from anywhere in your terminal:
```bash
bvm install [version] # Install a Bun version (alias: i)
bvm install latest # Install the latest Bun version
bvm use [version] # Switch to a Bun version (interactive if omitted)
bvm uninstall [version] # Remove an installed version (alias: u)
bvm current # Display currently activated version of Bun
bvm list # List installed Bun versions (alias: ls)
bvm remote # List available remote Bun versions (alias: r)
bvm upgrade # Show how to update bvm itself
bvm --help # Show help information
```
### Interactive mode
When run without a version argument in a terminal, `install`, `use`, and `uninstall` show interactive menus:
- **`bvm use`** — pick from installed versions (cursor starts on your current version)
- **`bvm install`** — pick from remote releases (latest is pre-selected; shows `installed` / `current` hints)
- **`bvm uninstall`** — pick a version to remove, then confirm (warns if it's your active version)
In non-interactive environments (CI, pipes), a version argument is required:
```bash
bvm use 1.2.5 # works in scripts
bvm use # errors in CI — version required
```
### Updating bvm
BVM checks for newer releases in the background (at most once a day) and shows a notification when an update is available. To see how to update:
```bash
bvm upgrade
```
This prints the update command for each package manager (npm, pnpm, yarn, bun) — it does not modify anything itself. To disable the update check, set `NO_UPDATE_NOTIFIER=1`.
## 📌 Examples
```bash
# Install the latest Bun version
bvm install latest
# Install a specific Bun version
bvm install 1.0.12
bvm i 1.0.12 # alias
# Interactive install — pick from remote versions
bvm install
# Switch to a specific version
bvm use 1.0.12
# Interactive switch — pick from installed versions
bvm use
# List all installed versions
bvm list
bvm ls # alias
# See what versions are available remotely
bvm remote
bvm r # alias
# Remove an old version (with confirmation prompt)
bvm uninstall 1.0.11
bvm u 1.0.11 # alias
# Interactive uninstall — pick then confirm
bvm uninstall
# See how to update bvm itself
bvm upgrade
```
## 🛠️ Development
### Prerequisites
- Node.js 20+
- pnpm (recommended) or npm
- [Bun](https://bun.sh) (for running tests)
### Setup
```bash
# Clone the repository
git clone https://github.com/MrHacker26/bvm.git
cd bvm
# Install dependencies
pnpm install
# Build the project
pnpm build
# Link for local testing
pnpm link
# Run in development mode
pnpm dev
```
### Scripts
- `pnpm build` - Build the project with tsup
- `pnpm dev` - Run in development mode with tsx
- `pnpm test` - Run unit tests with Bun
- `pnpm clean` - Clean build directory
- `pnpm start` - Run the built CLI
- `pnpm format` - Format code with Prettier
- `pnpm lint` - Lint code with ESLint
- `pnpm lint:fix` - Fix linting issues
## 🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request. Areas where help is needed:
- Testing on Linux (x64, ARM) and macOS (Intel)
- Bug fixes and improvements
- Documentation updates
## 📄 License
MIT License - see [LICENSE](LICENSE) file for details.
## 🙏 Acknowledgments
- Inspired by [nvm](https://github.com/nvm-sh/nvm) and [rvm](https://rvm.io/)
- Built for the amazing [Bun](https://bun.sh) runtime
- Thanks to the TypeScript and Node.js communities
## 📞 Support
If you encounter any issues or have questions:
1. Check the [Issues](https://github.com/MrHacker26/bvm/issues) page
2. Create a new issue with details about your environment
3. Include your platform, shell, and any error messages
**Happy Bunning! 🥖✨**