Skip to content

Devtree 0.3.0: Native Tailscale proxy setup, interactive wizard, and YAML configuration

Choose a tag to compare

@github-actions github-actions released this 09 Aug 18:02

Devtree now manages the entire Tailscale proxy lifecycle natively. A new interactive setup wizard writes declarative YAML configuration, and Devtree owns the shared tailscale serve TCP mapping — so you no longer need manual tailscale serve commands, shell environment variables, or wrapper scripts to share a Caddy-backed dev server across your tailnet.

  • Interactive setup wizard: devtree setup --interactive (or -i) detects your Tailscale machine name and IPv4 address, asks for the shared development domain and port, previews the wildcard DNS record, and writes the configuration files for you.
  • Declarative YAML configuration: Shared settings go in committed .devtree.yml; machine-specific values (like your developer namespace) go in git-ignored .devtree.local.yml. This replaces the DEVTREE_DEVELOPER_NAMESPACE and DEVTREE_PUBLIC_DOMAIN environment variables. The TypeScript routing.hostname callback remains as an advanced escape hatch.
  • Native Tailscale Serve lifecycle: setup and dev now create and reconcile the shared raw TCP Serve mapping idempotently. One mapping serves every worktree on a machine, and unrelated Serve routes are preserved. A new tailscale.serve_port option customizes the port.
  • devtree tailscale command: tailscale status inspects the live Serve route, ownership, and recorded worktrees; tailscale remove safely removes only the Devtree-owned mapping and refuses to touch external or conflicting routes.
  • Smarter tailscale.mode default: When left unset, proxy mode is now inferred automatically when using Caddy routing — no explicit mode: "proxy" needed.
  • Improved info and doctor: info prints the exact local and Tailscale application URLs, active Serve mapping, and ownership from persisted routing state. doctor validates Caddy, hostname resolution, Tailscale connectivity, and the Serve mapping, with --fix reconciling everything idempotently. Error messages are now actionable.
  • Prominent application URLs: setup and dev print the exact URL to open — including the Tailscale hostname and port — after startup.
  • No sslip.io dependency: The standard naming pattern works without sslip.io. A new routing.hostname_suffix option supports custom wildcard suffixes for non-standard setups.
  • Updated skills and examples: Both Devtree skills are updated to 0.3.0, and the caddy-hosts example now uses the interactive wizard and YAML config.