Skip to content

Repository files navigation

flue

Your terminal, as a browser tab. Reachable from any device you own.

CI status Latest release MIT license

flue.sh · design

Status: the local terminal works, and flue enable installs 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.

Install

brew install karnstack/tap/flue

or, without Homebrew:

curl -fsSL https://flue.sh/install.sh | sh

then:

flue enable

flue 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.

Why

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.

Shape

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

Reaching it from elsewhere

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.

Building from source

mise install   # go, node, pnpm — pinned in mise.toml
make build     # builds the web UI, embeds it, produces bin/flue
make test

License

MIT

About

Your terminal, as a browser tab. Reachable from any device you own.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages