Quick Start
Fast path from empty host to one disposable service.
This is the shortest useful path: install yeet, prepare Tailscale, install
catch, run a disposable container, and remove it.
You need:
- A Linux host with systemd and SSH access.
- Tailscale installed on your workstation and connected to the same tailnet.
- Tailscale admin access for first setup.
- A Tailscale OAuth client secret for catch.
- Docker on the host for the disposable container test.
Skip VMs for the first run. Containers prove the basic path with fewer host requirements.
Do this before yeet init.
Catch joins your tailnet as a tagged device, usually tag:catch. Your setup
user also needs the yeetrun.com/app/yeet permissions read, manage, and
ssh on TCP 41548.
The short version:
- Open Tailscale Setup.
- Create the tag policy and OAuth credential there.
- Keep the
tskey-client-...OAuth client secret ready. - Make sure your workstation is connected to the same tailnet.
Run this on your workstation:
curl -fsSL https://yeetrun.com/install.sh | sh
Check that the CLI is available:
yeet --help
For nightly builds, upgrades, host requirements, and non-default setup, use the Host Setup.
Run this from your workstation. The target is the SSH machine host:
yeet init root@<machine-host>
During first setup, paste the Tailscale OAuth client secret from step 1. If Docker is missing on a Debian/Ubuntu-style host, interactive init asks before installing it.
Use root@<machine-host> for SSH setup. After setup, normal commands target
the catch hostname on your tailnet.
If setup saved a default host, these should work:
yeet version
yeet status
The default catch hostname is catch. If you have more than one catch host, be
explicit:
yeet --host=<catch-host> status
Interactive yeet init offers to adopt ~/yeet-services so yeet can remember
where your yeet.toml lives. Keep that directory as the examples' working
directory, because relative payload paths stay simple there.
mkdir -p ~/yeet-services
cd ~/yeet-services
If you skip that prompt during setup, create or enter the workspace before your first deploy. This keeps local deploy state visible and easy to reuse.
Start with nginx. It is small, familiar, and easy to delete.
yeet run -p 18080:80 hello nginx:alpine
yeet status hello
yeet logs hello
Check the published port from the host:
yeet ssh -- curl -fsS http://127.0.0.1:18080/ >/dev/null
yeet rm --clean hello
--clean deletes service data and removes the disposable yeet.toml entry.
Read the prompt before accepting.
- New host: run First-Run Validation.
- Real service: read Service Workspace.
- Day-to-day deploys: open Workflows.
- Payload choices: start with Payload Guides.