Back to updates
New releaseSep 2, 2026

bitbang-cli v0.5.0

Establish secure remote access to a machine with interactive shell, file transfer, and web proxy over end-to-end encrypted peer-to-peer WebRTC, using a browser or CLI without port forwarding or accounts.

Share

BitBang CLI

Tests License

bitbang is a single static binary remote-access multitool. From any browser: an interactive shell and file browser access to the remote machine. You can also reach web apps on that machine's network. Beyond the browser, it does TCP port forwarding, file copy, and terminal sharing. It requires no account or configuration -- it just works.

Install bitbang, run bitbang serve, and open the printed URL in a browser to get a shell, a file browser, and a proxy to the machine's network

On the machine you want to reach:

curl -sSfL bitba.ng/install | sh
bitbang serve

serve prints a URL. Open it in any browser and you get a terminal, a file browser, and a proxy to that machine's network -- or reach the same machine from another terminal with bitbang connect <url>, which adds port forwarding (-L) and file copy (bitbang cp). The connection is end-to-end encrypted and peer-to-peer; the bitba.ng server introduces the two ends, then steps aside.

bitbang is a single static Go binary. It's part of the BitBang project; this whitepaper covers the design in depth.

How it compares

ngrokTailscalebitbang
Setup before first useAccount + authtokenAccount + login on each deviceRun one command
To share something, you runa web server, plus ngroktheir client on both machinesbitbang serve
What a browser on the far end getsthe web server you were already runningnothing -- it needs their clienta terminal, a file browser, and web apps on the remote network
Data paththeir serversP2P (relay fallback)P2P (relay fallback)
End-to-end encryptedNot by defaultYesYes

Quickie recipes

Reach a service at home

Get on a machine

Share with someone else

Sharing entails simply giving someone a unique URL or QR code that gives them access. Permissions can be tailored and set to expire in minutes, hours, etc.

Development and devices

Techniques

Using bitbang

Every connection has two ends: a listener (bitbang serve, running on the machine being reached) and a connector (a browser, or the bitbang CLI, on the machine doing the reaching). One listener URL serves both kinds of connector.

The listener: bitbang serve

bitbang serve                    # everything: shell + proxy + files + forward
bitbang serve shell              # just a terminal
bitbang serve files ~/share      # just a directory (-files-upload to allow uploads)
bitbang serve proxy localhost:8080       # just one web app, straight at the URL
bitbang serve proxy a.lan:80,b.lan:80    # ...or several, chosen in the browser
bitbang serve forward 127.0.0.1:22       # just TCP, for `connect -L`

bitbang serve shell files ~/share proxy nas.lan:8096   # any combination

Each prints a QR code, URL and a pairing code. The mode picks what the listener can do at all: serve shell has no forwarding to grant, and a forward-only listener never starts a shell, so there is nothing to escalate to.

One default worth knowing: forwarding and the proxy reach any host:port the listener can reach, not only the one you had in mind, so a link handed out for a database also reaches the rest of that network. Naming targets after the word narrows it -- forward db.internal:5432 reaches that and nothing else.

Sharing a running session: bitbang share

serve shell starts a new shell. share publishes a tmux session that is already running:

bitbang share                    # publish the current tmux session
bitbang share --read-only        # publish without a control URL
bitbang share status|stop|rotate

Categories