{"id":27362545,"url":"https://github.com/tailscale/ts-browser-ext","last_synced_at":"2025-04-13T03:21:28.000Z","repository":{"id":279471499,"uuid":"930116351","full_name":"tailscale/ts-browser-ext","owner":"tailscale","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-07T20:05:19.000Z","size":106,"stargazers_count":53,"open_issues_count":2,"forks_count":1,"subscribers_count":19,"default_branch":"main","last_synced_at":"2025-04-11T16:18:52.942Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tailscale.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-10T05:09:14.000Z","updated_at":"2025-04-10T19:24:52.000Z","dependencies_parsed_at":"2025-02-25T19:32:45.386Z","dependency_job_id":null,"html_url":"https://github.com/tailscale/ts-browser-ext","commit_stats":null,"previous_names":["tailscale/ts-browser-ext"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailscale%2Fts-browser-ext","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailscale%2Fts-browser-ext/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailscale%2Fts-browser-ext/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailscale%2Fts-browser-ext/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tailscale","download_url":"https://codeload.github.com/tailscale/ts-browser-ext/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248658373,"owners_count":21140931,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-04-13T03:21:27.295Z","updated_at":"2025-04-13T03:21:27.941Z","avatar_url":"https://github.com/tailscale.png","language":"JavaScript","funding_links":[],"categories":["HTML"],"sub_categories":[],"readme":"# Tailscale Browser Extension (Experiment)\n\n[![status: experimental](https://img.shields.io/badge/status-experimental-blue)](https://tailscale.com/kb/1167/release-stages/#experimental)\n\nThe [Tailscale](https://tailscale.com/) Browser Extension lets you access your tailnet resources\nusing a browser extension, without necessarily installing Tailscale\nsystem-wide.\n\nIn particular, ...\n\n* you can **simultaneously use a different tailnet per browser profile**\n  * separate out your personal tailnet in its own browser profile\n* you don't need to be root/admin to install it\n* it doesn't interfere with your other OS VPN(s) and route tables and is purely scoped to one browser profile\n\n## How it works\n\nIdeally it would work purely with WASM/WASI, but browser extensions\ndon't have enough APIs, so it regrettably has to use Native Messaging\n([Chrome](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging),\n[Firefox](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging))\nwhere a native binary (using\n[`tsnet`](https://tailscale.com/kb/1244/tsnet)) runs as a child\nprocess under the browser and communicates with the browser extension\nwith JSON messages back and forth.\n\nThe child process then runs an HTTP/SOCKS5 proxy on `localhost:0`\n(with the kernel picking a random free port) and the browser extension\nuses the browser proxy API to send all web traffic through the child's\nproxy, which then sends it out over Tailscale, an exit node, or the\nInternet as normal.\n\n## Status\n\nAs of 2025-02-25, this is **barely just starting to work** and is not\nmeant for end users yet. It's barely meant for developers at this\npoint.\n\n| Browser    | OS | Status |\n| -------- | ------- | ---- |\n| Chrome  | macOS | Works |\n| Chrome  | Linux | Works in theory, untested |\n| Chrome  | Windows | Registry install work not yet done |\n| Firefox  | * | not yet, but started |\n| Safari  | * | not possible; no support for Native Messaging |\n\n## Developer instructions\n\n* use Chrome (for now)\n* Extensions...\n* Manage Extensions...\n* click \"Developer Mode\"\n* Load Unpacked...\n* navigate to directory where you cloned this repo...\n* install\n* pin the extension\n* click it\n* follow instructions to `go install` the backend part\n* click again, \"Log in\"\n\nTo log out, for now you need to remove \u0026 re-add the extension.\n\n## End user instructions\n\nDon't use it yet. It's too rough. See status above.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftailscale%2Fts-browser-ext","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftailscale%2Fts-browser-ext","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftailscale%2Fts-browser-ext/lists"}