Your work shouldn't stop when you close the laptop.
flue.sh · how it works · remote access · faq
Builds, agents and SSH sessions keep running on the machine that owns them, and you pick any of them back up on any device you have. A small Go daemon holds the shells and their scrollback; a web app renders them. Closing the tab detaches rather than kills, and reattaching replays what you missed.
- Sessions outlive the tab. Close it and the build keeps running.
- One list, every machine. Name, tag, pin, group and search the whole fleet from one place. Hover a session to see what it is actually doing.
- Reachable from anything you own. Pair a phone with a QR code. Two devices on one session mirror live, and the phone's 40 columns don't shrink the laptop.
- No hosted service. Remote access runs through a relay you deploy into your own Cloudflare account, end-to-end encrypted with the daemon's key pinned at pairing. flue.sh is a landing page, never part of the data path.
One static Go binary. macOS, Linux, WSL. No Node, no Python, no toolchain.
brew install karnstack/tap/flue # or: curl -fsSL https://flue.sh/install.sh | sh
flue enableflue enable installs a login service, starts the daemon, and opens the UI.
On Linux it also runs loginctl enable-linger, so the daemon — and your
sessions — survive your last logout; if lingering can't be enabled (some
containers refuse it), flue enable warns and names the command to run.
Everything after that happens in the browser.
flue enable # install the login service, start the daemon, open the UI
flue disable # remove it
flue status # daemon, login service, and session diagnostics
flue open [path] # spawn a session here, handy from a shell prompt
flue relay setup # deploy a relay to your own Cloudflare account
flue relay join # point this machine at a relay another machine deployed
flue relay status # show the configured relay
flue relay update # redeploy this release's relay; secret and pairings kept
flue relay address # repoint this machine at a custom domain on the same relay
flue serve # run the daemon in the foreground, no login service
flue update # download the newest release, swap this binary, restart the daemon
flue version # print the version (also --version, -v)
The daemon binds loopback and nothing else, so reaching it from elsewhere is opt-in and takes one command:
flue relay setup # machine 1: paste a Cloudflare token
flue relay join wss://<your-relay> --secret <...> # every other machineThat deploys a Worker and this web app into your own Cloudflare account, on the free tier. The same deploy is a card on the UI's Remote screen. One relay fronts every machine you own; pairing is per machine, once per browser, from the QR each machine shows.
What it deploys and what it costs is at flue.sh/docs/relay, with the operator-grade version in docs/RELAY.md. What a hostile relay origin could do despite the end-to-end encryption, which is the honest version because the browser loads its JavaScript from that origin, is in the FAQ and at length in docs/faq.md.
Pre-1.0, and honest about it. The local terminal, the login service, the fleet-wide sessions list and the end-to-end pairing all work. The Cloudflare relay is built and deployable but has not been through its manual end-to-end gate against a real account (docs/RELAY.md), so treat it as ready to try rather than ready to rely on. Known rough edges live in docs/FOLLOW-UPS.md.
flue is open source and always free.
mise install # go, node, pnpm, pinned in mise.toml
make build # web UI + relay Worker, embedded, into bin/flue
make testThe dev loop, the dev/prod split, and working on the relay are in
docs/DEVELOPMENT.md. The landing site is its own package
under site/, and make site-dev runs it.
