Changelog

Release notes for users deciding whether to install or upgrade.

July 10, 2026

v0.9.7

  • 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 outdated and yeet docker update --outdated now 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/kvm once in the final warning summary instead of repeating the same warning during preflight and installation.

July 8, 2026

v0.9.6

  • yeet upgrade --force is 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.

v0.9.5

  • yeet upgrade --force no longer prints next-step setup guidance while it reinstalls catch hosts.

v0.9.4

  • yeet upgrade --force no 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 -1 names.

July 7, 2026

v0.9.3

  • Client preferences moved from ~/.yeet/prefs.json to $XDG_CONFIG_HOME/yeet/config.toml, and yeet config replaces yeet prefs. Existing prefs migrate automatically on first run.
  • Service workspaces are now first-class: yeet init --workspace can create and register one, and interactive commands can adopt an existing yeet.toml so 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.

July 4, 2026

v0.9.2

  • yeet run --web now preselects the same service-root and ZFS defaults as yeet 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.

v0.9.1

  • Project-wide yeet status is 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, and yeet status <svc-a> <svc-b> can now show any mix of configured services, payload types, and VMs across hosts.
  • yeet status --format=json and --format=json-pretty now work from a service workspace with multiple configured hosts, returning grouped status for every host in the project.

July 3, 2026

v0.9.0

  • 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 set can reconfigure an existing catch host's data directory or services root, migrate affected services, update matching yeet.toml entries, and keep ZFS-backed services under per-service child datasets.
  • yeet info without 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.

June 28, 2026

v0.8.21

  • VM hosts on Debian and Ubuntu can now prepare br0 for --net=lan during yeet init or 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 yeet binary you ran, so commands such as ./yeet ssh <vm> do not fail when an older yeet appears earlier on PATH.

June 27, 2026

v0.8.20

  • Catch now uses the yeetrun.com/app/yeet Tailscale app grant for access control. Before first setup or upgrading from an older catch, give setup admins read, manage, and ssh.
  • Missing-permission errors point to the yeetrun.com Access Grants guide and stay left-aligned in raw terminal shells such as yeet ssh.
  • The quick-start and installation docs now state the first-run grant requirement directly.

v0.8.19

  • Superseded by v0.8.20; use the latest patch release for the corrected Access Grants guidance and terminal error formatting.

v0.8.18

  • Catch now requires the yeetrun.com/app/yeet Tailscale app grant for yeet access. Add read, manage, and ssh to your admin grant before upgrading catch, or commands will be denied with a missing-permission message.
  • read, manage, and ssh are 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 yeet CLI needs workstation reachability to catch, usually through Tailscale installed on the workstation.

v0.8.17

  • yeet rm --clean <svc> now removes service data and the local yeet.toml entry in one command, while plain --yes still does not delete data unless cleanup is explicit.
  • yeet upgrade and yeet upgrade check now include catch hosts from the current yeet.toml by 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.toml that yeet reads and writes, and agent-oriented command docs now use --help-agent.

v0.8.16

  • Superseded by v0.8.17; use the latest patch release for the cleanup, upgrade, and docs updates above.

v0.8.15

  • yeet run and 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.

v0.8.14

  • 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.

June 26, 2026

v0.8.13

  • yeet ssh now opens catch-host and regular service shells through catch over Tailscale, so shell access works after yeet init without 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.

v0.8.12

  • Services using --net=svc,ts now keep Tailscale sidecars online on hosts where Docker manages firewall forwarding, so yeet ip reports 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.

June 24, 2026

v0.8.11

  • yeet init now 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.

v0.8.10

  • VM hosts can now reclaim unused guest memory automatically with Firecracker ballooning; yeet info shows each VM's balloon mode and floor, and yeet vm memory exposes the host policy.
  • VM balloon monitoring now closes Firecracker API connections promptly, keeping balloon stats reliable during continuous catch reconciliation.
  • yeet rm --clean-data now asks before deleting service data, while --yes remains non-destructive unless data cleanup is explicitly requested.

June 22, 2026

v0.8.9

  • VM startup now waits until the guest is actually reachable, reducing first-boot and rebuild races.

June 21, 2026

v0.8.8

  • New NixOS VMs now seed /etc/nixos/system.nix with the VM service name, so the guest hostname matches yeet run <name> and stays aligned after nixos-rebuild.

v0.8.7

  • 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 ip and yeet info now keep user-connectable endpoints separate from runtime-only network addresses, making service networking output easier to act on.

June 20, 2026

