How-to
Task-oriented walkthroughs — pick the one that matches what you are trying to accomplish.
Task-oriented walkthroughs. Each how-to takes you from "I want X" to "X is running in production." Pick the one that matches what you're trying to accomplish; for the deeper "how does this work" content, see the Guide.
Hetzner cx23 quickstart with HTTPS
Empty Hetzner project → live HTTPS endpoint in ~90 seconds. €3.99/mo cx23, AGE-sealed deploy key, real Let's Encrypt cert via `<ip>.nip.io`.
TanStack Start + postgres from scratch
End-to-end: scaffold the app, add postgres via `yoink add`, deploy, verify with `yoink pf`.
Volume backups + postgres PITR
Nightly restic snapshots to any S3 (or self-hosted RustFS over Tailscale) plus postgres WAL archiving for point-in-time recovery.
Cloudflare Origin Certificates
Skip Let's Encrypt — 15-year cert + origin-pull mTLS that locks your origin to Cloudflare's edge.
Defense-in-depth web serving
No-license-fee hardened stack — Cloudflare Free + CrowdSec + Coraza + Origin Certs. The architecture, the gotchas, and the honest cost.
Caddy plugins (xcaddy, no registry)
`proxy.xcaddy.plugins:` builds a custom caddy on each host with rate-limit, l4, redis-storage, third-party DNS providers — no registry required.
Hosting gRPC backends
`upstream_h2c: true` for native gRPC (Tonic, grpc-go, grpc-java) — covers REST too.
Sealed secrets workflow
Generate the AGE keypair, seal values, consume them, multi-env, backup, and rotation — the operator-side commands.
Standalone (no-registry) deploys
`yoink up --build` ships images straight to each host over SSH. Layer-level dedup via the bundled unregistry transport; tarball fallback for air-gapped.
Adding a service via `yoink add`
Pick a vetted template (postgres, redis, meilisearch, …), answer prompts, get a sealed-secret-having service fragment in your repo.
Caddy snippets cookbook
Forward auth, basic auth, IP allowlist, custom headers, body-size limit, redirects, maintenance page — both Caddyfile and JSON forms.
AGE secrets in GitHub Actions
Generate a CI-only identity, paste into a GitHub secret, deploy. One env var.
Multi-host Let's Encrypt with Redis
Share ACME state across hosts to avoid Let's Encrypt rate limits.
Run staging alongside prod
Same hosts, two configs, namespaced services + networks.
Self-hosted registry on a yoink host
Run registry:2 as a yoink service, expose via tailnet, push to it.
Pre-merge dry-run on every PR
Sticky GitHub PR comment showing what `yoink up` would change before the merge.
Edit-save-deploy with --watch
`yoink up --watch --build` polls the config and redeploys on save. Hot-reload for prod-like dev without CI.
Edit container files with `yoink vscode`
VS Code in your browser, rooted in a running container's live filesystem. No operator install — just SSH and a browser.
Driving yoink from an AI agent
CLI and YAML-driven, deterministic exit codes, and patterns for driving yoink from Claude Code, Cursor, Aider, and GitHub Copilot Workspace.
Hetzner → HTTPS in ~90 seconds
Provision a Hetzner cx23, obtain a real Let's Encrypt cert via nip.io, and reach a live HTTPS endpoint in approximately 90 seconds.