🔍 Add powerful semantic/vector search to your Karakeep bookmarks
Karakeep is great for hoarding bookmarks, but its search is keyword-based. This sidecar service adds semantic search - find bookmarks by meaning, not just exact words.
# Clone the repo
git clone https://github.com/jamesbrooksco/karakeep-semantic-search.git
cd karakeep-semantic-search
# Copy the example env file
cp .env.example .env
# Edit .env with your settings
nano .env
# Start everything
docker compose up -d
| Variable | Required | Default | Description |
|---|---|---|---|
KARAKEEP_URL | Yes | - | Your Karakeep instance URL (e.g., http://karakeep:3000) |
KARAKEEP_API_KEY | Yes | - | API key from Karakeep settings |
OPENAI_API_KEY | Yes* | - | OpenAI API key for embeddings |
OLLAMA_URL | No | - | Ollama URL if using local embeddings instead |
EMBEDDING_MODEL | No | text-embedding-3-small | Model for generating embeddings |
SYNC_INTERVAL_MINUTES | No | 5 | How often to check for new bookmarks |
QDRANT_URL | No | http://qdrant:6333 | Qdrant vector DB URL |
*Either OPENAI_API_KEY or OLLAMA_URL is required.
GET /search?q=productivity+techniques&limit=10
Response:
{
"results": [
{
"bookmarkId": "abc123",
"score": 0.89,
"title": "The GTD Method Explained",
"url": "https://example.com/gtd"
}
],
"query": "productivity techniques",
"took_ms": 45
}
POST /sync
GET /health
┌─────────────┐ ┌─────────────────────┐ ┌─────────────┐
│ Karakeep │────▶│ Semantic Search │────▶│ Qdrant │
│ │ │ (this app) │ │ (vector DB) │
└─────────────┘ └─────────────────────┘ └─────────────┘
│
▼
┌─────────────────┐
│ OpenAI / Ollama │
│ (embeddings) │
└─────────────────┘
Single container - Qdrant is bundled inside, no separate database needed!
services:
karakeep-semantic:
image: ghcr.io/jamesbrooksco/karakeep-semantic-search:latest
environment:
- KARAKEEP_URL=http://your-karakeep-ip:3000
- KARAKEEP_API_KEY=your-api-key
- OPENAI_API_KEY=sk-your-key
ports:
- "3001:3000"
volumes:
- karakeep_semantic_data:/qdrant/storage
volumes:
karakeep_semantic_data:
ghcr.io/jamesbrooksco/karakeep-semantic-search:latest/qdrant/storage → /mnt/user/appdata/karakeep-semanticKARAKEEP_URL = your Karakeep URLKARAKEEP_API_KEY = from Karakeep settingsOPENAI_API_KEY = your OpenAI key# Install dependencies
pnpm install
# Run in dev mode
pnpm dev
# Run tests
pnpm test
# Build
pnpm build
A ready-to-use skill is included in the skill/ folder. Copy skill/SKILL.md to your Clawdis skills directory and update the URL.
KARAKEEP_API_KEY environment variableMIT
TypeScript
92.8%
Dockerfile
7.2%
🔍 Add powerful semantic/vector search to your Karakeep bookmarks
Karakeep is great for hoarding bookmarks, but its search is keyword-based. This sidecar service adds semantic search - find bookmarks by meaning, not just exact words.
# Clone the repo
git clone https://github.com/jamesbrooksco/karakeep-semantic-search.git
cd karakeep-semantic-search
# Copy the example env file
cp .env.example .env
# Edit .env with your settings
nano .env
# Start everything
docker compose up -d
| Variable | Required | Default | Description |
|---|---|---|---|
KARAKEEP_URL | Yes | - | Your Karakeep instance URL (e.g., http://karakeep:3000) |
KARAKEEP_API_KEY | Yes | - | API key from Karakeep settings |
OPENAI_API_KEY | Yes* | - | OpenAI API key for embeddings |
OLLAMA_URL | No | - | Ollama URL if using local embeddings instead |
EMBEDDING_MODEL | No | text-embedding-3-small | Model for generating embeddings |
SYNC_INTERVAL_MINUTES | No | 5 | How often to check for new bookmarks |
QDRANT_URL | No | http://qdrant:6333 | Qdrant vector DB URL |
*Either OPENAI_API_KEY or OLLAMA_URL is required.
GET /search?q=productivity+techniques&limit=10
Response:
{
"results": [
{
"bookmarkId": "abc123",
"score": 0.89,
"title": "The GTD Method Explained",
"url": "https://example.com/gtd"
}
],
"query": "productivity techniques",
"took_ms": 45
}
POST /sync
GET /health
┌─────────────┐ ┌─────────────────────┐ ┌─────────────┐
│ Karakeep │────▶│ Semantic Search │────▶│ Qdrant │
│ │ │ (this app) │ │ (vector DB) │
└─────────────┘ └─────────────────────┘ └─────────────┘
│
▼
┌─────────────────┐
│ OpenAI / Ollama │
│ (embeddings) │
└─────────────────┘
Single container - Qdrant is bundled inside, no separate database needed!
services:
karakeep-semantic:
image: ghcr.io/jamesbrooksco/karakeep-semantic-search:latest
environment:
- KARAKEEP_URL=http://your-karakeep-ip:3000
- KARAKEEP_API_KEY=your-api-key
- OPENAI_API_KEY=sk-your-key
ports:
- "3001:3000"
volumes:
- karakeep_semantic_data:/qdrant/storage
volumes:
karakeep_semantic_data:
ghcr.io/jamesbrooksco/karakeep-semantic-search:latest/qdrant/storage → /mnt/user/appdata/karakeep-semanticKARAKEEP_URL = your Karakeep URLKARAKEEP_API_KEY = from Karakeep settingsOPENAI_API_KEY = your OpenAI key# Install dependencies
pnpm install
# Run in dev mode
pnpm dev
# Run tests
pnpm test
# Build
pnpm build
A ready-to-use skill is included in the skill/ folder. Copy skill/SKILL.md to your Clawdis skills directory and update the URL.
KARAKEEP_API_KEY environment variableMIT
TypeScript
92.8%
Dockerfile
7.2%