Your terminal, as a browser tab. Reachable from any device you own.
Status: the local terminal works, and
flue enableinstalls the login service. Remote transports and pairing are designed, not yet built. No release is tagged yet — the pipeline is live, and the first tag ships binaries, a brew formula, and the installer.
brew install karnstack/tap/flueor, without Homebrew:
curl -fsSL https://flue.sh/install.sh | shthen:
flue enableflue enable installs a login service, starts the daemon, and opens the UI.
Everything after that happens in the browser. macOS · Linux · WSL. One
static binary — no Node, no Python, no toolchain, ever.
Two apps get used all day: a terminal and a browser. Browsers have tab groups, tab search, splits, session restore, and URL addressing. Terminals have none of it and cannot join in.
flue makes a terminal session a browser tab, so it inherits all of that for free — and makes the same live session reachable from a phone, an iPad, or another laptop.
A small Go daemon owns the PTYs and their scrollback. A web app renders them. Closing the tab detaches; the build keeps running, and reattaching replays what you missed. Two devices on one session mirror live — typing on the phone shows up on the laptop, and the phone's 40 columns don't shrink the laptop.
The CLI stays at four commands on purpose:
flue enable # install the login service, start the daemon, open the UI
flue disable # remove it
flue status # version, daemon state, session count
flue open [path] # spawn a session here — handy from a shell prompt
Remote access is opt-in and provider-agnostic (designed, not yet built — see the status above). flue has no preferred option; the UI will order them by what you already have installed.
| provider | what it needs | intermediary |
|---|---|---|
| local | nothing, always on | none |
| Tailscale | Tailscale on each device | none, often direct peer-to-peer |
| Cloudflare | a Cloudflare account, free tier is enough | your own Worker, ciphertext only |
| Cloudflare + your domain | a domain on Cloudflare | Cloudflare |
Anything through an intermediary is end-to-end encrypted (Noise IK, the daemon's key pinned at pairing), so the relay forwards ciphertext and can never read your shell.
There is no hosted service. No flue account, no flue server, no billing. Every remote path runs on infrastructure you own. flue.sh is docs and downloads, never part of the data path.
mise install # go, node, pnpm — pinned in mise.toml
make build # builds the web UI, embeds it, produces bin/flue
make test