AvalancheGo: Running and Building the Go Node for the Avalanche Network
Go implementation of an Avalanche node. If you plan to build AvalancheGo from source, you will also need the following software: Go version >= 1.25.10 gcc g++ Building From Source Clone The Repository Clone the AvalancheGo repository: This will clone and checkout the master branch.
At a glance
- What is it?
- AvalancheGo is the official Go implementation of an Avalanche node, offering a lightweight protocol with modest hardware requirements. This review covers its build, install, and operational details, plus the bootstrapping cost that new Mainnet nodes must plan for.
- Who is it for?
- Adopt AvalancheGo if you are running an Avalanche validator, building on the network, or need a local testnet via avalanche-cli; it is the reference client and the only node implementation described here. Do not adopt it if you need a lightweight client for constrained devices or want a quick bootstrap, since Mainnet bootstrapping takes days and requires 1 TiB storage and 16 GiB RAM.
- Can I use it commercially?
- Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.
Star history
- ava-labs/avalanchego2,360 ★ · +2
| Repository | 2026-08-04 | 2026-11-14 |
|---|---|---|
| ava-labs/avalanchego | 2.4k | 2.4k |
2 Stars in the last 102 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
What AvalancheGo Is and Who Needs It
AvalancheGo is the Go implementation of an Avalanche node, the software that connects to the Avalanche network, participates in consensus, and serves API calls. The README describes Avalanche as a blockchains platform with high throughput and fast transactions, and AvalancheGo is the reference client for that platform. Who is it for? Operators who want to run a Mainnet validator, developers who need a local testnet for smart contract work, and teams building tooling that must talk to an Avalanche node. It is not for casual users who just want to hold AVAX; you do not need to run a node to use the network. The project is written in Go and licensed under BSD-3-Clause, which is permissive and allows commercial use with attribution.
The Core Mechanism: Consensus, Bootstrapping, and API Serving
The README does not dive into the consensus algorithm, but it describes the node's lifecycle clearly. A new node must bootstrap, which means it catches up to the latest network state before it can participate in consensus or serve API calls. The documentation states that bootstrapping currently takes several days for a new node connected to Mainnet, and the bottleneck is typically database IO. Once bootstrapped, the node reports healthy via the Health API and starts serving. The node exposes JSON-RPC endpoints on port 9650 and the P2P port is 9651, as shown in the Docker run command. The underlying architecture is a Go binary that runs a full node, and it uses gRPC and protobuf for internal communication, as evidenced by the codegen scripts. The node's versioning is tied to the network version, so upgrading AvalancheGo often means upgrading the network's protocol, not just fixing bugs.
Building from Source: Commands and Dependencies
Building AvalancheGo from source requires Go version >= 1.25.10, plus gcc and g++. The README gives a straightforward sequence: clone the repository, then run ./scripts/run_task.sh build. The resulting binary lands in the build directory, and you run it with ./build/avalanchego. To connect to Fuji testnet, add the flag --network-id=fuji. For a local testnet, the avalanche-cli tool is the easiest path, with commands like avalanche network start and avalanche network status. If you prefer a container, you can build a Docker image with ./scripts/run_task.sh build-image, and then run it with a docker run command that maps ports 9650 and 9651. The build system is task-based, and the scripts directory contains wrappers for code generation as well, such as generate-protobuf.
Installation Routes: APT, Binary, and Docker
The README offers three installation methods besides building from source. For Ubuntu users, there is an APT repository: you add the signing key, create a sources list entry using the Ubuntu codename, then run sudo apt update and sudo apt install avalanchego. This is the most convenient for production servers on Ubuntu 22.04 or 24.04. Alternatively, you can download a prebuilt binary from the releases page and run it directly. Docker is another option, and the image is tagged with the shortened commit hash, which makes it easy to pin a specific build. The Docker command in the README runs the node in the foreground with -ti, which is fine for testing but not for production; you would want a detached or systemd-managed process. The APT route is likely the best for operators who want automatic updates, though the README does not mention how updates are handled.
Hardware Requirements: Modest but Not Trivial
The README claims the Avalanche protocol is lightweight, but the minimum recommended hardware for Mainnet is not small: 8 AWS vCPUs, 16 GiB RAM, and 1 TiB storage. That storage figure is for nodes running for normal periods; nodes with custom configurations or very long uptime may need more. The OS must be Ubuntu 22.04/24.04 or macOS >= 12, and you need a reliable IPv4 or IPv6 connection with an open public port. These requirements are for Mainnet; a Fuji testnet node might run on less, but the README does not give separate numbers. The bootstrapping bottleneck is database IO, so the README advises that a more powerful CPU or higher IOPS will reduce bootstrap time. This is a practical trade-off: you can spend on hardware to shorten the initial sync, but the ongoing requirements are what they are.
Bootstrapping: The Real Cost of Joining Mainnet
The most significant operational constraint is bootstrapping time. The README states it currently takes several days for a new Mainnet node, and the node will not report healthy until it is done. That means a new validator cannot participate in consensus or serve API calls for days after first launch. The README notes that improvements are under development, but as of the last push (July 2026), that is still the situation. This is a genuine failure mode: if you expect to spin up a node and have it earning staking rewards within hours, you will be disappointed. The workaround is to run a node on Fuji first or use a snapshot service, but the README does not mention snapshots. For a local testnet via avalanche-cli, bootstrapping is not an issue because you start from genesis. So the bootstrapping cost is specific to Mainnet and Fuji.
Versioning and Compatibility: A Double-Edged Sword
AvalancheGo's versioning follows the network, not the client. A version like v1.15.0-fuji indicates a production network version with a network upgrade count of 15, and the -fuji suffix marks it as a pre-release for the Fuji testnet. The README warns that exported Go interfaces may change in patch version updates, because the version denotes the network version, not API stability. That is a serious consideration for anyone building Go applications that import AvalancheGo modules. The project is organized as multiple Go modules that must be consumed together at matching versions, so you cannot mix and match versions of different modules. On the positive side, the APIs exposed when running the node maintain backwards compatibility unless explicitly deprecated. So if you only interact via HTTP APIs, you are safer than if you import the Go packages.
Code Generation and Maintenance Overhead
The repository uses code generation for protobuf and mocks, which is a maintenance cost for contributors. The README documents how to regenerate protobuf code with scripts/run_task.sh generate-protobuf, requiring buf v1.31.0, protoc-gen-go v1.33.0, and protoc-gen-go-grpc v1.3.0. You also need to add the GOPATH/bin to your PATH. This is not something a node operator needs to touch, but it matters if you fork the project or contribute. The existence of these scripts suggests the codebase is large and relies on generated code for efficiency. For a user, the maintenance cost is mainly keeping up with network upgrades; each new version like v1.14.2 (Granite.2) or v1.15.0-fuji (Helicon) likely requires a node restart and possibly a data migration, though the README does not specify. The license is BSD-3-Clause, which is permissive and does not impose copyleft obligations.
Editorial conclusion
Adopt AvalancheGo if you are running an Avalanche validator, building on the network, or need a local testnet via avalanche-cli; it is the reference client and the only node implementation described here. Do not adopt it if you need a lightweight client for constrained devices or want a quick bootstrap, since Mainnet bootstrapping takes days and requires 1 TiB storage and 16 GiB RAM. Before deploying, verify your Go toolchain version (>= 1.25.10), confirm your OS is Tier 1 or Tier 2, and check the latest release notes for the current network upgrade, since patch versions can change exported Go interfaces.
Frequently asked questions
What is avalanchego?
A node implementation for the Avalanche network, written in Go. It is distributed as a release binary, through a package repository for Debian-based systems, as a container image tagged by commit, or built from source with a shell task runner.
Does a patch release of avalanchego break library users?
It can. Because the version denotes the network version rather than the library's, exported interfaces from its packages are expected to be able to change in patch updates. The API the running node exposes does keep backwards compatibility, with deprecation announced before removal.
How do I read an avalanchego version number?
A zero major means a development network and a one major means production. The middle component counts network upgrades, and the last component counts client upgrades since the last network upgrade. The release titles carry a codename for the upgrade and a number after the dot for the patch.
Why does a new avalanchego node report unhealthy?
Because it has not finished bootstrapping. A node must catch up to the latest network state before it can take part in consensus or serve API calls, that takes several days for a new main network node, and it will not report healthy until it is done. The readme says the bottleneck is usually database input and output.
What hardware does an avalanchego main network node need?
The recommended minimum is eight virtual processors, sixteen gibibytes of memory and a terabyte of storage, on a supported Linux release or a recent macOS, with a reliable network connection and an open public port. The readme notes that long-running or custom-configured nodes may need more storage and that requirements may change as usage grows.
Which Go version does avalanchego need to build from source?
The readme and the module file both name one specific release, along with a C compiler and its C++ counterpart. The module file's own comment notes that the version must be updated across several files by hand, and the repository's short description still quotes an earlier patch release than the readme does.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/ava-labs-avalanchego)Star history chart for your README
[](https://hysenlabs.com/projects/ava-labs-avalanchego)Was this useful?