个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Tab Warehouse is a free Chrome extension: a new tab page with a clock and your favourite sites, a folder view that shows every URL in full, and a Board with every folder side by side.
翻译准备中
正在加载完整 README。
查看完整 README ↗Developers keep the same page open in many versions: live, test, staging and localhost. Chrome's bookmark bar hides URLs and treats every link the same. Tab Warehouse fixes that:
99+ above 99), and Home shows the next one as Up next.-test. give the tag TEST". The first matching rule wins. Without rules, words like PROD or TEST in the title still work.⌘⇧K / Ctrl+Shift+K on a Tab Warehouse tab opens the command palette as a toolbar popup, so you can type at once even while the address bar has focus (change the key at chrome://extensions/shortcuts). It finds links, folders and Settings tabs by title, address, folder, note or tag.Enter opens the link in the Tab Warehouse tab, ⌘Enter in a background tab (the palette stays open). A folder, Home, Board, Today's top list or a Settings tab opens on the Tab Warehouse page./ searches every folder from the sidebar box.tw and a space in Chrome's address bar to search your links from any tab.⌘K / Ctrl+K)Alt+1 … Alt+6 to pick that folder, then Enter saves. Pin a folder with the pin at the right of its row, or with Pin in save popup in the sidebar folder menu; right-click a pinned chip to unpin it.origin/).?utm_…, #part or a trailing / differ; click it to see each copy and remove one. Save again still saves a second copy.⌘⇧S / Ctrl+Shift+S): saves the tab into the last folder you saved to (or the root) without opening the popup. The toolbar icon shows a green NEW for 2.5 s. If the page is already saved, nothing is saved and the popup opens with the “Saved in” line.tw address bar keyword and the fixed keys of the page. Change shortcuts opens Chrome's shortcuts page, because Chrome does not let an extension change its own keys.Try the real extension in your browser, with sample bookmarks and nothing to install: https://sumonta056.github.io/tab-warehouse/#demo.
The website and the demo live in site/. The demo loads the extension's own newtab.html and popup.html with a fake chrome.* API (site/demo/demo-chrome.js), so nothing is saved. The Pages workflow builds and deploys the site after CI passes on main. To preview it locally:
./site/build.sh && python3 -I tests/serve.py 8811 _site
# then open http://127.0.0.1:8811/
If the store page does not open or the add does not work, use the ZIP below.
chrome://extensions and turn on Developer mode (top right).manifest.json).Update: download the new ZIP, replace the old folder, then click ↻ on the extension card. Your bookmarks and settings stay.
git clone https://github.com/Sumonta056/tab-warehouse.git
Load the extension folder of the clone with Load unpacked. It runs as it is, with no build. After a git pull, click ↻ on the extension card.
The release ZIP is built: npm install, then ./tools/package.sh (or npm run build for an unzipped dist/ folder you can load the same way).
localhost → LOCAL, -test. → TEST, -stage. → STAGE.⌘K (macOS) or Ctrl+K (Windows/Linux), pick a folder and press Enter.| Keys | Action |
|---|---|
⌘K / Ctrl+K | Open the save popup |
⌘⇧S / Ctrl+Shift+S | Quick save the tab without the popup |
⌘⇧K / Ctrl+Shift+K | Open the command palette (on Tab Warehouse) |
⌘Enter (in the palette) | Open the link in a background tab |
tw + space (in the address bar) | Search all folders from the address bar |
/ | Search all folders |
Enter (in search) | Open the first result |
Esc | Clear search or filter; close Settings |
j / k | Next / previous: Home, Board, Today's top list, folders |
Alt+↑ / Alt+↓ | Move the focused folder or section up / down |
← / → (on the sidebar edge) | Resize the sidebar by 16 px |
← / → (in Settings) | Next / previous tab |
↑ / ↓, Enter (in the popup) | Pick a folder, save |
Alt+1 … Alt+6 (in the popup) | Pick a Pinned or Recent folder chip |
Settings › Shortcuts lists these keys. To change the Chrome keys, click Change shortcuts there (it opens chrome://extensions/shortcuts).
Change ⌘K, ⌘⇧S and ⌘⇧K at chrome://extensions/shortcuts. An install that is already there keeps its old keys after an update: set them there, or paste tools/set-shortcuts.js into the Console of that page. Chrome skips a suggested key that another extension already uses; then the shortcut shows as not set until you pick one there.
⌘K / Ctrl+K opens the save popup on any page. Many sites (GitHub, Slack, Notion) use ⌘K themselves and lose it while the extension has it; if you want it back there, set another key or none. On Windows Chrome may keep Ctrl+K for itself; then the shortcut shows as not set and you can pick a key at chrome://extensions/shortcuts.
Tab Warehouse has no server, no account, no analytics and no tracking. It does not send your bookmarks anywhere.
chrome.storage.local on your machine. Chrome sync does not copy them.ssl.gstatic.com), any icon URL you add yourself, and the icon of a Home link that Chrome has no icon for. For that last case the extension asks Google's favicon service (www.google.com/s2/favicons) and sends it only the host name of that link. Local addresses (localhost, IP addresses) are never sent.| Permission | Why it is needed |
|---|---|
bookmarks | Read and edit your bookmarks — the core of the extension |
storage | Save sidebar order, per-folder preferences, env rules, link notes and the Home look |
favicon | Show site icons from Chrome's own favicon cache |
activeTab | Read the current tab's title and URL, only when you open the popup or quick save |
tabs | See which saved links are open in a tab, to mark them "Open" in the list (kept only in memory), and to show the Saved mark on the toolbar icon |
The extension has a background service worker (background.js) only for the address bar search (tw), quick save (⌘⇧S) and the palette key (⌘⇧K, so it also works while the address bar has focus). It reads your bookmarks on each keystroke or key press and keeps nothing. The omnibox key is not a permission and shows no install warning.
Tab Warehouse is plain JavaScript with ES modules. There is no framework and no runtime dependency, and the source runs without a build step. For a release, esbuild bundles each page into one readable (not minified) script and one stylesheet in dist/. npm is used only for dev tools (esbuild, Husky, Prettier, commitlint).
chrome.bookmarks, and the page re-renders from chrome.bookmarks.getTree() when Chrome reports a change.chrome.storage.local.extension/ Everything Chrome loads (choose this folder in Load unpacked)
manifest.json Manifest V3: new tab override, popup, ⌘K, ⌘⇧S and ⌘⇧K commands
newtab.html/.js The main page: sidebar + folder page
popup.html/.js Toolbar popup: save the current tab
constants/ Fixed values: envs, tags, sorts, themes, limits, defaults
domain/ Pure logic: env detection, derive, sort, matrix, search, due dates, backup
services/ The only code that calls Chrome APIs: storage, bookmarks, tabs, omnibox, favicons, import
ui/ Shared DOM pieces: h() helper, toast, menu, badges, icons, pickers, export
state/ Shared page state and the actions that save it
views/ One folder per screen: sidebar, folder, search, schedule, board, home, palette, settings, popup
styles/ tokens.css, base.css, ui/ (one file per ui piece), views/ (one file per screen)
icons/ Extension icons (source: icons/logo.svg)
tools/make-icons.py Build the icon sizes from any logo
tools/build.mjs Release build: bundle extension/ into dist/ with esbuild (npm run build)
tools/package.sh Build dist/ from a clean export and zip it (--store: Web Store ZIP)
tests/ Unit, end-to-end and performance tests
site/ Website, live demo and screenshots (deployed to GitHub Pages)
docs/ Notes and requirements
The full behaviour spec is in .claude/rules/business-logic.md. Every rule there has at least one test.
Contributions are welcome — bug reports, ideas and pull requests.
npm install once. It installs Prettier and the git hooks that format, test and check your commit messages../tests/run.sh and make sure it is green before you open a pull request.No test dependencies: Node's built-in test runner and headless Chrome.
./tests/run.sh # syntax + unit + coverage gate + e2e on extension/, then build + e2e on dist/
./tests/run.sh popup # only e2e scenarios whose name contains "popup"
node tests/perf/memprobe.mjs # RAM, leak and render-speed check on the real extension
The e2e runner loads the real extension/newtab.html, extension/popup.html and extension/palette.html with a fake chrome.* API, so tests never touch your bookmarks. ./tests/run.sh then runs the same scenarios on the release build (runner.html?root=dist). To watch a scenario run:
python3 -I tests/serve.py 8799
# then open http://127.0.0.1:8799/tests/e2e/runner.html?only=<name>
Alt+1 … Alt+6), with a pin on each folder row and Pin in save popup in the sidebar folder menu.⌘K / Ctrl+K) without the popup; the popup warns when a page is already saved and offers Save again; Settings › Shortcuts; the command palette moves to ⌘⇧K / Ctrl+Shift+K. Details in CHANGELOG.md.tw search from the address bar.extension/.MIT © 2026 Sumonta Saha Mridul
tools/make-icons.py.