VibeTunnel vs Roost
VibeTunnel forwards one host's terminals into a browser in one command; Roost is a control plane over macOS and Linux hosts with a phone client built for a phone.
Pick Roost if
You want one control plane over macOS and Linux hosts, with a phone client designed for a phone rather than a shrunken dashboard.
Pick VibeTunnel if
You want one Mac's terminals in a browser with the least possible setup and don't care about phones or fleets.
Side by side
Scroll the table sideways on a phone.
| Feature | Roost | VibeTunnel |
|---|---|---|
| Host platforms | macOS and Linux (including Linux arm64) | macOS app (Apple Silicon only) or npm on Linux and headless hosts; no Windows (issue #252) |
| Client devices | any browser: desktop, iPhone, Android, iPad | any browser, plus an iOS app its README calls work in progress |
| Multi-machine fleet | Yes | No |
| Zero-install client | Yes | Yes |
| Persistent sessions | Yes | Partial |
| Any CLI in a real PTY | Yes | Yes |
| Mobile UX | full app, touch selection, key row, swipe deck | responsive web interface; the iOS app is declared work in progress and not recommended for production |
| Voice input | Yes | No |
| Agent state + push | Web Push + working/needs-input/done | Session activity indicators showing active or idle; no agent-state push |
| Self-hosted, no account | Yes | Yes |
Where they differ
-
Forwarding from one host versus a control plane over many. VibeTunnel’s server runs on one machine and publishes that machine’s terminals. Roost is a coordinator plus N workers across macOS and Linux, where the coordinator is also a worker;
roost add-machine --platform macos|linuxprints a one-shot enrollment command valid for 24 hours, and workers then dial outbound only and never expose an inbound port. The sidebar groups sessions by machine with per-machine CPU, memory, disk, and network tiles. -
Wrapping a command versus opening a terminal anywhere. With VibeTunnel a session exists because you prefixed a command with
vton that host. In Roost you browse folders on any worker from the browser and choose Open terminal here, so you can start a brand-new session on a machine you are nowhere near, from a phone. -
Byte stream versus authoritative cells. VibeTunnel proxies terminal output to a web terminal. Roost’s worker keeps the authoritative cell grid: it rebuilds at one agreed width on resize so history never re-reflows in the browser, stamps every frame with a monotonic
seqso a stale viewer receives exactly one authoritative full frame instead of duplicated or dropped output, fetches scrollback on demand, treats double-width CJK and emoji as one atomic two-column span, forwards mouse tracking only when the running program requested it, and runs mosh-style predictive echo above roughly 10 ms round-trip time, suppressed inside alt-screen TUIs. -
Responsive web versus a designed phone client. VibeTunnel gives you a responsive dashboard and an iOS app its own README calls work in progress and not recommended for production. Roost’s phone surface is the same full application: touch selection, an on-screen key row with a latching Ctrl, a swipeable deck of terminal cards, a soft keyboard that offsets content rather than reflowing the terminal, and PWA install. Tablets keep the desktop layout, panes, and shortcuts.
-
Activity indicators versus an agent-state model. VibeTunnel tells you a session is active or idle. Roost distinguishes working, needs input, and done, rolls those up per folder, and can deliver Web Push to a device after you grant permission, so you learn an agent is blocked without watching the tab. Ten CLIs get first-class status detection and anything else still runs fine, just unlabelled.
What you give up either way
- Choosing Roost costs you: asciinema recording of every session, Git follow mode that tracks your IDE’s branch switching, and a genuinely one-command setup on a Mac — you enroll workers into a coordinator instead.
- Choosing VibeTunnel costs you: Intel Macs for the menu-bar app, more than one host in one view, a phone-native client, voice dictation, and any agent-state model beyond active or idle.
Use VibeTunnel instead if…
You want one Mac’s terminals in a browser with the least possible setup and don’t care about phones or fleets. Installing a menu-bar app and typing vt in front of a command is a much shorter path than enrolling workers into a coordinator, and if the only thing you need is to glance at a long build or an agent from a laptop on the sofa, that is the right amount of machinery. The asciinema recordings are also a real feature if you want to replay what an agent did.
What VibeTunnel is
VibeTunnel turns any browser into your Mac terminal. It ships as a menu-bar app for Apple Silicon Macs, or as npm install -g vibetunnel for Linux, Docker, headless, and Intel-Mac hosts; Windows is not yet supported, tracked as issue #252. Once the server is running you open a dashboard on http://localhost:4020 and see every forwarded session — sessions exist because you ran vt pnpm run dev, vt claude, or vt --shell, which forwards that terminal into the browser and resolves your shell aliases on the way.
- Also ships: active-versus-idle session activity indicators, asciinema recording of every session for later playback, Git follow mode that tracks your IDE’s branch switching, Cmd/Ctrl+1–9 session switching, several authentication modes including localhost-only, and documented remote access over Tailscale or ngrok, all under the MIT licence.
Sources
- VibeTunnel (vibetunnel.sh)
- VibeTunnel source (github.com/amantus-ai/vibetunnel)
See the whole field on the alternatives hub, or read how Roost reaches a browser from many machines in fleet.