SearchMyMarks is a production-ready Manifest V3 Chrome extension implementing the BookmarkOS architecture: fast bookmark search, pinning, full tree navigation, duplicate detection, domain grouping, and usage analytics.
- Chrome (current stable)
- Node.js 18+
npm install- Open
chrome://extensions. - Enable Developer mode.
- Click Load unpacked.
- Select this project folder.
- Pin the extension and open the popup.
npm run buildBuild artifacts are emitted to dist/.
- Update source files in project root and
utils/. - Run
npm run build. - In
chrome://extensions, click Reload on SearchMyMarks. - Validate popup,
tree.html, andanalytics.htmlflows.
Searchmymarks/
├─ manifest.json
├─ background.js
├─ popup.html
├─ popup.js
├─ popup.css
├─ tree.html
├─ tree.js
├─ tree.css
├─ analytics.html
├─ analytics.js
├─ analytics.css
├─ utils/
│ ├─ search.js
│ ├─ storage.js
│ ├─ treeBuilder.js
│ ├─ duplicateDetector.js
│ └─ domainGrouping.js
├─ build.mjs
├─ icons/
├─ Task.md
└─ README.md- Modular utilities: core logic is split into
utils/for ranking/search, storage schema handling, tree building, duplicate detection, and domain grouping. - Service worker orchestration:
background.jsis the source of truth for bookmark indexing, open tracking, pinning, and data endpoints for popup/tree/analytics. - Storage-first MV3 design: state is persisted in
chrome.storage.localto survive service-worker restarts. - Tree performance: tree rendering uses
DocumentFragment, lazy folder child rendering, andrequestAnimationFramefor expand/collapse transitions.
- Bookmark index fields:
id,title,url,path,usageCount,pinned. - Search matches title, URL, and folder path (case-insensitive substring).
- Debounced input at
150ms. - Ranking order: exact title, title prefix, title word match, URL/path match.
- View sorting applied after ranking:
A–Z,Z–A,Most Used. - Pinned results are surfaced at the top.
- Opening bookmarks through extension increments usage counts.
- Pin/unpin supported from popup and tree.
- Persisted storage schema:
{
"bookmarks": [],
"usageStats": {
"bookmarkId": 0
},
"pinned": []
}- Hierarchical recursive folder rendering.
- Expand/collapse chevrons with smooth transition.
- Expand all / collapse all actions.
- Search within tree auto-expands matching branches.
- Domain grouping mode toggle.
- Duplicate groups with delete confirmation.
- Responsive layout with tree panel and preview panel.
- Total bookmarks count.
- Most used bookmark, domain, and folder.
- Top 10 bookmarks table.
- Top 5 domains table.
- bookmarks: required to read bookmark tree data, search bookmarks, and delete duplicate bookmarks selected by the user.
- storage: required to store local index cache, usage stats, and pinned bookmark IDs.
- tabs: required to open bookmarks in current/new/background tabs and open extension pages (
tree.html,analytics.html) in new tabs.
SearchMyMarks processes bookmarks locally in the browser. No bookmark content, usage stats, or pinned state is sent to remote servers.
- Run
npm run buildand upload contents ofdist/. - Include icons (
16,48,128). - Provide screenshots of popup, tree view, duplicates section, and analytics dashboard.
- Clearly document local-only processing in privacy description.
- Include permission rationale for
bookmarks,storage, andtabs. - Mention keyboard support in popup (arrow keys, Enter, Ctrl+Enter).