Window Time Machine for Chrome.
Save and restore your Chrome project windows — tab groups, colors, names, and all.
- One window per project, captured. Saves the window's tab groups (with emoji prefix and color), tabs in each group, ungrouped tabs, and the project name.
- Time Machine auto-save. A 4-slot rolling backup (last hour, last day, last week, last month) per project, so you can always roll back to a recent good state if Chrome loses your groups.
- Named snapshots. Save explicit "clean baselines" you can return to whenever the window has accumulated cruft.
- One-click restore. Open a fresh window with all groups, colors, and tab order rebuilt exactly as saved.
- Local-only by default. Everything stored in
chrome.storage.local. Optional JSON export/import for backups across machines.
- Download the latest
tabtastic-X.Y.Z.zip— either:- From the GitHub Releases page (one is auto-published on each tagged release), or
- From the
releases/folder in this repo (releases/tabtastic-0.5.0.zipships with the source for convenience), or - From the Actions → CI → Artifacts of any successful run.
- Unzip it somewhere stable (e.g.
~/Applications/tabtastic-0.1.0/). Chrome loads from a folder, not the zip itself. - Open
chrome://extensionsin Chrome. - Toggle Developer mode on (top-right corner).
- Click Load unpacked and select the unzipped folder.
- The Tabtastic! icon appears in the toolbar — pin it for quick access.
To update without losing your projects: download the new zip and unzip into the same folder as before (overwriting the old contents), then click the refresh ↻ icon on the extension card in
chrome://extensions. As long as the load-folder path is unchanged, the extension ID stays stable andchrome.storage.localkeeps every project and snapshot intact.Belt-and-braces: before any update, open the options page → Export all → save the JSON. If anything goes sideways, Import restores everything.
Loading from a different folder gives the extension a new ID — a fresh install with empty storage. Avoid this for in-place upgrades.
git clone <this repo>
cd Chrome
npm install
npm run buildThen in chrome://extensions, Load unpacked and select the dist/ folder.
- Save your first project. Open the window you use for, say, "Acme Redesign". Click the Tabtastic! toolbar icon. Type a project name (defaults to the current window title) and hit Save this window as a project.
- Auto-save runs in the background. Any time you add/remove a tab, change a group, or switch focus away from the window, Tabtastic! takes a fresh snapshot ~30 seconds later. The popup shows you the rolling auto-saves: hour / day / week / month.
- Save a "clean baseline". When the window is in a tidy, minimal state, click + Save Named Snapshot and give it a label like "clean baseline". Named snapshots are kept until you delete them.
- Restore when Chrome loses your groups. Click the icon, find the snapshot you want, hit Restore. A fresh window opens with the exact saved state.
- Manage everything. The gear icon in the popup opens the all-projects manager (rename, delete, export, import).
npm install
npm run dev # vite dev (writes to dist/, HMR for popup/options)
npm run build # production build → dist/
npm test # vitest (unit tests)
npm run typecheck # tsc --noEmitsrc/manifest.ts— Manifest V3, generated by@crxjs/vite-plugin.src/background/— service worker shell + per-featurehandlers/andlisteners/.src/lib/— pure modules (types, storage, capture, restore, retention, debouncer, bindings, autosave, import-conflict).src/popup/,src/options/— UI surfaces.tests/— Vitest unit tests;tests/setup/chrome-stub.tsprovides a Proxy stub forglobalThis.chromeso module loads don't throw in the test runner.
.github/workflows/ci.yml runs typecheck + tests + build on every push and PR, and uploads tabtastic-<version>.zip as a downloadable artifact. Pushing a tag like v0.2.0 additionally publishes a GitHub Release with the zip attached.
To cut a release locally:
npm run build
mkdir -p releases
cd dist && zip -r "../releases/tabtastic-$(node -p 'require(\"../package.json\").version').zip" . && cd ..TICKETS.md— full backlog (T01–T21). All shipped.docs/plans/2026-05-01-chrome-project-snapshots-design.md— validated design.
- Window names are managed by Chrome itself; Tabtastic! cannot programmatically rename a window's OS title bar. The plugin reads the title for display and as a hint when you save.
chrome://and somefile://URLs can't be recreated by extensions — those tabs are recorded in a per-restore failure report so you can recreate them manually.- Bindings reset on browser restart. When Chrome restarts, the in-session window↔project binding is cleared. Re-bind by clicking the icon in the project window — if you type the same project name, the popup offers to rebind to the existing project (preserving its snapshots).