Karakeep

Self-hosted bookmark manager that captures links, notes, images, and PDFs with AI tagging, full-text search, and automatic archiving.

26.5Kstars
1.3Kforks
GNU AGPLv3
TypeScript

Karakeep is a self-hostable bookmark-everything application built for people who compulsively save things from the internet and want to actually find them later. It captures links, notes, images, PDFs, and videos into a unified, searchable library — with AI automatically tagging and summarizing everything so you spend less time organizing and more time reading.

The application uses large language models (OpenAI or locally-run Ollama) to generate contextual tags and summaries for every saved item. Meilisearch powers full-text search across page content, notes, and OCR-extracted text from images. Playwright-driven headless browser crawling fetches complete page content and metadata, while monolith archives full HTML snapshots to defeat link rot and yt-dlp captures videos for offline viewing.

Beyond individual use, Karakeep supports collaborative bookmark lists, RSS feed auto-hoarding, a rule-based automation engine, and an MCP server that exposes your bookmark library to LLM agents. Browser extensions for Chrome, Firefox, and Safari enable one-click saving, and native iOS and Android apps bring the full experience to mobile with synchronized reading progress.

Deployment is Docker-first with a three-container compose setup (web+workers, Chrome headless, Meilisearch), and a managed cloud option at cloud.karakeep.app is available for those who prefer not to self-host. The project has over 26,000 GitHub stars, 49 releases since February 2024, and a Discord community of active contributors.

What You Get

  • AI-powered automatic tagging and summarization - Sends saved content to OpenAI or locally-run Ollama models to generate contextual tags and prose summaries, with configurable per-user controls to restrict AI tags to an existing tag subset for consistency.
  • Full-text search powered by Meilisearch - Indexes the complete text of saved pages, notes, and OCR-extracted image content so you can search across thousands of bookmarks with sub-second results.
  • Full-page HTML archiving with monolith - Captures self-contained HTML snapshots of web pages including embedded assets, preserving content against link rot so archived pages render correctly without internet access.
  • LLM-based and Tesseract OCR for images - Extracts readable text from saved images and PDFs using optical character recognition, making visual content fully searchable and includable in AI summaries.
  • Automatic video archiving via yt-dlp - Downloads and stores videos locally from YouTube and hundreds of other platforms when a video URL is bookmarked, with configurable storage settings.
  • Browser extensions for Chrome, Firefox, and Safari - Enables one-click bookmarking directly from any tab with automatic metadata prefetching, note attachment, and tag suggestions.
  • Native iOS and Android apps with sync - Full-featured mobile apps with synchronized reading progress across devices, highlights support, reader view, and sharing modal for adding bookmarks from any app.
  • Collaborative bookmark lists - Multiple users can contribute to shared lists with real-time updates, owner avatars, and invitation management, making Karakeep usable as a team knowledge base.
  • Rule-based automation engine - Define conditions (URL contains, title matches, tag present) and actions (auto-tag, add to list, archive) that execute automatically when bookmarks are added or modified.
  • RSS feed auto-hoarding - Subscribe to RSS feeds and have new articles automatically crawled, tagged, and added to your library on a scheduled basis.
  • MCP server for LLM agent integration - Exposes your bookmark library to LLM agents via the Model Context Protocol, allowing AI tools like OpenClaw and Hermes to search and retrieve your saved content.
  • SSO with OAuth and multi-language support - Supports OAuth providers (Google, GitHub) plus Turnstile-based signup protection, with community translations via Weblate covering dozens of languages.

Common Use Cases

  • Building a personal research archive - A researcher saves academic papers, blog posts, and documentation pages from different sources; Karakeep auto-tags by topic using AI, archives the full content, and makes everything searchable so they can find a specific claim across 2,000 saved items without remembering which site it came from.
  • Replacing a read-it-later app with a local-first alternative - A developer who used Pocket or Instapaper migrates their existing library using built-in importers, then saves new articles via the browser extension or mobile share sheet while Karakeep fetches full content and generates summaries so they can triage what to actually read.
  • Curating a newsletter or content calendar - A content creator saves links from Twitter, Hacker News, and RSS feeds into topic-specific lists, uses AI summaries to quickly draft takes without re-reading every article, and shares selected lists with collaborators to coordinate coverage.
  • Self-hosted team knowledge management - A small remote team shares Karakeep with SSO, uses collaborative lists to organize competitor research, product specs, and design references, and configures the rule engine to auto-categorize content by domain or keyword so the library stays organized without manual effort.
  • Preserving digital ephemera against link rot - A journalist or historian saves articles, forum posts, and news coverage with full-page archiving enabled, building a permanent local record of sources that remain accessible even after the original sites go offline.
  • Powering LLM workflows with personal context - A developer uses Karakeep’s MCP server to give their local LLM agent access to their entire bookmark library, enabling retrieval-augmented generation over personally curated content.

