Installation
Install yeet locally and bootstrap catch on a remote host.
This is a personal homelab setup. The install flow assumes:
- A Linux host with systemd.
- SSH access to that host.
- You can reach the host from your laptop (LAN or tailnet). You do not need Tailscale installed locally; yeet embeds tsnet for RPC. See Tailscale.
- machine host (SSH): the host you connect to for
yeet init root@<host>. - catch host (Tailscale/tsnet): the hostname that
yeettargets for RPC (CATCH_HOST,--host,@<host>). After install, this is the tsnet name advertised by catch (defaultcatchor--tsnet-host). See Tailscale.
Release install (recommended):
curl -fsSL https://yeetrun.com/install.sh | sh
Nightly build:
curl -fsSL https://yeetrun.com/install.sh | sh -s -- --nightly
From the repo root (source build):
go build ./cmd/yeet
Or install globally:
go install ./cmd/yeet
yeet init installs catch on the remote host. When run from the repo it
builds locally and uploads the binary; when run from a released yeet it
downloads the latest stable release from GitHub before installing.
Use --nightly to install the nightly build instead of the latest stable
release.
yeet init root@<host>
Or use the mise task:
mise run init-host -- root@<host>
Notes:
- If you pass a non-root user, yeet will run the install with sudo on the remote.
- The catch service runs as root.
Yeet’s internal registry expects Docker to use the containerd snapshotter so
pushed images show up locally (no pull needed). Ensure the host has this in
/etc/docker/daemon.json:
{
"features": {
"containerd-snapshotter": true
}
}
Then restart Docker:
systemctl restart docker
If you plan to work on yeet from source, install the toolchain via mise:
curl https://mise.run | sh
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
Swap zsh for your shell (bash/fish/etc.) if needed.
From the repo root, install tools (Go 1.25.5):
mise install
If you want to install without yeet:
- Build
catchfor the target architecture. - Copy it to the host.
- Run
./catch installon the host.
Example (from the repo root):
GOOS=linux GOARCH=amd64 go build -o catch ./cmd/catch
scp catch root@<host>:
ssh root@<host> ./catch install
See the Catch CLI for detailed flags. Common settings:
--data-dirto control where state is stored on the host.--tsnet-hostfor RPC connectivity.
yeet stores prefs in ~/.yeet/prefs.json. You can override at runtime with:
CATCH_HOST=<host> yeet status