The Tailscale Browser Extension lets you access your tailnet resources using a browser extension, without necessarily installing Tailscale system-wide.
In particular, ...
Ideally it would work purely with WASM/WASI, but browser extensions
don't have enough APIs, so it regrettably has to use Native Messaging
(Chrome,
Firefox)
where a native binary (using
tsnet) runs as a child
process under the browser and communicates with the browser extension
with JSON messages back and forth.
The child process then runs an HTTP/SOCKS5 proxy on localhost:0
(with the kernel picking a random free port) and the browser extension
uses the browser proxy API to send all web traffic through the child's
proxy, which then sends it out over Tailscale, an exit node, or the
Internet as normal.
As of 2025-02-25, this is barely just starting to work and is not meant for end users yet. It's barely meant for developers at this point.
| Browser | OS | Status |
|---|---|---|
| Chrome | macOS | Works |
| Chrome | Linux | Works in theory, untested |
| Chrome | Windows | Registry install work not yet done |
| Firefox | macOS | Mostly works |
| Firefox | Linux | Mostly works in theory, untested |
| Firefox | Windows | Registry install work not yet done |
| Safari | * | not possible; no support for Native Messaging |
To log out, for now you need to remove & re-add the extension.
chrome://extensions) or Extensions... > Manage Extensions...go run ... command, which builds and registers the native messaging backend.about:debugging#/runtime/this-firefox).firefox/ subdirectory of this repo and select its manifest.json.about:addons), select the Tailscale extension, and under "Run in Private Windows" choose "Allow" if you want it to be active in private browsing.go run ... command, which builds and registers the native messaging backend.Temporary add-ons in Firefox are removed when the browser restarts, so you'll need to reload it from about:debugging each session.
Don't use it yet. It's too rough. See status above.
HTML
40.2%
JavaScript
33.7%
Go
26.2%
The Tailscale Browser Extension lets you access your tailnet resources using a browser extension, without necessarily installing Tailscale system-wide.
In particular, ...
Ideally it would work purely with WASM/WASI, but browser extensions
don't have enough APIs, so it regrettably has to use Native Messaging
(Chrome,
Firefox)
where a native binary (using
tsnet) runs as a child
process under the browser and communicates with the browser extension
with JSON messages back and forth.
The child process then runs an HTTP/SOCKS5 proxy on localhost:0
(with the kernel picking a random free port) and the browser extension
uses the browser proxy API to send all web traffic through the child's
proxy, which then sends it out over Tailscale, an exit node, or the
Internet as normal.
As of 2025-02-25, this is barely just starting to work and is not meant for end users yet. It's barely meant for developers at this point.
| Browser | OS | Status |
|---|---|---|
| Chrome | macOS | Works |
| Chrome | Linux | Works in theory, untested |
| Chrome | Windows | Registry install work not yet done |
| Firefox | macOS | Mostly works |
| Firefox | Linux | Mostly works in theory, untested |
| Firefox | Windows | Registry install work not yet done |
| Safari | * | not possible; no support for Native Messaging |
To log out, for now you need to remove & re-add the extension.
chrome://extensions) or Extensions... > Manage Extensions...go run ... command, which builds and registers the native messaging backend.about:debugging#/runtime/this-firefox).firefox/ subdirectory of this repo and select its manifest.json.about:addons), select the Tailscale extension, and under "Run in Private Windows" choose "Allow" if you want it to be active in private browsing.go run ... command, which builds and registers the native messaging backend.Temporary add-ons in Firefox are removed when the browser restarts, so you'll need to reload it from about:debugging each session.
Don't use it yet. It's too rough. See status above.
HTML
40.2%
JavaScript
33.7%
Go
26.2%