Under The Hood

Architecture Karakeep is structured as a Turborepo monorepo with clearly delineated application and package workspaces. The web interface runs as a Next.js 15 application with the App Router, while background processing is handled by a separate workers process hosting ten independent worker classes — crawler, inference, rule engine, feed, video, search, backup, import, asset preprocessing, and webhook workers. These communicate exclusively through a pluggable queue abstraction that ships with two backends: liteque for SQLite-backed in-process queuing on single-node deployments, and Restate for distributed durable execution with exactly-once semantics. The tRPC layer, shared types, database schema, and inference client are factored into dedicated packages consumed by both the web and workers processes, ensuring a single source of truth for domain logic across the full stack.

Tech Stack The entire codebase is written in TypeScript running on Node.js 24. The web frontend uses Next.js 15 with the App Router; the mobile apps use React Native via Expo SDK 54 with native tabs and screens. Client-server communication uses tRPC for end-to-end type safety integrated with TanStack Query for state management. The database is SQLite accessed through Drizzle ORM with a migration history of over forty schema versions. Meilisearch handles both full-text search and vector similarity search for semantic bookmark retrieval. Playwright (with stealth plugin and ad-blocker integration) drives headless Chrome for content crawling. AI inference routes to OpenAI, Ollama, or any OpenAI-compatible endpoint. Monolith archives full HTML pages, yt-dlp captures videos, and Tesseract or LLM-based OCR extracts text from images. Oxlint and Oxfmt (Rust-based tools) replace ESLint and Prettier for fast formatting and linting. Prometheus metrics and OpenTelemetry tracing are instrumented throughout workers.

Code Quality The project ships with comprehensive Vitest test suites covering unit tests for the search query parser, concurrency utilities, and feed parser, plus integration tests for every tRPC router using a real in-memory SQLite database with fixture data. Zod schemas validate all API inputs and configuration values, and Drizzle provides typed query builders that catch schema mismatches at compile time. GitHub Actions CI runs typecheck, lint, format, and test passes on every pull request. Workers implement explicit retry logic with configurable retry counts, idempotency keys to prevent duplicate processing, and event logging that captures job outcomes for admin visibility. Error handling is thorough at worker boundaries with typed error propagation, though the codebase does not use a custom error class hierarchy.

What Makes It Unique The pluggable queue and storage architecture is the most technically distinctive aspect of Karakeep — swapping from liteque to Restate changes the deployment model from a single-container app to a distributed durable execution system without touching application code. The multi-modal AI pipeline is unusually deep for a self-hosted tool: it handles text summarization, embedding generation for semantic search, LLM-based OCR as an alternative to Tesseract, AI tag suggestions constrained to existing tags for consistency, and per-user model configuration — all routing through a unified InferenceClientFactory that supports any OpenAI-compatible provider. The combination of an MCP server, a REST API, a CLI, and official agentic skills makes Karakeep one of the few self-hosted applications explicitly designed to serve as a retrieval backend for LLM workflows.

Self-Hosting

Karakeep is released under the GNU Affero General Public License version 3 (AGPL-3.0), owned by Localhost Labs Ltd. The AGPL is a strong copyleft license: you can run it commercially, modify it, and redistribute it, but if you deploy a modified version as a network service — meaning other users interact with it over the internet — you must make your modified source code available to those users under the same license. For most self-hosting scenarios (personal use, internal team use) this distinction is irrelevant, but organizations that intend to offer Karakeep as a hosted service to external customers need to either comply with the AGPL’s source disclosure requirements or negotiate a separate commercial license with Localhost Labs.

Running Karakeep yourself requires orchestrating three services: the main application container (which bundles both the Next.js web frontend and the background workers), a headless Chrome instance for page crawling, and Meilisearch for full-text search. The provided Docker Compose file covers this setup. Storage requirements depend heavily on usage — full-page HTML archives, video downloads, and PDF backups accumulate quickly for active hoarders. You are responsible for database backups (SQLite file), keeping the Meilisearch index synchronized, and managing updates by pulling new Docker images on each release. The project ships roughly one to two releases per month, and keeping up with them matters because several recent releases have patched security vulnerabilities in upstream dependencies.

A managed cloud tier at cloud.karakeep.app removes all of the above operational burden. Subscriptions support the project’s continued development and provide access to the same feature set without configuring containers, managing storage, or handling updates. The cloud offering does not currently advertise SLAs, dedicated support tiers, or enterprise SSO beyond what the self-hosted version provides, so large organizations with uptime or compliance requirements may find the self-hosted path with their own infrastructure controls more appropriate.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack

No spam. Unsubscribe anytime.

Join 750+ subscribers
No spam. Unsubscribe anytime.

Search