███████╗ ██████╗ ███╗   ███╗
██╔════╝██╔════╝ ████╗ ████║
█████╗  ██║  ███╗██╔████╔██║
██╔══╝  ██║   ██║██║╚██╔╝██║
██║     ╚██████╔╝██║ ╚═╝ ██║
╚═╝      ╚═════╝ ╚═╝     ╚═╝

Fast Go Manager — install and switch Go versions in seconds.

curl -fsSL https://raw.githubusercontent.com/m-amaresh/fgm/main/scripts/install.sh | bash

Why fgm?

Everything you need, nothing you don't. A fast, no-nonsense Go version manager.

Blazing Fast

Downloads and extracts in seconds with a live progress bar.

Checksum Verified

Every download verified against official SHA-256 checksums.

No Shell Hooks

Shims resolve the active version at runtime. No eval, no hooks.

Multiple Versions

Install and keep as many Go versions side by side as you need.

Smart Caching

Release manifest cached locally for 15 minutes — stays fast offline.

Clean Shims

go and gofmt shims just work once ~/.fgm/bin is on your PATH.

Quick Start

Up and running in three commands.

fgm — bash

$ fgm install latest

Resolving go 1.26.1...

Downloading go1.26.1.linux-amd64.tar.gz...

  [██████████████████████████] 100%  63.7 MB / 63.7 MB

✓ Installed go 1.26.1

$ fgm use latest

✓ Using go 1.26.1

$ go version

go version go1.26.1 linux/amd64

$ fgm list

* 1.26.1 (current)

  1.25.8

How It Works

Five steps from zero to go version.

  1. 1

    Fetch the release manifest

    fgm downloads the official Go release list from go.dev/dl and caches it locally for 15 minutes so subsequent commands are instant.

  2. 2

    Download & verify

    The official tarball (or zip on Windows) is streamed to disk with a live progress bar, then verified against the manifest SHA-256 before extraction.

  3. 3

    Extract to ~/.fgm/versions/

    The toolchain is extracted into ~/.fgm/versions/<version>/. Multiple versions coexist without conflict.

  4. 4

    Write current-version & generate shims

    fgm use writes the chosen version to ~/.fgm/current-version and generates thin shims for go and gofmt in ~/.fgm/bin/.

  5. 5

    Shims resolve at runtime — no shell hooks

    Every time you invoke go, the shim reads current-version and delegates to the right binary. No eval, no source, no shell modifications.

Version Formats

fgm accepts flexible version strings so you never have to look up an exact release.

latest

Resolves to the most recent stable release, e.g. 1.26.1.

1.25

Resolves to the latest patch of Go 1.25, e.g. 1.25.8.

1.25.5

Pins to an exact release. Fails if 1.25.5 does not exist.

CLI Reference

A small, focused command set — nothing extraneous.

fgm install <version> alias: in

Download a Go version without activating it.

fgm use <version>

Install if needed, then activate. Updates shims instantly.

fgm uninstall <version> alias: un

Remove a previously installed version from disk.

fgm list alias: ls

List all locally installed versions, marking the current one.

fgm current

Print the currently active Go version.

--verbose, -v

Enable verbose diagnostic output. Shows manifest cache status, resolved archive details, and platform info.

Supported Platforms

Linux and Windows on amd64/arm64, plus macOS on Apple Silicon.

Platform amd64 arm64
Linux
macOS
Windows