*p5.brush
p5.js 환경에서 자연스러운 텍스처를 탐구하는 아티스트·디자이너·취미자를 위한 다목적 라이브러리
개발자를 위한 무료 Chrome 확장프로그램으로 전체 URL·태그·태그 매트릭스·명령 팔레트·시계·타일이 있는 홈 페이지 제공, 계정·추적 없음
A free Chrome extension for developers: full URLs, tags, a tag matrix, a command palette and a Home page with a clock and tiles. No account, no tracking.
플러그인JavaScript · CSSGitHub @Sumonta056온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.