About us

Small tools that do one thing and do not ask for anything.

TabsPack is built and maintained by palworks.ai.

Why this exists

Tab exporters are not a new idea. There are dozens, and most of them work. The reason for another one is what happens to them afterwards.

The pattern is well documented and it keeps happening. A tab manager gets popular. It is sold, or it takes an advertising deal, or it is abandoned and then taken over. The extension already has permission to read every tab you have open, which turns out to be the most valuable thing about it. People who had parked hundreds of tabs inside it find the addresses were only ever stored in its own format, on its own page, and that when it stops working the tabs are simply gone.

So TabsPack is built around the assumption that it should not matter if we disappear. Your session lives in a plain JSON file with a published schema, on your disk, readable in a text editor. If this project is abandoned tomorrow, nothing you exported is locked up. That is the design constraint everything else follows from.

What we refuse to do

These are not promises in a policy. Each one is a property of the build that the project's own checks enforce, and every one of them is in a public commit.

  • No host permissions at install. The extension cannot reach any address on the internet out of the box.
  • No content scripts. Nothing of ours runs inside a web page, so nothing of ours can read one.
  • No analytics of any kind. Not usage counts, not crash reports, not an install ping.
  • No account. Nothing to sign in to means nothing of yours held anywhere.
  • No secrets in an export. Cookies, tokens, headers and form data are excluded by the format specification, not by the current implementation happening not to include them.

The build fails if anyone adds a network call, a remote script, a remote font or an innerHTML assignment. That is deliberate: a rule that only lives in a document is a rule that gets broken by someone in a hurry, including us.

How it is built

One source tree produces the Chrome, Edge and Firefox builds. Everything that decides anything is pure and tested without a browser; everything that touches a browser goes through a single adapter layer, and the linter fails the build if any other file reaches for a browser API directly.

The parts that cannot be proven without a real browser are not assumed. There is a cross browser matrix that loads the extension into real Chrome, real Edge and real Firefox and drives them, because the interesting bugs in an extension are all about what a particular browser actually does rather than what the documentation says. Two of the worst bugs this project has had were found that way, and both would have passed a green unit suite.

Every non-obvious decision is written down as a numbered record in the repository, with the options that were considered and what each one cost. There are forty-nine of them. They are the honest history of the thing, including the mistakes.

Who is accountable

palworks.ai. There is a real inbox at support@palworks.ai, a contact page, a support form inside the extension itself, and a public issue tracker. A person reads all four.

The source is the documentation. Everything above is checkable rather than assertable: github.com/PalWorks/tabspack.