tool · dev

@v0idd0/tabsnap.

tab list → markdown / plain / json / readme cli.

cli twin of the tabsnap browser extension. pipe any tabs-shaped JSON (a flat array, a {tabs:[]} wrapper, or the extension's {windows:[{tabs:[]}]} shape), get back the format you want. zero deps, 5 KB tarball, mit.

npm i -g @v0idd0/tabsnap
github → npm mit · zero deps
tabsnap icon
what it does

one engine, four shapes of output.

feed it any tabs-shaped JSON. get back the format you want. no api call, no internet round-trip — just a tiny tool that does what it says.

markdown

$ cat tabs.json | tabsnap
# tab snapshot · 24 tabs
_2026-04-28 ..._

## window 1 (16)
- [GitHub](https://github…)
- [HN](https://news…)

plain text

$ tabsnap -f plain
window 1 (16)
──────────────
GitHub
  https://github.com/…
HN — Show
  https://news.ycomb…

json (re-parseable)

$ tabsnap -f json
{
  "snapshot_at": "2026-04-28...",
  "count": 24,
  "windows": [...]
}

readme.md

$ tabsnap -f readme
# tab graveyard

## by domain
| domain | count |
|---|---|
| github.com | 6 |
install

three ways. all painless.

npm

$ npm i -g @v0idd0/tabsnap

node 14+ on linux / macos / windows. updates with npm update -g.

npx (one-off)

$ npx @v0idd0/tabsnap < tabs.json

no install needed. pipe a JSON file straight in. npm page →

git clone

$ git clone github.com/voidd0/tabsnap

read the source, send a pr, fork it. mit licence, no cla. repo →

why we built it

we built the tabsnap browser extension for snapshots from inside the browser. people then asked for the same thing in CI scripts and terminal pipelines. same engine, exposed as a cli — markdown, plain, json, readme.

no telemetry. no signup. zero runtime deps. mit forever. the browser extension and the cli share snapshot.js, so output bytes match exactly.

star on github → browser extension all tools