Changelog
Release notes for users deciding whether to install or upgrade.
- Existing release installs can switch the local CLI and configured catch hosts
to the latest nightly build with
yeet upgrade --nightly; check and plan output identify the nightly target before anything changes. yeet docker outdatedandyeet docker update --outdatednow scan Compose services in parallel on each catch host, making multi-service update reviews much faster without changing which services are selected.- Catch installs and upgrades now report missing VM capabilities such as
/dev/kvmonce in the final warning summary instead of repeating the same warning during preflight and installation.
yeet upgrade --forceis safer to rerun when a catch reinstall is already in progress or has just been retried, avoiding rare failed reinstalls on the remote host.- Successful catch reinstalls keep the output focused on install progress and real host warnings, without reporting harmless transport noise.
yeet upgrade --forceno longer prints next-step setup guidance while it reinstalls catch hosts.
yeet upgrade --forceno longer opens service workspace setup during catch reinstalls, so scripted and project-wide upgrades can finish without extra prompts.- Catch upgrades keep each host's configured catch hostname in multi-host
workspaces, avoiding accidental Tailscale
-1names.
- Client preferences moved from
~/.yeet/prefs.jsonto$XDG_CONFIG_HOME/yeet/config.toml, andyeet configreplacesyeet prefs. Existing prefs migrate automatically on first run. - Service workspaces are now first-class:
yeet init --workspacecan create and register one, and interactive commands can adopt an existingyeet.tomlso future commands from other directories use the same saved project state. - Multi-host workspaces now behave correctly with
CATCH_HOST: project-wide commands still include every configured host, service-specific commands use the selected host, and saved service addresses are refreshed when they change.
yeet run --webnow preselects the same service-root and ZFS defaults asyeet run, including ZFS-backed services roots discovered from the selected catch host.- The web deploy form now treats
<service>as placeholder text until a service name is entered, keeps the service root synced as you type, and waits to validate storage fields until a service name exists.
- Project-wide
yeet statusis much faster on hosts with many services because catch now reads Docker, systemd, and VM status in bulk instead of probing each service one at a time, andyeet status <svc-a> <svc-b>can now show any mix of configured services, payload types, and VMs across hosts. yeet status --format=jsonand--format=json-prettynow work from a service workspace with multiple configured hosts, returning grouped status for every host in the project.
- New catch installs now ask where host data should live, default to
$HOME/yeet-data, and can use ZFS datasets for the catch data directory and default services root. yeet host setcan reconfigure an existing catch host's data directory or services root, migrate affected services, update matchingyeet.tomlentries, and keep ZFS-backed services under per-service child datasets.yeet infowithout a service now shows host storage paths, the catch service root, and service/VM inventory; service info is quieter, and catch isolates service resolver state more reliably.
- VM hosts on Debian and Ubuntu can now prepare
br0for--net=landuringyeet initor the first LAN VM deploy, so fresh hosts without an existing bridge can run LAN-connected VMs. - VM guest SSH now proxies through the same
yeetbinary you ran, so commands such as./yeet ssh <vm>do not fail when an olderyeetappears earlier onPATH.
- Catch now uses the
yeetrun.com/app/yeetTailscale app grant for access control. Before first setup or upgrading from an older catch, give setup adminsread,manage, andssh. - Missing-permission errors point to the
yeetrun.comAccess Grants guide and stay left-aligned in raw terminal shells such asyeet ssh. - The quick-start and installation docs now state the first-run grant requirement directly.
- Superseded by
v0.8.20; use the latest patch release for the corrected Access Grants guidance and terminal error formatting.
- Catch now requires the
yeetrun.com/app/yeetTailscale app grant for yeet access. Addread,manage, andsshto your admin grant before upgrading catch, or commands will be denied with a missing-permission message. read,manage, andsshare enforced independently across observation, deploy/remove/registry/setup, and catch-mediated shell access. VM guest SSH still uses normal guest SSH keys after yeet reads VM metadata.- The docs now include a dedicated Tailscale Access Grants page and clarify
that the local
yeetCLI needs workstation reachability to catch, usually through Tailscale installed on the workstation.
yeet rm --clean <svc>now removes service data and the localyeet.tomlentry in one command, while plain--yesstill does not delete data unless cleanup is explicit.yeet upgradeandyeet upgrade checknow include catch hosts from the currentyeet.tomlby default; use--host=<catch-host>when targeting one host.- The docs now recommend a service workspace for Compose files, env files, Dockerfiles, scripts, binaries, and the
yeet.tomlthat yeet reads and writes, and agent-oriented command docs now use--help-agent.
- Superseded by
v0.8.17; use the latest patch release for the cleanup, upgrade, and docs updates above.
yeet runand the web deploy form now reject invalid new service names before deployment, using a lowercase letter, number, and dash rule that works cleanly across catch, systemd, Docker Compose, and service-network DNS.
- Tailscale-enabled services no longer try to manage the host's DNS settings, preventing service sidecars from replacing the host
/etc/resolv.conf. - Upgrading catch repairs existing Tailscale service configs automatically, so already deployed services pick up the safer DNS behavior after restart.
yeet sshnow opens catch-host and regular service shells through catch over Tailscale, so shell access works afteryeet initwithout host SSH keys or a host password.- Service shells still start in their service data directory, VM targets still connect to the guest operating system, and host shells now start in the host user's home directory.
- Services using
--net=svc,tsnow keep Tailscale sidecars online on hosts where Docker manages firewall forwarding, soyeet ipreports both service-network and Tailscale addresses reliably. - Tailscale-enabled service deploys now wait for the Tailscale address before finishing, avoiding a race where the service was running but the Tailscale endpoint was not visible yet.
- Host setup is more resilient when an SSH status read stalls, and bundled container runtime dependencies include upstream security fixes.
yeet initnow checks VM host readiness before install and prompts for missing VM packages only on KVM/TUN-capable Debian/Ubuntu hosts.- First-run setup docs now clarify the Tailscale Trust Credentials OAuth flow and send missing VM tooling warnings to the correct host requirements section.
- VM hosts can now reclaim unused guest memory automatically with Firecracker ballooning;
yeet infoshows each VM's balloon mode and floor, andyeet vm memoryexposes the host policy. - VM balloon monitoring now closes Firecracker API connections promptly, keeping balloon stats reliable during continuous catch reconciliation.
yeet rm --clean-datanow asks before deleting service data, while--yesremains non-destructive unless data cleanup is explicitly requested.
- VM startup now waits until the guest is actually reachable, reducing first-boot and rebuild races.
- New NixOS VMs now seed
/etc/nixos/system.nixwith the VM service name, so the guest hostname matchesyeet run <name>and stays aligned afternixos-rebuild.
- VM guest kernel upgrades now work through normal guest workflows: update the package or rebuild NixOS, reboot, and start the VM again.
- Catalog VM image updates now select kernel-versioned images more consistently.
yeet ipandyeet infonow keep user-connectable endpoints separate from runtime-only network addresses, making service networking output easier to act on.
- VM deploys now use the same compact progress style as other
yeet runworkflows, with clearer waiting states and next-step commands. - Interactive VM image prompts now pause the progress display cleanly, so image downloads and setup confirmations are easier to read and answer.
- VMs with both service and LAN networking now prefer the LAN route for normal traffic while keeping the service network available for yeet management.
- Service-network workloads keep public internet access while yeet blocks direct private-network and host traffic by default.
- Service-network repair now preserves published ports and joined port mappings more reliably after catch or Docker network reconciliation.
yeet copynow accepts multiple sources, so shell-expanded globs and VM remote glob downloads work with the same last-argument-is-destination convention as scp and rsync.yeet run --webnow filters payload choices as you type and validates required Tailscale tags before deploy.- VM networking, SSH commands, and missing-service errors are more predictable.
- Compose deploys no longer require a local Docker daemon when no local images need pushing.
- Failed first-time web deploys now clean up staged placeholders, avoiding misleading "service already exists" errors on the next attempt.
- ZFS-backed Compose deploys now keep uploaded env files under the selected service root, and LAN plus Tailscale services start more reliably.
- VM service networking now routes traffic through the service bridge correctly, avoiding hangs when VMs reach yeet service-network apps by name or service IP.
- Tailscale-exposed services now keep responding after service-network repair, catch restarts, and host reboots.
- VM service networking now recovers after catch restarts, host reboots, and VM setting changes.
- VMs that shut themselves down from inside the guest are now detected as stopped more reliably, including Firecracker guests that report a halted state after
poweroff. yeet vm images catalognow shows clearer fields for choosing a VM payload.
- Added
yeet snapshotsrecovery commands for ZFS-backed services and VMs. yeet run --webnow discovers ZFS roots, fills predictable VM defaults, and keeps VM network choices valid.- Service-network deployments now get yeet-managed DNS, and hosts can pick up catalog VM image updates without a yeet binary release.
yeet run --webis now a workload-first builder for Compose apps, VMs, Dockerfiles, images, binaries, scripts, and scheduled jobs.- The web builder now keeps common network, storage, and ZFS choices visible while showing workload-specific fields.
yeet logs <service>now streams through a non-TTY path and handles client disconnects cleanly, avoiding inconsistent output and broken-pipe noise.
- VM setup now fails earlier for malformed network modes, unsupported VM networking, invalid VLAN values, and macvlan settings that are missing LAN networking.
- Failed VM provisioning cleans up new service roots more safely while preserving existing service-root data, including existing ZFS datasets.
yeet upgradehandles protected install directories more reliably, and VM image imports now validate required guest settings before use.
yeet upgradecan now replace a protected local yeet binary throughsudo, fixing self-upgrades from root-owned install directories.- VM creates and
yeet vm setnow reject unsupported VM network modes and LAN-only macvlan settings before provisioning or changing a service. - Imported local VM images now show default users in
yeet vm images catalog, track setting changes, and keep older image refs working.
yeet copynow syncs VM endpoints into the guest filesystem with rsync over the same direct or proxied SSH path asyeet ssh.- Official Ubuntu and NixOS VM images include rsync for VM guest file copy.
- Moved VM resource and networking changes to
yeet vm set, keepingyeet service setfocused on service roots, published ports, and snapshots.
- Added
yeet vm images catalogso catch hosts can list runnable VM payloads before downloading them.
- Release downloads now keep retrying transient GitHub edge failures long enough for freshly published assets to become available.
- Release downloads used by
yeet init --from-githubandyeet upgradenow retry transient GitHub fetch failures.
- VM image downloads now retry transient GitHub fetch failures and identify yeet as the downloader, making new image rollouts more reliable.
- VM SSH host-key repair now handles stale key backups more reliably.
- Fixed SSH access for fresh
vm://nixos/26.05VMs.
- Improved
vm://nixos/26.05SSH key permissions inside the guest.
- Fixed VM guest init so non-Ubuntu images can read their kernel command line before starting systemd.
- Fixed official VM image channels so Ubuntu and NixOS latest manifests resolve independently.
- Added
vm://nixos/26.05as an official Firecracker VM image alongside Ubuntu. yeet vm imagesnow lists, updates, and prunes official image families independently, including targeted updates such asyeet vm images update vm://nixos/26.05.- Custom VM images can now declare the guest user and startup model they need.
yeet ssh <vm>now chooses the VM SSH path from the VM network model:svcandsvc,lanVMs proxy through catch, while LAN-only VMs connect directly to their guest LAN IP.- Added
yeet ssh --force-proxy <vm>and stderr transport notices so VM SSH makes the selected path clear before opening the session.
- Fixed
yeet initand catch upgrades on hosts whose login shell is not POSIX-compatible, such as fish.
yeet upgrade --forcecan reinstall the selected public release for local yeet and catch hosts, and--version vX.Y.Zlets you target a specific release instead of the latest.
yeet initnow prompts for a Tailscale OAuth client secret for catch enrollment as a tagged host.- Catch saves that OAuth secret for later
--net=tsservices and gives policy guidance when it cannot assign a requested tag. - The Tailscale guide now gives first-time users a clear setup checklist for
tagOwners, OAuth owner tags, catch enrollment, and validation.
yeet upgrade checknow refreshes the latest release for explicit checks, keeps dev-build rows compact, and exits quietly when nothing needs an upgrade.- Catch now requires a tagged Tailscale identity and links to the Tailscale policy checklist when policy blocks a tag.
- Tailscale docs now explain interactive catch bootstrap, unattended auth keys, and the separate OAuth setup used for
--net=tsservice tags.
- Added
yeet upgrade checkandyeet upgradeso release installs can see and apply yeet/catch updates from verified GitHub assets. - Interactive commands now show a short update notice when a newer public release is available, without making normal commands depend on GitHub.
yeet initcan install VM host packages during Debian/Ubuntu host bootstrap.vm://ubuntu/26.04now defaults to the v13 image, with root filesystem features normalized for common LTS host tooling.- Fresh-host VM access is more reliable:
yeet ssh <vm>uses catch as the stable proxy hop, and catch warns when Tailscale assigns a different MagicDNS name such ascatch-1.
yeet initcan bootstrap fresh Docker hosts and prepares Docker for local image pushes.- Remote catch installs now surface Tailscale login progress and support unattended catch tsnet setup.
- VM host readiness checks no longer prompt to install VM packages on hosts that cannot run VMs because KVM, TUN/TAP, or host architecture support is missing.
vm://ubuntu/26.04now defaults to the v12 image, restoring Ubuntu-compatible package paths while keeping the Firecracker-tuned boot profile.- The official VM image build now validates key Ubuntu filesystem and networking-tool expectations before publishing.
vm://ubuntu/26.04now defaults to the v11 image with built-in IPv6 forwarding and IPv6 netfilter support for Tailscale exit nodes and subnet routers.
vm://ubuntu/26.04now defaults to the v10 image with conntrack mark support for guest-installed Tailscale subnet routers and exit nodes.
vm://ubuntu/26.04now defaults to the v9 image with built-in TUN, nftables, conntrack, and IPv4 NAT support for guest-installed router services such as Tailscale.
yeet.tomlsaves now omit inheritedsnapshot_keep_lastvalues instead of writing misleadingsnapshot_keep_last = 0entries.
- Added
yeet vm images prunewith dry-run and confirmation support, plus automatic safe cleanup of old unreferenced VM image versions after image refreshes. - Git hooks now run through the repo's mise toolchain so normal commits use the pinned Go and quality-tool versions.
yeet rm --clean-datanow removes the empty service root after deleting service data, including VM roots.
- Fresh Ubuntu VMs now boot with clean systemd status.
vm://ubuntu/26.04now defaults to the v8 image with a cleaner boot profile.
- Fixed stale VM image update prompts so VM deploys echo answers, accept Enter, and abort cleanly with
Ctrl-CorCtrl-\.
- Added custom VM image imports with
yeet vm images import, so you can run your own rootfs bundles asvm://<name>. - Improved VM guest shell defaults, including color-friendly bash setup and broader terminal support.
- Added VM resource updates for CPU, memory, disk growth, and networking.
- Tailscale-backed service updates no longer leave catch using excess CPU.
- Added dedicated manual pages for containers, binaries and scripts, VMs, cron jobs, and ZFS-backed service roots.
- Added first-class Ubuntu VM services with
yeet run <service> vm://ubuntu/26.04,yeet ssh,yeet vm console, and host-cached VM images. yeet initnow checks VM host readiness, including KVM, TUN/TAP, and required VM tooling, with interactive package install help on Debian/Ubuntu hosts.- Updated the website and manual to present VMs alongside containers, binaries, scripts, and cron jobs.
- Web deploy terminals now keep the local output stream alive long enough to show the successful completion state instead of reporting a lost stream.
yeet service set <service> -p ...now points users toyeet initwhen an older catch install does not yet support published-port changes.
yeet service set <service> -p ...can now update Docker published ports after a service exists, while--publish-resetmakes intentional replacements explicit.yeet run -p ...andyeet.tomlnow use the same persistent published-port model as follow-up service changes.yeet infonow shows saved published-port mappings for services that use service networking.
- The web deploy terminal now clips its header inside the rounded shell, so the deploy output panel corners render cleanly.
- Web deployments now render interactive TTY progress in the browser terminal instead of blank lines.
- The web deploy command preview now includes the selected catch host as
service@host, matching the CLI command you would run.
- Added
yeet run --web, a browser-based deployment form for creating new services from a local project checkout. - Web deployments now include host validation, project file picking, and the same first-run options as the CLI.
- The website homepage and manual now show the web deploy flow alongside CLI deployment examples.
- Moved binary services now keep reading the right env files after service-root migrations.
yeet run <svc> <payload>now reuses savedyeet.tomlrun options on existing services, so payload-only redeploys no longer require restating network flags.- ZFS-backed service roots now allow existing datasets and non-empty mountpoints with warnings, making service recreation safer when persistent data already exists.
- Added automatic ZFS snapshots before service redeploys, Docker image updates, and ZFS-backed service-root migrations.
- Added catch-wide snapshot defaults and per-service overrides with
yeet snapshots defaultsandyeet service set --snapshots=.... yeet service syncnow mirrors snapshot overrides intoyeet.tomlfor replay from another checkout.
- Added per-service roots so
yeet run --service-root=...can place a service's files under a custom root on the catch host. - Added ZFS-backed service roots with
--zfs, using a dataset name that catch accepts or creates and resolves to its mountpoint. - Added
yeet service setfor stopped-service reconfiguration, including service-root moves with--copyor empty-root changes with--empty.
yeet docker update <svc...>can update multiple compose services in one command, including mixedsvc@hosttargets.yeet docker update --outdatednow reports skipped scan issues instead of treating them as clean no-update results.- Docker image update checks now include registry and DNS error details.
--net=lanservices now keep separate DHCP leases, avoiding conflicts between services.- Remote sessions now close their stdin proxy reliably, preventing a rare hang during cleanup.
yeet docker outdatednow shows compact compose image update tables while keeping exact running and upstream digests available in JSON output.yeet docker update --outdatedupdates only compose services with available image updates and streams the normal per-service update output.- Docker image checks now compare running containers against upstream registry digests for more accurate update detection.
- Improved release reliability with broader automated checks across common service flows.
- Docker published ports on service networking now come back when catch starts.
- Docker container restarts now keep yeet port forwarding in sync through Docker's external-connectivity callbacks.
- Services that share networking no longer clear each other's published-port rules during container changes.
- Docker services keep running more reliably when catch or yeet networking refreshes.
- Per-service Tailscale networking recovers when LAN setup runs late during host boot.
- Docker services on yeet-managed networks now come back more reliably after host reboots.
catchnow starts Docker in the right order for yeet-managed networking.- Existing hosts update their catch and networking units during
yeet initwithout forcing service redeploys.
yeet logsnow streams Docker Compose output reliably in interactive terminals instead of truncating or varying between runs.yeet logs --no-ttyonce again prints Docker Compose service logs instead of returning a blank result.yeet initnow cross-buildscatchcorrectly for Linux hosts when run from a macOS checkout.
- Docker Compose updates and deploys once again stream remote progress in interactive terminals.
- Fixed Compose commands falling back to
catchlogs instead of staying attached to the yeet session TTY.
yeet rmno longer hangs after the second confirmation prompt in interactive terminals.- Fixed terminal cleanup after remote prompts so the local
yeet.tomlremoval prompt reads normally.
- Docker services on
svcnetworking now recover automatically after network repair. - Yeet now removes stale port-forwarding rules during container changes.
- Docker image deploys on
svcnow start more reliably.
- Fixed
--net=lanselecting the wrong parent interface on some hosts. lanservices now pick the host default-route interface more reliably unless--macvlan-parentis set.
yeet ts <svc> updatenow runs a yeet-managed update flow for per-service Tailscale.yeet ts <svc> updatenow asks for confirmation before upgrading.- Added pinned upgrades (
yeet ts <svc> update <version>) and explicit official passthrough (yeet ts <svc> -- update).
yeet run --env-fileuploads env files and detects changes on deploy.stage cleardiscards staged changes without applying them.yeet tailscale setupstreamlines Tailscale onboarding for hosts.
yeet initcan download and install catch from GitHub releases when using a released yeet (or--from-github).- Catch now reports a build/release version during init and info.
- Initial release.
July 10, 2026
v0.9.7
July 8, 2026
v0.9.6
v0.9.5
v0.9.4
July 7, 2026
v0.9.3
July 4, 2026
v0.9.2
v0.9.1
July 3, 2026
v0.9.0
June 28, 2026
v0.8.21
June 27, 2026
v0.8.20
v0.8.19
v0.8.18
v0.8.17
v0.8.16
v0.8.15
v0.8.14
June 26, 2026
v0.8.13
v0.8.12
June 24, 2026
v0.8.11
v0.8.10
June 22, 2026
v0.8.9
June 21, 2026
v0.8.8
v0.8.7
June 20, 2026
v0.8.6
v0.8.5
v0.8.4
June 19, 2026
v0.8.3
v0.8.2
v0.8.1
June 17, 2026
v0.8.0
June 12, 2026
v0.7.2
v0.7.1
June 10, 2026
v0.7.0
June 9, 2026
v0.6.16
v0.6.15
June 8, 2026
v0.6.14
v0.6.13
v0.6.12
v0.6.11
v0.6.10
v0.6.9
v0.6.8
v0.6.7
June 7, 2026
v0.6.6
v0.6.5
v0.6.4
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.13
v0.5.12
June 6, 2026
v0.5.11
v0.5.10
v0.5.9
v0.5.8
v0.5.7
v0.5.6
v0.5.5
v0.5.4
June 5, 2026
v0.5.3
v0.5.2
v0.5.1
June 4, 2026
v0.5.0
May 31, 2026
v0.4.4
v0.4.3
v0.4.2
v0.4.1
May 30, 2026
v0.4.0
May 28, 2026
v0.3.3
May 25, 2026
v0.3.2
v0.3.1
May 24, 2026
v0.3.0
May 19, 2026
v0.2.10
May 10, 2026
v0.2.9
v0.2.8
May 3, 2026
v0.2.7
May 2, 2026
v0.2.6
v0.2.5
v0.2.4
April 12, 2026
v0.2.3
March 29, 2026
v0.2.2
March 28, 2026
v0.2.1
v0.2.0
March 22, 2026
v0.1.4
February 19, 2026
v0.1.3
January 17, 2026
v0.1.2
January 12, 2026
v0.1.1
v0.1.0