> ## Documentation Index
> Fetch the complete documentation index at: https://docs.krews.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Upgrade

> Upgrade an Avail full node (Mainnet or Turing) installed via pre-built binaries, Docker, or from source. Minimal, clear steps with verification and links to official docs.

<Note>
  This page covers **full/RPC nodes**. Validator operators should consider the **Slow & Safe Upgrade** (rolling replacement with key rotation) described in the official guide.
</Note>

## Before you start

* Check the latest version and [**release notes**](https://github.com/availproject/avail/releases/) on the GitHub Releases page.
* Plan a maintenance window if you expose RPC to users.
* The procedure is identical for **Mainnet** and **Turing**; your `--chain` flag selects the network.

## A) Upgrade — Pre-built binary

Replace the existing `avail-node` binary with the latest release, then restart the service.

```bash theme={null}
# 1) Stop the service
sudo systemctl stop avail.service

# 2) Download & extract the latest binary (choose the right file for your OS/arch)
cd /usr/local/bin
curl -L -O https://github.com/availproject/avail/releases/download/<LATEST-TAG>/<YOUR-SYSTEM-BIN>.tar.gz
tar -xzvf <YOUR-SYSTEM-BIN>.tar.gz

# 3) Replace the old binary (keep a backup just in case)
sudo mv avail-node avail-node.bak || true
sudo mv ./avail-node /usr/local/bin/avail-node
sudo chmod +x /usr/local/bin/avail-node

# 4) Start and follow logs
sudo systemctl start avail.service
journalctl -u avail.service -f -o cat
```

Some packages/bundles name the binary `data-avail`. If that's your case, replace `avail-node` in the commands above with `data-avail`.

## B) Upgrade — Docker

```bash theme={null}
# 1) Pull the new image tag
docker pull availj/avail:<LATEST-TAG>

# 2) Stop & remove the existing container (name it if you didn't before)
docker stop avail && docker rm avail

# 3) Start a new container with the same volumes/ports
docker run --name avail --restart=on-failure -d   -v /root/avail/node-data:/da/node-data   -p 9944:9944 -p 30333:30333   docker.io/availj/avail:<LATEST-TAG>   --chain mainnet -d ./output --name "<your-node-name>"
# For Turing, switch --chain to `turing` (or provide an explicit Turing chainspec path if needed)
```

## C) Upgrade — Build from source

```bash theme={null}
# 1) Ensure Rust toolchain is installed
curl https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env

# 2) Update sources and build
cd /opt/avail || git clone https://github.com/availproject/avail.git /opt/avail && cd /opt/avail
git fetch --tags
git checkout <LATEST-TAG>
cargo build --release --locked

# 3) Replace the running binary and restart
sudo systemctl stop avail.service
sudo install -m 0755 ./target/release/avail-node /usr/local/bin/avail-node
sudo systemctl start avail.service
journalctl -u avail.service -f -o cat
```

## Verify the upgrade

* **Logs** show the new version near startup (e.g., `version 2.x.x-<git-hash>`).
* **Telemetry**: find your node by `--name` on the correct network tab and confirm the reported version.
* **RPC** (if enabled): `curl http://127.0.0.1:9944 -H 'Content-Type: application/json' -d '{"id":1,"jsonrpc":"2.0","method":"system_version","params":[]}'`

<Note>
  After protocol/runtime upgrades, nodes running an **outdated client** may fail to sync or build blocks. Keep up with release announcements and upgrade promptly.
</Note>
