Your second brain, now in your browser. Capture any idea, highlight, or image directly to your Synapse knowledge base.
- Quick Capture: Save selected text with Alt+S keyboard shortcut
- Inline Highlighting: Floating "Save to Synapse" button appears when you select text
- Page Capture: Save entire articles with metadata extraction
- Image Capture: Right-click images to save them
- Link Capture: Save links with automatic metadata
- Beautiful Popup: Quick note taking and page capture
- Offline Support: Queues captures when backend is offline
- Notifications: Visual feedback for successful captures
- Context Menu: Right-click anywhere to access capture options
- Node.js 18+ installed
- Synapse backend running on
http://localhost:3000 - Chrome browser (or Chromium-based browser)
cd Extension
npm installDevelopment build (with file watching):
npm run watchProduction build:
npm run buildThis creates a dist/ folder with the compiled extension.
- Open Chrome and navigate to
chrome://extensions/ - Enable "Developer mode" (toggle in top right)
- Click "Load unpacked"
- Select the
Extensionfolder (not thedistfolder) - The Synapse Capture icon should appear in your toolbar
Place your icon files in the assets/ folder:
icon16.pngicon32.pngicon48.pngicon128.png
See assets/README.md for icon design guidelines.
- Click the Synapse extension icon
- Click "Open Dashboard & Login"
- Register or login to your Synapse account
- The extension will automatically detect your authentication
The extension stores your JWT token locally and uses it for all API calls.
- Click the Synapse icon in toolbar
- Type your note in the textarea
- Click "Save Note"
Method 1: Inline Button
- Select any text on a webpage
- A floating "Save to Synapse" button appears
- Click it to save
Method 2: Keyboard Shortcut
- Select any text
- Press
Alt+S(Windows/Linux) orCmd+Shift+S(Mac)
Method 3: Context Menu
- Select text
- Right-click → "Save to Synapse"
From Popup:
- Click "Save Current Page" button
From Context Menu:
- Right-click anywhere → "Save Page to Synapse"
Links:
- Right-click any link → "Save Link to Synapse"
Images:
- Right-click any image → "Save Image to Synapse"
The extension connects to your local Synapse backend:
POST http://localhost:3000/api/ingest
{
text?: string; // Content to save
url?: string; // URL being captured
type?: string; // 'note' | 'article' | 'image' | 'video' | 'product'
sourceApp: "Chrome Extension";
context?: {
pageTitle?: string; // Page title
selection?: string; // Selected text
favicon?: string; // Page favicon URL
}
}Includes JWT token in Authorization header:
Authorization: Bearer <your_token>
When the backend is unavailable:
- Captures are queued locally
- Badge shows number of queued items (red)
- Auto-retries every 10 minutes
- Manual retry with "Sync" button in popup
Extension settings are stored in Chrome's local storage:
{
token: string; // JWT auth token
backendUrl: string; // Backend API URL
captureQueue: Array; // Offline queue
}To change backend URL (for custom deployments), modify:
// src/utils.ts
export const BACKEND_URL = "http://localhost:5000";Extension/
├── src/
│ ├── background.ts # Service worker - handles captures
│ ├── content.ts # Content script - inline UI
│ ├── content.css # Content script styles
│ ├── types.ts # TypeScript types
│ ├── utils.ts # API utilities
│ └── popup/
│ ├── index.tsx # Popup entry point
│ ├── Popup.tsx # Main popup component
│ └── popup.css # Popup styles
├── assets/
│ └── icon*.png # Extension icons
├── manifest.json # Extension manifest (MV3)
├── popup.html # Popup HTML
├── package.json
├── tsconfig.json
├── vite.config.ts
└── tailwind.config.js
Run this for hot-reload during development:
npm run watchAfter code changes:
- Go to
chrome://extensions/ - Click the reload icon on your extension
npm run buildBackground Script:
- Go to
chrome://extensions/ - Click "Service worker" under Synapse Capture
- Opens DevTools for background script
Content Script:
- Right-click on any webpage → Inspect
- Check Console for content script logs
Popup:
- Right-click extension icon → Inspect popup
- Opens DevTools for popup
To publish to Chrome Web Store:
- Create a developer account
- Zip the
dist/folder - Upload to Chrome Web Store
- Submit for review
- Framework: React 18 + TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS
- Icons: Lucide React
- Manifest: V3 (Service Worker)
Current: Phase 3 - Advanced Capture
- Phase 1: Basic extension setup
- Phase 2: Context menu + popup capture
- Phase 3: Inline highlighting + shortcuts
- Phase 4: Dashboard integration
- Phase 5: Auto-capture intelligence
- Phase 6: Offline support improvements
- Phase 7: Screenshot capture
- Phase 8: Settings page
Extension not loading?
- Make sure you ran
npm run build - Load the main
Extensionfolder, notdist/ - Check for TypeScript errors in build output
"Not authenticated" error?
- Login through the dashboard first
- Token is stored after successful login
- Check Chrome DevTools → Application → Storage
Captures not saving?
- Verify backend is running on port 3000
- Check
http://localhost:3000/health - Look for errors in extension console
Floating button not appearing?
- Try selecting more text (minimum 10 characters)
- Check content script is injected (DevTools → Elements)
- Reload the page
This extension is part of the Project Synapse ecosystem:
- Backend API: Node.js + Express + MongoDB
- Web Dashboard: Next.js (coming soon)
- Chrome Extension: This project
- Native App: Electron (future)
All components share the same authentication and data layer.
MIT
Built with love for capturing knowledge effortlessly