Install Ironway Tower

Tower is one self-contained binary, built for macOS (arm64 and amd64) and Linux (amd64 and arm64). It needs no Ironway account to install, run or update.

One line

On any of those platforms:

curl -fsSL https://tower.ironway.work/install.sh | sh

The script detects your OS and architecture, downloads that platform’s build of the latest release from https://tower.ironway.work/releases/, refuses to install it if its SHA-256 differs from the release’s checksums.txt, and installs tower to $HOME/.local/bin with forge linked to it. Set TOWER_VERSION to install a specific release, or TOWER_INSTALL_DIR to install somewhere else:

curl -fsSL https://tower.ironway.work/install.sh | TOWER_INSTALL_DIR=/usr/local/bin sh

If $HOME/.local/bin is not on your PATH, add it to your shell profile: export PATH="$HOME/.local/bin:$PATH".

Manual download

Every release publishes one build per platform, named tower_<os>_<arch>, beside a checksums.txt listing each file’s SHA-256, under https://tower.ironway.work/releases/<version>/. releases/latest.json names the current version. Pick your platform (uname -sm tells you which: Darwin arm64, Darwin x86_64, Linux x86_64 or Linux aarch64), download its build and the checksums, and check one against the other before you run anything. macOS ships shasum -a 256; Linux ships sha256sum.

macOS arm64 Apple silicon — M1 and later

version="$(curl -fsSL https://tower.ironway.work/releases/latest.json | sed -n 's/.*"version": *"\([^"]*\)".*/\1/p')"
cd "$(mktemp -d)"
curl -fsSLO "https://tower.ironway.work/releases/$version/tower_darwin_arm64"
curl -fsSLO "https://tower.ironway.work/releases/$version/checksums.txt"
grep " tower_darwin_arm64$" checksums.txt | shasum -a 256 -c -
chmod +x tower_darwin_arm64
mkdir -p "$HOME/.local/bin"
mv tower_darwin_arm64 "$HOME/.local/bin/tower"
ln -sf tower "$HOME/.local/bin/forge"

shasum -a 256 -c must print tower_darwin_arm64: OK. If it prints FAILED, delete the file and do not run it.

macOS amd64 Intel Macs

version="$(curl -fsSL https://tower.ironway.work/releases/latest.json | sed -n 's/.*"version": *"\([^"]*\)".*/\1/p')"
cd "$(mktemp -d)"
curl -fsSLO "https://tower.ironway.work/releases/$version/tower_darwin_amd64"
curl -fsSLO "https://tower.ironway.work/releases/$version/checksums.txt"
grep " tower_darwin_amd64$" checksums.txt | shasum -a 256 -c -
chmod +x tower_darwin_amd64
mkdir -p "$HOME/.local/bin"
mv tower_darwin_amd64 "$HOME/.local/bin/tower"
ln -sf tower "$HOME/.local/bin/forge"

shasum -a 256 -c must print tower_darwin_amd64: OK. If it prints FAILED, delete the file and do not run it.

Linux amd64 x86-64

version="$(curl -fsSL https://tower.ironway.work/releases/latest.json | sed -n 's/.*"version": *"\([^"]*\)".*/\1/p')"
cd "$(mktemp -d)"
curl -fsSLO "https://tower.ironway.work/releases/$version/tower_linux_amd64"
curl -fsSLO "https://tower.ironway.work/releases/$version/checksums.txt"
grep " tower_linux_amd64$" checksums.txt | sha256sum -c -
chmod +x tower_linux_amd64
mkdir -p "$HOME/.local/bin"
mv tower_linux_amd64 "$HOME/.local/bin/tower"
ln -sf tower "$HOME/.local/bin/forge"

sha256sum -c must print tower_linux_amd64: OK. If it prints FAILED, delete the file and do not run it.

Linux arm64 AArch64 — Graviton, Ampere, Raspberry Pi 4 and later on a 64-bit OS

version="$(curl -fsSL https://tower.ironway.work/releases/latest.json | sed -n 's/.*"version": *"\([^"]*\)".*/\1/p')"
cd "$(mktemp -d)"
curl -fsSLO "https://tower.ironway.work/releases/$version/tower_linux_arm64"
curl -fsSLO "https://tower.ironway.work/releases/$version/checksums.txt"
grep " tower_linux_arm64$" checksums.txt | sha256sum -c -
chmod +x tower_linux_arm64
mkdir -p "$HOME/.local/bin"
mv tower_linux_arm64 "$HOME/.local/bin/tower"
ln -sf tower "$HOME/.local/bin/forge"

sha256sum -c must print tower_linux_arm64: OK. If it prints FAILED, delete the file and do not run it.

Check it works

tower version

prints one line: the build’s version and when it was built, for example switchyard-forge 7331bd7 (2026-10-27T18:04:11Z). The version is the short commit the release was built from, and it is the version listed on the downloads page. The line leads with switchyard-forge, the product’s name before it became Tower, on purpose: every installed copy verifies an update by that word, so it stays. forge version prints the same line — forge is the same binary under its older name.

Staying current

tower update

asks Tower’s release channel which build is current and, if it is newer than the one running, downloads your platform’s build, verifies its SHA-256 against the published checksum, runs it to confirm it reports the version it was published as, and only then replaces the installed binary. Any failure leaves the installed binary exactly as it was. It prints one line: current already at <version> when you already run the latest build, or updated <old> → <new>.

tower update -check

reports whether an update is available and changes nothing. To stay current without thinking about it, run tower update on a schedule — a cron entry or a launchd/systemd timer every fifteen minutes is what the Ironway fleet does.