Installation
Banyan runs as three binaries — install only what each machine needs.
Platform support
| Platform | Architecture | Status |
|---|---|---|
| x86_64, ARM64 | ✅ Supported | |
| x86_64, ARM64 | ✅ Supported | |
| x86_64, ARM64 | ⚠️ Should work (not regularly tested) | |
| 🔜 Coming soon | ||
| ❌ Not planned |
Banyan requires Linux for its networking stack (WireGuard, iptables, containerd). The CLI can run on any machine that has a WireGuard tunnel to the engine — macOS CLI support is on the roadmap.
Quick install
The install script detects your OS, downloads the Banyan binaries, and installs all runtime dependencies.
Engine node (control plane — runs the scheduler, data store, and image registry):
curl -sSL https://raw.githubusercontent.com/fertile-org/banyan/main/install.sh | sudo bash -s -- --role engineAgent node (runs your containers):
curl -sSL https://raw.githubusercontent.com/fertile-org/banyan/main/install.sh | sudo bash -s -- --role agentBoth (single-machine setup — engine + agent + CLI on one server):
curl -sSL https://raw.githubusercontent.com/fertile-org/banyan/main/install.sh | sudo bashThe script installs:
| Role | What gets installed |
|---|---|
| Engine | banyan-engine, banyan-cli, etcd, wireguard-tools |
| Agent | banyan-agent, banyan-cli, containerd, nerdctl (>= 2.1.3), CNI plugins, wireguard-tools, BuildKit |
If nerdctl is already installed, the script checks the version and upgrades if it’s below 2.1.3 (required for healthcheck support).
Supported distros: Ubuntu, Debian, CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux. Architectures: x86_64, ARM64.
Install a specific version
curl -sSL https://raw.githubusercontent.com/fertile-org/banyan/main/install.sh | sudo bash -s -- --version v0.1.0Build from source
If you prefer to build yourself, you need Go 1.24+ on the build machine only. The compiled binaries have no Go dependency.
git clone https://github.com/fertile-org/banyan.gitcd banyan
# Build all binariescd cmd/banyan-engine && go build -o banyan-engine . && cd ../..cd cmd/banyan-agent && go build -o banyan-agent . && cd ../..cd cmd/banyan-cli && go build -o banyan-cli . && cd ../..
# Installsudo mv cmd/banyan-engine/banyan-engine /usr/local/bin/sudo mv cmd/banyan-agent/banyan-agent /usr/local/bin/sudo mv cmd/banyan-cli/banyan-cli /usr/local/bin/Cross-compile for remote servers:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o banyan-engine ./cmd/banyan-engine/CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o banyan-agent ./cmd/banyan-agent/CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o banyan-cli ./cmd/banyan-cli/
# Copy the right binaries to each serverscp banyan-engine banyan-cli user@engine-server:/usr/local/bin/scp banyan-agent banyan-cli user@worker-server:/usr/local/bin/When building from source, you still need runtime dependencies on each node:
- Engine node: etcd (Banyan can manage this for you — see Etcd below), wireguard-tools (for control tunnel).
- Agent nodes: containerd, nerdctl (>= 2.1.3), CNI plugins, wireguard-tools (for overlay and control tunnel), BuildKit. See the install script for exact commands.
You also need to create systemd service files manually (the install script does this automatically). See the install script for the service file contents, or run the engine/agent in the foreground with sudo banyan-engine start.
Etcd (state store)
Banyan uses etcd to store cluster state (deployments, container status, agent registrations). You choose how to run etcd during banyan-engine init:
| Mode | What happens | When to use |
|---|---|---|
| Managed (default) | Banyan starts and manages its own etcd process. Data stored in /var/lib/banyan/etcd/. | Recommended for most setups. Zero configuration. |
| External | You run etcd yourself, Banyan connects to it. | If you already have an etcd cluster, or need custom HA/backup. |
Managed etcd
Nothing to configure. Banyan starts etcd on 127.0.0.1:2379 when the engine starts and stops it when the engine stops. Data persists across restarts.
External etcd
If you choose “External” during banyan-engine init, the wizard asks for:
- Endpoints — comma-separated etcd addresses (e.g.
http://10.0.0.1:2379,http://10.0.0.2:2379) - Connection security — how to authenticate:
| Option | What you provide |
|---|---|
| None | Nothing — plain HTTP connection |
| Username & Password | Etcd username and password |
| TLS (CA certificate) | Path to the CA certificate file |
| mTLS (client certificates) | Paths to CA cert, client cert, and client key files |
You must install, run, and manage external etcd yourself. See the etcd documentation for setup instructions.
Setup order
The engine and agent require sudo for all commands — they manage network interfaces, iptables rules, and containers. The CLI only needs sudo for init (to create the WireGuard control tunnel); all other CLI commands run as your normal user.
Engine
sudo banyan-engine init # one-time: config dirs, keypair, etcd setupsudo systemctl enable --now banyan-engine # start + enable on bootAgent
sudo banyan-agent init # one-time: config dirs, keypairsudo systemctl enable --now banyan-agent # start + enable on bootCLI (any machine)
sudo banyan-cli init # one-time: generates keypair, creates WireGuard tunnelbanyan-cli up -f app.yaml # no sudo needed after initEach component generates a WireGuard keypair during init. Agent and CLI public keys must be copied to the engine’s whitelisted keys directory before they can connect (see Authentication for details).
The engine’s public key is displayed during banyan-engine init. Provide it during agent and CLI init to enable the encrypted WireGuard control tunnel (port 51821/UDP).
Verify
banyan-engine --help # On engine nodebanyan-agent --help # On agent nodesbanyan-cli --help # On any machineNext steps
Head to the Quickstart to deploy your first application.