Disclaimer: This project was "vibe coded" primarily for personal use that I decided to open-source, It is provided as-is, without any warranties.
USE AT YOUR OWN RISK
A new tab page for people with too many tabs.
Bookmarks in color-coded collections · a board of widgets you arrange yourself · workspaces, saved sessions, and a tab list that can actually get out of your way.
v1.1.0 · Chrome (MV3) + Firefox (MV2) · one shared codebase
- 🗂️ Collections — group bookmarks, drop open tabs straight into one, color and pin them, switch a collection between a tile grid and a dense list.
- 🧩 Widget board — drag widgets around a real grid. Leave gaps, resize, span rows, swap anything with anything.
- 🗂️ Bookmarks from your browser — pull your existing Firefox or Chrome bookmarks in, and sync them to a collection whenever you want.
- 🗃️ Workspaces & boards — separate setups per work/personal, several boards inside each, one keystroke to switch.
- 💾 Sessions — save the current window or every window at once, restore into this window or a fresh one, and turn any session into a bookmark collection.
- 🪦 Trash — delete things with a safety net. Empty it when you're ready.
- 🧹 Unload tabs — strip memory-heavy tabs down to their favicon without losing where they were.
- 🧭 Command palette —
Ctrl/⌘ Kto jump to a bookmark, a tab, or any command. - ⌨️ Address bar — type
tbthen anything to search your bookmarks, tabs, and sessions without leaving the URL bar. - 🖱️ Right-click menu — add the page, a link, or a selection to TabsBoard.
- 🎨 187 themes — every Monkeytype palette, plus a builder for your own.
- 🌍 Weather, RSS, downloads, history, most-visited, CPU as widgets.
- 💾 Yours, locally — everything lives in browser storage. No account, no server, no analytics.
Collection Notes To-Do Clock Search Countdown Pomodoro Timer
Stopwatch Weather RSS Most visited Downloads History CPU
⚡ The
CPUwidget needs thesystem.cpuAPI, which is Chrome/ChromeOS only. On Firefox the widget is still there — it just tells you why it can't read anything instead of showing a dead gauge.
187 presets, ported straight from Monkeytype's theme set, plus a builder for your own. The builder edits the eight colors this app actually paints from — background, panels, text, muted text, accent, caret, and the two error colors — and repaints the page live as you drag the pickers or type hex values. A contrast readout tells you when the text won't survive the background. Saved themes live beside the presets, so they show up in the grid, in the Auto light/dark slots, and in the command palette, and they ride along with your JSON export.
| Key | Action |
|---|---|
Ctrl/⌘ K or / |
Command palette |
? |
Show this list |
T |
Toggle sidebar |
⇧C |
Toggle compact sidebar |
C |
New collection |
V |
Toggle grid / list view |
B / ⇧B |
Next / previous board |
W / ⇧W |
Next / previous workspace |
S |
Settings |
G |
Trash (press again to close) |
Esc |
Close dialogs / clear selection |
Three more live in the browser's own shortcut settings (chrome://extensions/shortcuts,
or the Firefox add-on shortcuts page):
| Command | Default |
|---|---|
| Open TabsBoard | Alt+⇧D |
| Quick-add current tab | Ctrl/⌘+⇧A |
| Toggle sidebar | Alt+⇧S |
- Clone this repo (or download it)
chrome://extensions→ turn on Developer mode- Load unpacked → pick
dist/chrome/
Install it from AMO: addons.mozilla.org/firefox/addon/tabsboard — click Add to Firefox. That install is signed by Mozilla, survives restarts, and updates on its own.
Or build it yourself and load the folder directly:
about:debugging#/runtime/this-firefox- Load Temporary Add-on… → pick
dist/firefox/manifest.json
Temporary installs disappear when you close Firefox, and Firefox won't serve an
unsigned .xpi as a permanent install. If you want your own build to stick
around, push it through addons.mozilla.org as an
unlisted add-on, or sign it yourself with
web-ext:
web-ext sign --api-key "$AMO_KEY" --api-secret "$AMO_SECRET" \
--source-dir dist/firefoxsrc/ is the source of truth. dist/ and the packed .xpi are generated and
gitignored, so run these before either install step.
# Chrome (MV3)
rm -rf dist/chrome && mkdir -p dist/chrome
cp -r src/. dist/chrome/
rm dist/chrome/manifest.firefox.json dist/chrome/manifest.chrome.json dist/chrome/background/background.html
cp src/manifest.chrome.json dist/chrome/manifest.json
# Firefox (MV2)
rm -rf dist/firefox && mkdir -p dist/firefox
cp -r src/. dist/firefox/
rm dist/firefox/manifest.firefox.json dist/firefox/manifest.chrome.json
cp src/manifest.firefox.json dist/firefox/manifest.json
# Pack the Firefox build (version comes from the manifest)
cd dist/firefox && zip -r -X "../../TabsBoard-$(node -p "require('./manifest.json').version")-fx.xpi" . -x '.*'Bump the version in both manifests, not just one.
src/
manifest.chrome.json MV3 manifest
manifest.firefox.json MV2 manifest
background/ service worker / background page
common/ storage, themes, icons, search, color utils
newtab/ the dashboard UI
dist/ generated builds
Data is versioned with a single SCHEMA_VERSION (currently 1). There is no
migration ladder: if the stored data doesn't match, TabsBoard starts fresh
rather than trying to repair it.
- Monkeytype — the whole color palette. Every theme here is Monkeytype's hex values, copied verbatim, nothing recolored. Monkeytype is GPL-3.0; hex color codes aren't copyrightable expression, but the credit is theirs and it's here. 🐵
- Lucide — every icon in the app. ISC. ✨
- Open-Meteo — weather data and city search. CC BY 4.0, attribution appreciated. 🌤️
Everything else was written here. If you spot code that looks like it came from somewhere else, that's a bug — please open an issue so I can credit it or rip it out.
MIT — see LICENSE. Fork it, ship it, sell it, whatever.
Open an issue. Include your browser, your OS, and what you did just before it broke. Screenshots are lovely.
0 comments
log in to comment.