{"id":41121602,"url":"https://github.com/almeidx/versi","last_synced_at":"2026-03-07T01:16:33.776Z","repository":{"id":333895787,"uuid":"1139114387","full_name":"almeidx/versi","owner":"almeidx","description":"A native GUI application for managing Node.js versions","archived":false,"fork":false,"pushed_at":"2026-02-25T19:31:30.000Z","size":8277,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-25T22:13:23.440Z","etag":null,"topics":["desktop-app","fnm","gui","iced","linux","macos","node","nodejs","rust","version-manager","windows"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/almeidx.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-21T14:42:17.000Z","updated_at":"2026-02-25T19:23:23.000Z","dependencies_parsed_at":"2026-01-31T20:02:33.335Z","dependency_job_id":"901dd007-75b6-4a18-a21a-3ca810429475","html_url":"https://github.com/almeidx/versi","commit_stats":null,"previous_names":["almeidx/fnm-ui"],"tags_count":41,"template":false,"template_full_name":null,"purl":"pkg:github/almeidx/versi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/almeidx%2Fversi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/almeidx%2Fversi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/almeidx%2Fversi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/almeidx%2Fversi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/almeidx","download_url":"https://codeload.github.com/almeidx/versi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/almeidx%2Fversi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29955885,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-28T22:53:01.873Z","status":"ssl_error","status_checked_at":"2026-02-28T22:52:50.699Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["desktop-app","fnm","gui","iced","linux","macos","node","nodejs","rust","version-manager","windows"],"created_at":"2026-01-22T17:37:43.722Z","updated_at":"2026-03-01T00:01:01.706Z","avatar_url":"https://github.com/almeidx.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Versi\n\nVersi is a native desktop app for managing Node.js versions.\n\nIt 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.\n\n![Versi screenshot](assets/screenshot.png)\n\n## Features\n\n- Manage installed Node.js versions with install, uninstall, set-default, and use actions\n- Backend selection and detection during onboarding (`fnm`, `nvm`, `asdf`, and `volta`)\n- Bulk operations: update majors, remove EOL versions, keep only latest per major\n- Shell integration setup and verification\n- Environment-aware management (native + WSL on Windows)\n- Search, filtering, and grouped version lists\n- Light/dark theme support with system preference integration\n- System tray support with quick actions\n- In-app update checks and platform-specific self-update flow\n\n## Installation\n\n### Download Pre-built Binaries\n\nDownload the latest release for your platform from the [Releases](https://github.com/almeidx/versi/releases) page.\n\n| Platform | Download |\n|----------|----------|\n| macOS (Apple Silicon) | `versi-macos-arm64.zip` |\n| macOS (Intel) | `versi-macos-x64.zip` |\n| Windows (x64) | `versi-windows-x64.msi` |\n| Linux (x64) | `versi-linux-x64.zip` |\n| Linux (ARM64) | `versi-linux-arm64.zip` |\n\n### macOS Installation\n\n1. Download the appropriate `.zip` file for your Mac.\n2. Extract the archive.\n3. Run the install script (recommended):\n   ```bash\n   ./install.sh\n   ```\n   This removes quarantine attributes and moves `Versi.app` to your Applications folder.\n\nManual install:\n- Drag `Versi.app` to `/Applications`.\n- If macOS blocks first launch:\n  ```bash\n  xattr -cr \"/Applications/Versi.app\"\n  ```\n  Or right-click the app and choose \"Open\".\n\n### Windows Installation\n\n1. Download `versi-windows-x64.msi`.\n2. Run the installer.\n3. Launch Versi from the Start Menu.\n\n### Linux Installation\n\n1. Download the appropriate `.zip` file.\n2. Extract:\n   ```bash\n   unzip versi-linux-x64.zip\n   ```\n3. Move the binary to your `PATH`:\n   ```bash\n   sudo mv versi /usr/local/bin/\n   ```\n4. Optional desktop entry:\n   ```bash\n   mv dev.almeidx.versi.desktop ~/.local/share/applications/\n   ```\n\n## Build from Source\n\n### Prerequisites\n\n- [Rust](https://rustup.rs/) stable toolchain with Rust 2024 edition support\n- Linux only: GTK/AppIndicator dev libraries\n  ```bash\n  sudo apt-get install -y libgtk-3-dev libayatana-appindicator3-dev\n  ```\n\nYou do not need `fnm`/`nvm`/`asdf`/`volta` installed to build. At runtime, Versi will detect configured backends and guide setup via onboarding.\n\n### Build Steps\n\n```bash\ngit clone https://github.com/almeidx/versi.git\ncd versi\ncargo build -p versi --release\n```\n\nBinary output:\n- `target/release/versi`\n\n## Usage\n\n1. First launch: select a backend and complete setup if needed.\n2. Main view: browse installed versions grouped by major.\n3. Install: use the install flow to fetch available versions.\n4. Set default / use: set shell default or activate a version.\n5. Uninstall: remove versions with confirmation for destructive actions.\n6. Bulk actions: update majors or clean old/EOL versions.\n7. Settings: theme, shell integration, launch options, logging.\n\n## Development\n\n### Workspace Layout\n\n```\nversi/\n├── crates/versi/          # Main Iced GUI app\n├── crates/versi-backend/  # Backend traits + shared types\n├── crates/versi-core/     # Shared logic (updates, schedule, metadata)\n├── crates/versi-fnm/      # fnm backend implementation\n├── crates/versi-nvm/      # nvm backend implementation\n├── crates/versi-asdf/     # asdf backend implementation (nodejs plugin)\n├── crates/versi-volta/    # Volta backend implementation\n├── crates/versi-shell/    # Shell detection/config helpers\n└── crates/versi-platform/ # Platform abstractions\n```\n\n### Common Commands\n\n```bash\n# Run app\ncargo run -p versi\n\n# Build/check\ncargo build --workspace\ncargo check --workspace\n\n# Tests\ncargo test --workspace\n\n# Format\ncargo fmt --all\ncargo fmt --all -- --check\n\n# Lint (local strict mode used in CI)\ncargo clippy --workspace --all-targets --all-features -- -D warnings\n```\n\n### Architecture\n\nVersi uses [Iced](https://iced.rs/) with Elm-style state management:\n- `State`: data model (`crates/versi/src/state/`)\n- `Message`: event types (`crates/versi/src/message.rs`)\n- `Update`: message handling (`crates/versi/src/app/`)\n- `View`: pure rendering (`crates/versi/src/views/`, `crates/versi/src/widgets/`)\n\nMessage dispatch is split into navigation, operations, settings, and system routing modules under `crates/versi/src/app/update/`.\n\nFor contributor and agent-facing details, see [AGENTS.md](AGENTS.md).\n\n## Runtime Requirements\n\n- At least one backend available (`fnm`, `nvm`, `asdf`, or `volta`) for version management\n- Shell integration configured for full command-line behavior\n\n## Contributing\n\n1. Fork and branch.\n2. Implement changes with tests.\n3. Run formatting, tests, and clippy.\n4. Open a PR.\n\n## License\n\nGNU General Public License v3.0. See [LICENSE](LICENSE).\n\n## Acknowledgments\n\n- [fnm](https://github.com/Schniz/fnm)\n- [nvm](https://github.com/nvm-sh/nvm)\n- [Volta](https://github.com/volta-cli/volta)\n- [asdf](https://github.com/asdf-vm/asdf)\n- [Volta](https://github.com/volta-cli/volta)\n- [Iced](https://iced.rs/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falmeidx%2Fversi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falmeidx%2Fversi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falmeidx%2Fversi/lists"}