This document explains key implementation decisions.
TabsToFile uses MV3:
- Background logic runs in a service worker
- No persistent background pages
- No inline scripts allowed
All scripts are external files to satisfy CSP.
Tabs are collected using:
chrome.tabs.query({ currentWindow: true })
Only the current window is exported by design.
OS is detected using:
navigator.platformnavigator.userAgent
Output formats:
- Linux →
.desktop - Windows →
.bat
macOS is intentionally unsupported for now.
Vivaldi identifies itself as Chrome. Because of this, browser detection is user-configurable via the options page.
Stored using:
chrome.storage.sync
Supported values:
chromevivaldi
Launcher files are generated as text and downloaded via:
chrome.downloads.download()
Important details:
saveAs: false- Explicit filename with extension
- MIME type forces correct extension handling
TabsToFile intentionally avoids:
- Session APIs
- Extension-only restore flows
The generated files work independently of the extension.
- No network access
- No external scripts
- No tracking
- No analytics
Everything runs locally.