https://github.com/voidd0/tabsnap
One-click browser extension that captures every open tab as plain text, markdown, JSON, or a readme file. Free, MIT, zero telemetry.
https://github.com/voidd0/tabsnap
browser-extension browser-tools chrome-extension edge-extension firefox-addon free javascript lightweight manifest-v3 markdown mit-license open-source privacy-focused productivity session-restore tab-management tab-saver tabs voiddo zero-telemetry
Last synced: 6 days ago
JSON representation
One-click browser extension that captures every open tab as plain text, markdown, JSON, or a readme file. Free, MIT, zero telemetry.
- Host: GitHub
- URL: https://github.com/voidd0/tabsnap
- Owner: voidd0
- License: mit
- Created: 2026-04-28T18:34:12.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-19T01:31:41.000Z (about 1 month ago)
- Last Synced: 2026-05-19T02:22:49.629Z (about 1 month ago)
- Topics: browser-extension, browser-tools, chrome-extension, edge-extension, firefox-addon, free, javascript, lightweight, manifest-v3, markdown, mit-license, open-source, privacy-focused, productivity, session-restore, tab-management, tab-saver, tabs, voiddo, zero-telemetry
- Language: JavaScript
- Homepage: https://extensions.voiddo.com/tabsnap/
- Size: 163 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# tabsnap
[](https://www.npmjs.com/package/@v0idd0/tabsnap)
[](https://www.npmjs.com/package/@v0idd0/tabsnap)
[](LICENSE)
[](https://developer.chrome.com/docs/extensions/mv3/intro/)
[](https://voiddo.com/)
> Capture every open tab as a browser-session export: plain text, markdown, JSON, or a readme file.
> One click in the browser. One pipe in the terminal.
> Free, MIT, zero telemetry. Optional tracking-param stripping for cleaner exports.
[Browser-extension landing](https://extensions.voiddo.com/tabsnap/) ·
[CLI landing](https://tools.voiddo.com/tabsnap/) ·
[npm](https://www.npmjs.com/package/@v0idd0/tabsnap) ·
[Privacy](https://extensions.voiddo.com/tabsnap/privacy/) ·
[Compare](https://extensions.voiddo.com/compare/tab-saver/)
If you think in tab backups, session exports, or a OneTab / Session Buddy alternative that still gives you a clean text artifact, tabsnap is the text-first path.
---
## Two faces, one engine
The same `snapshot.js` formatters drive both the **browser extension** popup
and the **`@v0idd0/tabsnap` CLI** on npm. Output bytes are identical for the
same inputs.
### As a browser extension
Click the toolbar icon → tabsnap reads the title and URL of every tab you have
open and renders them in the popup as one of four formats:
- **markdown** — nested list grouped by window, hostnames as section headers
- **plain** — one tab per line, title + URL
- **json** — structured array, ready to feed into another tool
- **readme.md** — full markdown document with a domain-summary table at the top
Hit **copy** or **download** and you're done.
### As a CLI
```sh
npm i -g @v0idd0/tabsnap
# pipe any tabs-shaped JSON in, get a snapshot out
cat tabs.json | tabsnap # markdown (default)
cat tabs.json | tabsnap --format=readme # readme.md
cat tabs.json | tabsnap -f json --no-group # flat structured array
cat tabs.json | tabsnap --strip-tracking # clean tracking params first
# from file
tabsnap --file=tabs.json -f plain
# include pinned + incognito tabs (skipped by default)
tabsnap --include-pinned --include-incognito < tabs.json
# strip common marketing params from exported URLs
tabsnap --strip-tracking -f readme < tabs.json
# pipe to clipboard (macOS) or any tool
tabsnap --format=readme < tabs.json | pbcopy
```
Accepted input shapes (the CLI auto-detects):
```jsonc
// 1) bare array
[ {"title":"…","url":"…","windowId":1,"pinned":false}, … ]
// 2) {tabs:[…]} wrapper
{ "tabs": [ … ] }
// 3) {windows:[{tabs:[…]}]} wrapper — also matches the JSON tabsnap exports
{ "windows": [ {"window_index":1, "tabs":[…]}, … ] }
```
### As a library
```js
const { formatTabs, filterTabs, groupTabsByWindow, countByDomain } = require('@v0idd0/tabsnap');
const out = formatTabs(myTabs, 'markdown', {
groupByWindow: true,
includePinned: false,
includeIncognito: false,
});
```
Pure functions, zero deps, works in any JS runtime that has `URL` + `Date`.
## Privacy
tabsnap reads only `chrome.tabs` metadata (title, URL, windowId, pinned,
incognito) and only when you click the toolbar icon. **No backend. No
analytics. No telemetry.** Your tabs never leave your machine.
Permissions:
- `tabs` — list open tabs
- `downloads` — save the snapshot to a file (only on user click)
- `storage` — remember your popup preferences across sessions
No host permissions. No `activeTab`. No content scripts.
The CLI is a Node.js process — it cannot reach the browser. It only formats
JSON you hand it.
## Repo layout
chrome/ Manifest V3 source for Chrome / Edge / Brave
firefox/ Manifest V3 source with browser_specific_settings.gecko
edge/ Manifest V3 source (mirrors chrome/)
src/ CLI / library source — published to npm as @v0idd0/tabsnap
bin/ CLI entry point
test.js 40 smoke tests for the lib + CLI
dist/ Pre-built ZIPs ready for store submission
shared/ Files copied into each platform tree at build time
## Build
The platform directories are already self-contained — load any of
`chrome/`, `firefox/`, or `edge/` as an unpacked extension in the matching
browser. The pre-built ZIPs in `dist/` are produced by zipping each platform
directory.
The npm package ships only `src/`, `bin/`, `README.md`, and `LICENSE` (whitelisted
via the `files` field in `package.json`).
```sh
node test.js # run all 40 tests
npm publish --access public
```
## From the same studio
- **[@v0idd0/interviewprep](https://www.npmjs.com/package/@v0idd0/interviewprep)** — turn a job posting into a prep brief, then export it in browser or CLI
- **[@v0idd0/jsonyo](https://www.npmjs.com/package/@v0idd0/jsonyo)** — JSON swiss army knife, 18 commands, zero limits
- **[@v0idd0/envguard](https://www.npmjs.com/package/@v0idd0/envguard)** — stop shipping `.env` drift to staging
- **[@v0idd0/depcheck](https://www.npmjs.com/package/@v0idd0/depcheck)** — find unused dependencies in one command
- **[@v0idd0/gitstats](https://www.npmjs.com/package/@v0idd0/gitstats)** — git repo analytics, one command
- **[View all tools →](https://voiddo.com/tools/)**
## License
MIT — see `LICENSE`.
---
Built by [vøiddo](https://voiddo.com/) — a small studio shipping AI-flavoured products, free dev tools, Chrome extensions and weird browser games.