@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
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
_2026-04-28 ..._
## window 1 (16)
- [GitHub](https://github…)
- [HN](https://news…)
plain text
──────────────
GitHub
https://github.com/…
HN — Show
https://news.ycomb…
json (re-parseable)
"snapshot_at": "2026-04-28...",
"count": 24,
"windows": [...]
}
readme.md
## by domain
| domain | count |
|---|---|
| github.com | 6 |
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 →
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.