A fast, modern, privacy-first Google Chrome extension (Manifest V3) to scan, validate, and organize bookmarks.
Preview • Key Features • Architecture • How It Works • Getting Started • FAQ • Contributing
| Feature | Description |
|---|---|
| 🔍 Broken Link Detection | Performs concurrent HTTP HEAD/GET validations against saved bookmarks to detect 404s, 50x server errors, and network timeouts. |
| 📑 Intelligent Deduplication | Identifies exact duplicates and normalized URL matches (handling trailing slashes, protocol shifts, and anchor variations). |
| ⚡ Dual Experience | Quick toolbar popup for instant checks and an expanded full-page Dashboard for advanced bulk management. |
| 🧹 Batch Management | Easily inspect, review, and delete broken or duplicate bookmarks in bulk with real-time feedback. |
| 🛡️ Zero Telemetry | 100% client-side execution. No tracking, no analytical beacons, and zero third-party server transmissions. |
The extension is powered by Vite with @crxjs/vite-plugin and React 19, structured into clear, decoupled components:
ChromePluginBookmarkChecker/
├── manifest.json # Chrome Extension Manifest V3 configuration
├── scripts/
│ └── package_extension.ps1 # Automated store-ready production ZIP packager
├── src/
│ ├── index.html # Quick Popup HTML container
│ ├── main.jsx # Quick Popup React entry point
│ ├── App.jsx # Popup UI layout and compact scan controls
│ ├── dashboard.html # Full-page Dashboard HTML container
│ ├── dashboard.jsx # Dashboard React entry point
│ ├── DashboardApp.jsx # Full-screen dashboard with filtering table
│ ├── background.js # Service worker for background scheduling & alarms
│ ├── index.css # Tailwind CSS v4 layers and theme definitions
│ └── utils/
│ └── bookmarkUtils.js # Link checking, normalization & deduplication algorithms
└── tests/
└── bookmarkUtils.test.js # Vitest unit test suite
The following pipeline illustrates how bookmarks are retrieved, verified concurrently, and classified without transmitting any data externally:
flowchart TD
A["User Triggers Scan"] --> B["Chrome Bookmarks API"]
B --> C["Traverse & Flatten Bookmark Tree"]
C --> D["Deduplication Engine (URL Normalization & Hash Match)"]
C --> E["Concurrent HTTP Worker Queue"]
E --> F["HTTP HEAD Reachability Check"]
F -->|"Blocked or 405"| G["Fallback HTTP GET Request"]
F -->|"HTTP 200-299"| H["Active / Alive"]
F -->|"HTTP 404 / 50x / Timeout"| I["Broken / Dead Link"]
G --> H
G --> I
D --> J["Duplicate Groups"]
H --> K["Real-time Reactive UI (Popup & Dashboard)"]
I --> K
J --> K
- Node.js (v20 or higher recommended)
- Google Chrome or any Chromium-based browser
-
Clone the repository:
git clone https://github.com/onurb120/ChromePluginBookmarkChecker.git cd ChromePluginBookmarkChecker -
Install dependencies:
npm install
-
Start local development with hot reload:
npm run dev
-
Build production bundle:
npm run build
-
Run test suite:
npm test
- Open Chrome and navigate to
chrome://extensions. - Toggle Developer mode in the top-right corner.
- Click Load unpacked.
- Select the
dist/directory generated in the repository root. - Pin Chrome Bookmark Checker to your extension toolbar.
To create a clean, compliant distribution package for the Chrome Web Store:
- Run the automated packager:
npm run package # or directly: .\scripts\package_extension.ps1
- The standalone ZIP is generated at:
dist/chrome-bookmark-checker.zip - Upload the resulting ZIP to the Chrome Web Store Developer Dashboard.
(Automated release workflows will also bundle and attach this archive whenever a version tag like v1.0.x is pushed to GitHub).
Does this extension send my bookmarks to any external server?
No. Chrome Bookmark Checker operates strictly on a zero-telemetry architecture. Bookmark traversal, HTTP connectivity checks, duplicate comparisons, and local preference storage execute 100% inside your local browser context.
Why do some bookmarks report 403 Forbidden or Timeout errors?
Certain websites (e.g., sites behind Cloudflare, anti-bot shields, or login barriers) block automated
HEAD inspection or require active session cookies. The extension attempts a GET fallback with a reasonable timeout, but if the server refuses requests without browser challenge verification, it is flagged for user review.
How are duplicate bookmarks identified?
The engine applies URL normalization rules—stripping tracking parameters, harmonizing protocol schemes (
http vs https), and standardizing trailing slashes—to accurately flag identical destinations saved multiple times.
Can deleted bookmarks be recovered?
Chrome does not provide a native trash/undo API for bookmarks. For safety, it is always recommended to create a bookmark backup via Chrome Bookmark Manager (
chrome://bookmarks → three dots menu → Export bookmarks) prior to large batch cleanups.
- Zero Remote Execution: Conforms strictly to Manifest V3 policy — no
eval(),new Function(), or injected external scripts. - Local Context Only: Bookmark tree inspection and HTTP reachability checks happen directly in the user's browser sandbox.
- Automated Scanning: Every commit and pull request runs automated security audits (
npm audit) and SAST analysis via GitHub CodeQL.
Contributions are welcome! Please check out our Contributing Guidelines and adhere to the Code of Conduct.
For vulnerability reports, please review our Security Policy.
Distributed under the MIT License.
