A modern bookmark manager that stays in real-time sync with your browser.
Built with React, TypeScript, and Tailwind CSS · Chrome Extension (Manifest V3)
Named after Vannevar Bush's 1945 concept of a "memory extender" — Memex keeps your bookmarks organized, enriched, and always in sync with your browser.
Unlike traditional bookmark managers that store data in their own database, Memex reads and writes directly to your browser's native bookmark tree. No data lock-in, no sync issues — what you see is what your browser has.
|
|
|
|
|
Folder tree — recursive navigation with search, breadcrumbs, and item counts |
Card grid — search, favourite and tag filters, sorting, and the responsive grid |
| Layer | Technology |
|---|---|
| UI | React 19, Tailwind CSS 4, shadcn/ui |
| Language | TypeScript 6 |
| Build | Vite 8 |
| Extension | Chrome Manifest V3, chrome.bookmarks API |
| Icons | Lucide React + custom icon picker |
| Lint | oxlint |
bookmark-manager-v2/
├── public/
│ ├── logo.svg # Extension logo
│ ├── icons/ # Extension icons (16/48/128)
│ └── favicon.svg
├── src/
│ ├── App.tsx # Main UI (sidebar, header, grid)
│ ├── background/
│ │ └── service-worker.ts # Chrome bookmark event listeners
│ ├── components/
│ │ ├── bookmark-card.tsx # Bookmark card with actions
│ │ ├── bookmark-form.tsx # Add/edit form
│ │ ├── icon-picker.tsx # 150+ icon selector
│ │ └── ui/ # shadcn components
│ ├── hooks/
│ │ └── use-browser-bookmarks.ts # Core sync hook
│ ├── manager/
│ │ └── index.html # Tab page entry
│ └── types/
│ └── bookmark.ts # Type definitions
├── manifest.json # Chrome Extension manifest
├── background.ts # Service worker entry
└── package.json
- Node.js 18+
- npm or pnpm
- Chrome, Edge, or Firefox
# Clone
git clone https://github.com/yourusername/bookmark-manager-v2.git
cd bookmark-manager-v2
# Install
npm install
# Dev server (opens Vite dev server for hot reload)
npm run devSee How to Use for per-browser instructions.
npm run buildThis outputs to dist/ — zip the contents for store upload.
- Download or clone this repository
- Run
npm install && npm run build - Load the extension in your browser — see How to Use
- Click the Memex icon to open in a new tab
Firefox — Memex on Firefox Add-ons
Chrome Web Store and Edge Add-ons listings are coming soon.
Build the extension first with npm run build — this outputs everything needed to dist/.
Easiest — install from the store:
- Open the Memex add-on page
- Click Add to Firefox and confirm
Or load a local build:
- Run
npm run build - Go to
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on…
- Select
dist/manifest.json
The extension is now loaded — click the Memex icon in the toolbar to open it.
Note: Firefox clears temporary add-ons when it closes. After a restart, load it again from the same page, or sign the build to install it permanently.
Nothing yet.
┌─────────────────────────────────────────────┐
│ Memex UI (React) │
│ ┌─────────┐ ┌──────────┐ ┌───────────┐ │
│ │ Sidebar │ │ Card Grid│ │ Form/Modal│ │
│ └────┬────┘ └────┬─────┘ └─────┬─────┘ │
│ │ │ │ │
│ ┌────▼────────────▼──────────────▼─────┐ │
│ │ useBrowserBookmarks Hook │ │
│ │ • chrome.bookmarks CRUD │ │
│ │ • chrome.storage for metadata │ │
│ │ • Real-time event listeners │ │
│ └──────────────────┬───────────────────┘ │
│ │ │
└─────────────────────┼───────────────────────┘
│
┌─────────▼─────────┐
│ Chrome Bookmarks │
│ (Native Storage) │
└───────────────────┘
Two-layer storage:
- Chrome Bookmarks API — stores the actual bookmark tree (URL, title, folders)
- chrome.storage.local — stores enriched metadata (icons, favourites, tags, descriptions)
| Command | Description |
|---|---|
npm run dev |
Start Vite dev server |
npm run build |
Production build to dist/ |
npm run lint |
Run oxlint |
npm run preview |
Preview production build |
Contributions are welcome! Here's how:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT © 2026

