|
| 1 | +--- |
| 2 | +layout: docs |
| 3 | +title: wcode v0.4.2 |
| 4 | +description: wcode v0.4.2 release notes |
| 5 | +lang: en |
| 6 | +alternate: /zh/docs/releases/v0.4.2/ |
| 7 | +permalink: /docs/releases/v0.4.2/ |
| 8 | +--- |
| 9 | + |
| 10 | +# wcode v0.4.2 |
| 11 | + |
| 12 | +v0.4.2 reworks the managed-tunnel layer around one principle: tunnels must never get in the way of the runtime, and the runtime must never get in the way of the tunnels that are already up. All default providers now start concurrently in the background while the TUI renders immediately, every reachable tunnel is surfaced in the TUI and the setup hub, and a fourth provider — Tailscale Funnel — offers a stable public URL. Live links can additionally be delivered over local iMessage. |
| 13 | + |
| 14 | +## Non-blocking concurrent tunnels |
| 15 | + |
| 16 | +- The TUI no longer waits for a tunnel: the local server and monitor start immediately, the endpoint row shows `◌ CONNECTING` while providers are still connecting, and the first verified tunnel updates the MCP/setup URLs live. |
| 17 | +- All default providers (Cloudflare, localhost.run, Pinggy, and now Tailscale) start at the same time instead of one-by-one; the first to become reachable wins primary duty while the others keep running as alternates. |
| 18 | +- A provider that missed the first round (slow TLS issuance, flaky DNS) is retried every 15 seconds until it joins — no provider is abandoned after a single startup failure. |
| 19 | + |
| 20 | +## Tailscale Funnel provider |
| 21 | + |
| 22 | +- `--tunnel-provider tailscale` exposes the runtime through `tailscale funnel` at the machine's stable `https://<host>.<tailnet>.ts.net` URL, and it participates in the default `auto` rotation. |
| 23 | +- Funnel prerequisites are surfaced directly in diagnostics: missing CLI, not-logged-in, and the tailnet-not-enabled case each print actionable guidance — including Tailscale's one-click enable URL. |
| 24 | + |
| 25 | +## Per-tunnel resilience |
| 26 | + |
| 27 | +- A dead tunnel only takes itself down: wcode respawns that single provider after an exponential backoff (15s → 30s → 60s → 120s → 300s cap) while every other tunnel and the process itself keep running. Whole-process restarts on tunnel failure are gone. |
| 28 | +- Reconnected tunnels never hijack the primary endpoint from a live tunnel; if the primary dies, the next live tunnel is promoted without disturbing the rest. |
| 29 | +- The setup hub and TUI SETUP panel list every live tunnel with its provider and full MCP URL, and refresh as tunnels join or drop. |
| 30 | + |
| 31 | +## iMessage delivery |
| 32 | + |
| 33 | +- `--imessage-to <phone-or-email>` (macOS) sends each tunnel link the moment it becomes reachable — setup hub URL, MCP URL, Web UI URL with token, and the pairing code. |
| 34 | +- Messages are deduplicated per provider link: reconnecting with the same URL never spams, and a refreshed link (for example a new quick-tunnel host) is delivered as news. |
| 35 | + |
| 36 | +## Startup and shutdown behavior |
| 37 | + |
| 38 | +- The setup hub no longer auto-opens on startup; links remain visible in the TUI and setup page, and `--open` opts back in explicitly. |
| 39 | +- `SIGTERM` now exits gracefully like Ctrl-C — the terminal is restored, health loops stop, and every tunnel child is reaped, so external stops no longer leave orphaned `ssh`/`cloudflared` processes or a trashed terminal. |
| 40 | + |
| 41 | +## Upgrade |
| 42 | + |
| 43 | +```bash |
| 44 | +curl -fsSL https://raw.githubusercontent.com/francis-du/wcode/main/install.sh | sh |
| 45 | +``` |
| 46 | + |
| 47 | +No Design State, Workspace, or authorization migrations are required. Replace the binary and `wcode restart`; note that `--no-open` is now `--open` (auto-open is off by default), and only one wcode instance per machine can hold the Tailscale Funnel listener. |
0 commit comments