Versi is a native desktop app for managing Node.js versions.
It currently supports multiple backends (fnm, nvm, asdf, and volta) through a backend-agnostic architecture, so backend-specific behavior is isolated from the GUI and platform layers.
- Manage installed Node.js versions with install, uninstall, set-default, and use actions
- Backend selection and detection during onboarding (
fnm,nvm,asdf, andvolta) - Bulk operations: update majors, remove EOL versions, keep only latest per major
- Shell integration setup and verification
- Environment-aware management (native + WSL on Windows)
- Search, filtering, and grouped version lists
- Light/dark theme support with system preference integration
- System tray support with quick actions
- In-app update checks and platform-specific self-update flow
Download the latest release for your platform from the Releases page.
| Platform | Download |
|---|---|
| macOS (Apple Silicon) | versi-macos-arm64.zip |
| macOS (Intel) | versi-macos-x64.zip |
| Windows (x64) | versi-windows-x64.msi |
| Linux (x64) | versi-linux-x64.zip |
| Linux (ARM64) | versi-linux-arm64.zip |
- Download the appropriate
.zipfile for your Mac. - Extract the archive.
- Run the install script (recommended):
This removes quarantine attributes and moves
./install.sh
Versi.appto your Applications folder.
Manual install:
- Drag
Versi.appto/Applications. - If macOS blocks first launch:
Or right-click the app and choose "Open".
xattr -cr "/Applications/Versi.app"
- Download
versi-windows-x64.msi. - Run the installer.
- Launch Versi from the Start Menu.
- Download the appropriate
.zipfile. - Extract:
unzip versi-linux-x64.zip
- Move the binary to your
PATH:sudo mv versi /usr/local/bin/
- Optional desktop entry:
mv dev.almeidx.versi.desktop ~/.local/share/applications/
- Rust stable toolchain with Rust 2024 edition support
- Linux only: GTK/AppIndicator dev libraries
sudo apt-get install -y libgtk-3-dev libayatana-appindicator3-dev
You do not need fnm/nvm/asdf/volta installed to build. At runtime, Versi will detect configured backends and guide setup via onboarding.
git clone https://github.com/almeidx/versi.git
cd versi
cargo build -p versi --releaseBinary output:
target/release/versi
- First launch: select a backend and complete setup if needed.
- Main view: browse installed versions grouped by major.
- Install: use the install flow to fetch available versions.
- Set default / use: set shell default or activate a version.
- Uninstall: remove versions with confirmation for destructive actions.
- Bulk actions: update majors or clean old/EOL versions.
- Settings: theme, shell integration, launch options, logging.
versi/
├── crates/versi/ # Main Iced GUI app
├── crates/versi-backend/ # Backend traits + shared types
├── crates/versi-core/ # Shared logic (updates, schedule, metadata)
├── crates/versi-fnm/ # fnm backend implementation
├── crates/versi-nvm/ # nvm backend implementation
├── crates/versi-asdf/ # asdf backend implementation (nodejs plugin)
├── crates/versi-volta/ # Volta backend implementation
├── crates/versi-shell/ # Shell detection/config helpers
└── crates/versi-platform/ # Platform abstractions
# Run app
cargo run -p versi
# Build/check
cargo build --workspace
cargo check --workspace
# Tests
cargo test --workspace
# Format
cargo fmt --all
cargo fmt --all -- --check
# Lint (local strict mode used in CI)
cargo clippy --workspace --all-targets --all-features -- -D warningsVersi uses Iced with Elm-style state management:
State: data model (crates/versi/src/state/)Message: event types (crates/versi/src/message.rs)Update: message handling (crates/versi/src/app/)View: pure rendering (crates/versi/src/views/,crates/versi/src/widgets/)
Message dispatch is split into navigation, operations, settings, and system routing modules under crates/versi/src/app/update/.
For contributor and agent-facing details, see AGENTS.md.
- At least one backend available (
fnm,nvm,asdf, orvolta) for version management - Shell integration configured for full command-line behavior
- Fork and branch.
- Implement changes with tests.
- Run formatting, tests, and clippy.
- Open a PR.
GNU General Public License v3.0. See LICENSE.