v0.8.6

  • VM deploys now use the same compact progress style as other yeet run workflows, 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.

v0.8.5

  • 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.

v0.8.4

  • yeet copy now 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 --web now filters payload choices as you type and validates required Tailscale tags before deploy.
  • VM networking, SSH commands, and missing-service errors are more predictable.

June 19, 2026

v0.8.3

  • 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.

v0.8.2

  • 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.

v0.8.1

  • 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 catalog now shows clearer fields for choosing a VM payload.

June 17, 2026

v0.8.0

  • Added yeet snapshots recovery commands for ZFS-backed services and VMs.
  • yeet run --web now 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.

June 12, 2026

v0.7.2

  • yeet run --web is 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.

v0.7.1

  • 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 upgrade handles protected install directories more reliably, and VM image imports now validate required guest settings before use.

June 10, 2026

v0.7.0

  • yeet upgrade can now replace a protected local yeet binary through sudo, fixing self-upgrades from root-owned install directories.
  • VM creates and yeet vm set now 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.

June 9, 2026

v0.6.16

  • yeet copy now syncs VM endpoints into the guest filesystem with rsync over the same direct or proxied SSH path as yeet ssh.
  • Official Ubuntu and NixOS VM images include rsync for VM guest file copy.

v0.6.15

  • Moved VM resource and networking changes to yeet vm set, keeping yeet service set focused on service roots, published ports, and snapshots.

June 8, 2026

v0.6.14

  • Added yeet vm images catalog so catch hosts can list runnable VM payloads before downloading them.

v0.6.13

  • Release downloads now keep retrying transient GitHub edge failures long enough for freshly published assets to become available.

v0.6.12

  • Release downloads used by yeet init --from-github and yeet upgrade now retry transient GitHub fetch failures.

v0.6.11

  • 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.

v0.6.10

  • Fixed SSH access for fresh vm://nixos/26.05 VMs.

v0.6.9

  • Improved vm://nixos/26.05 SSH key permissions inside the guest.

v0.6.8

  • Fixed VM guest init so non-Ubuntu images can read their kernel command line before starting systemd.

v0.6.7

  • Fixed official VM image channels so Ubuntu and NixOS latest manifests resolve independently.

June 7, 2026

v0.6.6

  • Added vm://nixos/26.05 as an official Firecracker VM image alongside Ubuntu.
  • yeet vm images now lists, updates, and prunes official image families independently, including targeted updates such as yeet vm images update vm://nixos/26.05.
  • Custom VM images can now declare the guest user and startup model they need.

v0.6.5

  • yeet ssh <vm> now chooses the VM SSH path from the VM network model: svc and svc,lan VMs 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.

v0.6.4

  • Fixed yeet init and catch upgrades on hosts whose login shell is not POSIX-compatible, such as fish.

v0.6.3

  • yeet upgrade --force can reinstall the selected public release for local yeet and catch hosts, and --version vX.Y.Z lets you target a specific release instead of the latest.

v0.6.2

  • yeet init now prompts for a Tailscale OAuth client secret for catch enrollment as a tagged host.
  • Catch saves that OAuth secret for later --net=ts services 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.

v0.6.1

  • yeet upgrade check now 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=ts service tags.

v0.6.0

  • Added yeet upgrade check and yeet upgrade so 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.

v0.5.13

  • yeet init can install VM host packages during Debian/Ubuntu host bootstrap.
  • vm://ubuntu/26.04 now 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 as catch-1.

v0.5.12

  • yeet init can 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.

June 6, 2026

v0.5.11

  • vm://ubuntu/26.04 now 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.

v0.5.10

  • vm://ubuntu/26.04 now defaults to the v11 image with built-in IPv6 forwarding and IPv6 netfilter support for Tailscale exit nodes and subnet routers.

v0.5.9

  • vm://ubuntu/26.04 now defaults to the v10 image with conntrack mark support for guest-installed Tailscale subnet routers and exit nodes.

v0.5.8

  • vm://ubuntu/26.04 now defaults to the v9 image with built-in TUN, nftables, conntrack, and IPv4 NAT support for guest-installed router services such as Tailscale.

v0.5.7

  • yeet.toml saves now omit inherited snapshot_keep_last values instead of writing misleading snapshot_keep_last = 0 entries.

v0.5.6

  • Added yeet vm images prune with 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.

v0.5.5

  • yeet rm --clean-data now removes the empty service root after deleting service data, including VM roots.

