#cli #version-manager #installer #goup #go #tool #nvm

app goup

Like rustup or nvm but for Go: A simple version manager for Go written in Rust! 🚀

4 stable releases

1.3.0 Jul 26, 2023
1.2.0 May 6, 2023
1.1.0 May 5, 2023
1.0.0 May 5, 2023

#2 in #multi-platform

Download history 1/week @ 2023-11-11 5/week @ 2023-11-18 7/week @ 2023-11-25 17/week @ 2023-12-02 5/week @ 2023-12-16 9/week @ 2023-12-23 4/week @ 2023-12-30 1/week @ 2024-01-13 2/week @ 2024-01-20 12/week @ 2024-01-27 5/week @ 2024-02-03 20/week @ 2024-02-10 96/week @ 2024-02-17

134 downloads per month

MIT license

1.5K SLoC

🚀 goup

Simple version manager like rustup or nvm but for Go.


  • Install, manage and switch between different versions of the Go SDK.
  • Multi-platform compatible (Linux, macOS & Windows).
  • Tries to be as simple and "out-of-the-way" as possible.
  • Should be pretty fast.
  • Uses the precompiled binaries instead of compiling the sources locally.


Simply download the latest binaries from the Releases Page.

Alternatively, you can also install goup using cargo.

cargo install goup

If you want the latest unreleased version from the master branch, use the following command.

cargo install --git https://github.com/zekroTJA/goup

After that, run the following command to setup your environment to use goup to handle your Go versions.

goup env -p
source ~/.profile

This will add the required environment variables and $PATH extension to your .profile file.

Alternatively, if you just want to fiddle around with the tool, you can also just apply the environment to your current terminal session.

eval "$(goup env)"

How does it work?

goup uses the Go Repository on GitHub to query available versions using the git ls-remote --tags command (it is planned to add a fallback which uses the GitHub API when git is not available on the current system). This version list is then used to download selected versions from the official download server (https://go.dev/dl/). The downloaded SDKs are then directly un-zipped and un-packed while being downloaded into goup's worksapce directory, which is in the current users home directory at $HOME/.local/goup. All downloaded SDK versions are then stored in $HOME/.local/goup/installations. When selecting a specific installation version, the location in the installation directory is sym-linked to $HOME/.local/goup/current and the selected version is stored in the file $HOME/.local/goup/.current_version.

Using the command goup env -p, this will set the path of $HOME/.local/goup/current/go as your GOROOT environment variable and will add $HOME/.local/goup/current/go/bin to the beginning of your $PATH. This way, goup does not touch your local installation of Go and you cann roll back to before simply by removing the goup entries in your .profile and deleting the $HOME/.local/goup directory.


This tool is very much inspired by the both wonderful tools Schnitz' fnm and Rust's rustup.

© 2023 Ringo Hoffmann.
Covered by the MIT License.


~389K SLoC