v0.5.4

  • Fresh Ubuntu VMs now boot with clean systemd status.
  • vm://ubuntu/26.04 now defaults to the v8 image with a cleaner boot profile.

June 5, 2026

v0.5.3

  • Fixed stale VM image update prompts so VM deploys echo answers, accept Enter, and abort cleanly with Ctrl-C or Ctrl-\.

v0.5.2

  • Added custom VM image imports with yeet vm images import, so you can run your own rootfs bundles as vm://<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.

v0.5.1

  • 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.

June 4, 2026

v0.5.0

  • 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 init now 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.

May 31, 2026

v0.4.4

  • 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 to yeet init when an older catch install does not yet support published-port changes.

v0.4.3

  • yeet service set <service> -p ... can now update Docker published ports after a service exists, while --publish-reset makes intentional replacements explicit.
  • yeet run -p ... and yeet.toml now use the same persistent published-port model as follow-up service changes.
  • yeet info now shows saved published-port mappings for services that use service networking.

v0.4.2

  • The web deploy terminal now clips its header inside the rounded shell, so the deploy output panel corners render cleanly.

v0.4.1

  • 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.

May 30, 2026

v0.4.0

  • 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.

May 28, 2026

v0.3.3

  • Moved binary services now keep reading the right env files after service-root migrations.

May 25, 2026

v0.3.2

  • yeet run <svc> <payload> now reuses saved yeet.toml run 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.

v0.3.1

  • 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 defaults and yeet service set --snapshots=....
  • yeet service sync now mirrors snapshot overrides into yeet.toml for replay from another checkout.

May 24, 2026

v0.3.0

  • 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 set for stopped-service reconfiguration, including service-root moves with --copy or empty-root changes with --empty.

May 19, 2026

v0.2.10

  • yeet docker update <svc...> can update multiple compose services in one command, including mixed svc@host targets.
  • yeet docker update --outdated now reports skipped scan issues instead of treating them as clean no-update results.
  • Docker image update checks now include registry and DNS error details.

May 10, 2026

v0.2.9

  • --net=lan services now keep separate DHCP leases, avoiding conflicts between services.
  • Remote sessions now close their stdin proxy reliably, preventing a rare hang during cleanup.

v0.2.8

  • yeet docker outdated now shows compact compose image update tables while keeping exact running and upstream digests available in JSON output.
  • yeet docker update --outdated updates 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.

May 3, 2026

v0.2.7

  • Improved release reliability with broader automated checks across common service flows.

May 2, 2026

v0.2.6

  • 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.

v0.2.5

  • 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.

v0.2.4

  • Docker services on yeet-managed networks now come back more reliably after host reboots.
  • catch now starts Docker in the right order for yeet-managed networking.
  • Existing hosts update their catch and networking units during yeet init without forcing service redeploys.

April 12, 2026

v0.2.3

  • yeet logs now streams Docker Compose output reliably in interactive terminals instead of truncating or varying between runs.
  • yeet logs --no-tty once again prints Docker Compose service logs instead of returning a blank result.
  • yeet init now cross-builds catch correctly for Linux hosts when run from a macOS checkout.

March 29, 2026

v0.2.2

  • Docker Compose updates and deploys once again stream remote progress in interactive terminals.
  • Fixed Compose commands falling back to catch logs instead of staying attached to the yeet session TTY.

March 28, 2026

v0.2.1

  • yeet rm no longer hangs after the second confirmation prompt in interactive terminals.
  • Fixed terminal cleanup after remote prompts so the local yeet.toml removal prompt reads normally.

v0.2.0

  • Docker services on svc networking now recover automatically after network repair.
  • Yeet now removes stale port-forwarding rules during container changes.
  • Docker image deploys on svc now start more reliably.

March 22, 2026

v0.1.4

  • Fixed --net=lan selecting the wrong parent interface on some hosts.
  • lan services now pick the host default-route interface more reliably unless --macvlan-parent is set.

February 19, 2026

v0.1.3

  • yeet ts <svc> update now runs a yeet-managed update flow for per-service Tailscale.
  • yeet ts <svc> update now asks for confirmation before upgrading.
  • Added pinned upgrades (yeet ts <svc> update <version>) and explicit official passthrough (yeet ts <svc> -- update).

January 17, 2026

v0.1.2

  • yeet run --env-file uploads env files and detects changes on deploy.
  • stage clear discards staged changes without applying them.
  • yeet tailscale setup streamlines Tailscale onboarding for hosts.

January 12, 2026

v0.1.1

  • yeet init can 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.

v0.1.0

  • Initial release.