Deploy Karakeep
Bookmark app that saves a readable copy of every page you keep
Just deployed
meilisearch
Just deployed
/meili_data
karakeep
Just deployed
/data
karakeep-assets
Bucket
Just deployed

Deploy and Host Karakeep on Railway
Karakeep is an open-source bookmark-everything app for people tired of watching saved links rot. Paste a URL and it fetches the page in a real browser, keeps a screenshot and a readable copy of the text, and indexes the lot so you can find it again by any word on the page — not just the words in the title. It also takes notes, images and PDFs, sorts them into nestable lists and tags, and subscribes to RSS feeds. It began life as Hoarder, is maintained by Localhost Labs under AGPL-3.0, and ships browser extensions, mobile apps, a REST API and an MCP server.
Deploy Karakeep on Railway and you get the production shape, not the smallest thing that boots. Three services are wired together: karakeep runs the web app and worker pool with the SQLite database on a persistent volume; chrome is a Chrome Headless Shell the crawler drives over the private network to render JavaScript-heavy pages and capture screenshots; meilisearch holds the full-text and vector index on its own volume. A managed object storage bucket takes every screenshot and archived page. Only the web app is public.

Getting Started with Karakeep on Railway
Open the deployed URL and you land on a sign-in page. Karakeep has no default credentials, so click Sign up and create the first account, which automatically becomes the server administrator. Do that straight away: registration stays open until an account exists, so once you are in, set DISABLE_SIGNUPS=true on the karakeep service to close it behind you. Then paste any link into the New Item box and press Save. Within seconds the card fills in with the page title, cover image and a screenshot of the page as the crawler saw it — the quickest confirmation that the browser service and object storage both work. Click the card for the reader view, where the archived text sits beside that bookmark's tags, notes and attachments. Search for a word from the body of the page rather than its title to confirm the index is live. The admin area at /admin/overview reports the search engine, browser, queue and vector store as four separate connections.




About Hosting Karakeep
A bookmark is only useful if the thing it points at is still there. Karakeep treats every saved link as content to archive rather than an address to remember, so notes, documentation and articles stay readable after the original goes behind a paywall or disappears. Self-hosting also keeps the archive private — nothing about what you read leaves your own infrastructure.
Key features:
- Full-page archiving with screenshots, readable text and optional PDF and video capture
- Full-text search across titles, URLs, tags and the crawled body of every page
- Optional AI tagging and summarisation via OpenAI or a local Ollama server
- Nestable lists, tags, highlights, RSS subscriptions and a rule engine
- Browser extensions, mobile apps, a REST API, webhooks and an MCP server
- Imports from Pocket, Omnivore, Linkwarden, Raindrop and HTML bookmark files
Each supporting service does one job. Chrome exists because much of the web no longer renders without JavaScript: the crawler has it load the page, run its scripts and return a screenshot and the finished DOM. Meilisearch holds the search index and, with embeddings on, the vector index. Object storage keeps the heavy artefacts off the volume.
Why Deploy Karakeep on Railway
Railway removes the parts of self-hosting that are not the app:
- Browser, search engine and object storage provisioned and wired together for you
- Private networking keeps the crawler and search index off the public internet
- Persistent volumes survive redeploys, so the archive and index are not ephemeral
- A public HTTPS domain and certificate issued automatically, with usage-based pricing
Common Use Cases
- A durable research archive — keep the readable text long after the original page changes or vanishes
- An AI-assisted knowledge base — the MCP server lets an assistant search and read your saved pages
Dependencies for Karakeep
- karakeep —
ghcr.io/karakeep-app/karakeep:release, the all-in-one web and worker image. Its volume at/dataholds the SQLite database and job queue. - chrome — Chrome Headless Shell from
ghcr.io/karakeep-app/karakeep-chrome:release. Private, no volume. - meilisearch —
getmeili/meilisearch:v1, pinned to the major because it owns an on-disk index format. Its volume at/meili_dataholds the index and snapshots. - Object storage bucket — S3-compatible storage for screenshots, archived HTML and images.
Source: github.com/karakeep-app/karakeep.
Environment Variables Reference
| Variable | Service | Purpose |
|---|---|---|
NEXTAUTH_URL | karakeep | Public URL; sign-out and share links are built from it |
DISABLE_SIGNUPS | karakeep | Set to true once your first account exists |
MEILI_ADDR / MEILI_MASTER_KEY | karakeep | Search engine address and key |
BROWSER_WEB_URL | karakeep | Address of the Chrome service the crawler drives |
ASSET_STORE_S3_* | karakeep | Storage credentials; setting the endpoint moves assets off the volume |
OPENAI_API_KEY | karakeep | Optional — enables automatic tagging, summaries and semantic search |
Deployment Dependencies
- Runtime: Node.js 24, Chrome Headless Shell 151, Meilisearch 1.x
- Images: karakeep and karakeep-chrome, meilisearch
- Docs: docs.karakeep.app
Hardware Requirements for Self-Hosting Karakeep
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 2 vCPU across all services | 4 vCPU |
| RAM | 2 GB total | 4 GB — Chrome is the hungry one |
| Storage | 5 GB volumes plus object storage | 10 GB plus object storage that grows |
| Runtime | Linux container, x86-64 or arm64 | — |
Crawling is bursty: memory peaks while a page renders, then settles. Raise CRAWLER_NUM_WORKERS only if you have RAM to match.
Self-Hosting Karakeep with Docker
Outside Railway the smallest useful setup is three containers — a minimal docker-compose.yml:
services:
web:
image: ghcr.io/karakeep-app/karakeep:release
ports: ["3000:3000"]
volumes: ["data:/data"]
environment:
DATA_DIR: /data
NEXTAUTH_URL: http://localhost:3000
NEXTAUTH_SECRET: replace-with-openssl-rand-base64-36
MEILI_ADDR: http://meilisearch:7700
MEILI_MASTER_KEY: replace-with-a-long-random-string
BROWSER_WEB_URL: http://chrome:9222
chrome:
image: ghcr.io/karakeep-app/karakeep-chrome:release
init: true
meilisearch:
image: getmeili/meilisearch:v1
volumes: { data: {} }
Once it is up, create a key under Settings → API Keys and add bookmarks from anywhere with curl:
curl -X POST https://your-karakeep-domain/api/v1/bookmarks \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"type":"link","url":"https://example.com/article"}'
How Much Does Karakeep Cost to Self-Host?
Karakeep is free and open source under AGPL-3.0, with no paid tier, seat limits or feature gates — the self-hosted build is the whole product. The only costs are infrastructure: on Railway you pay for compute, the two volumes and the object storage the archive actually uses, which for a personal library is small. AI tagging is the one optional extra that costs money, and only if you point it at OpenAI rather than a local Ollama server.
FAQ
What is Karakeep? An open-source, self-hosted bookmark manager that archives every page you save — screenshot, readable text and metadata — and makes the archive searchable. It was previously called Hoarder.
Why is Meilisearch needed if the app already has a database? Karakeep stores bookmarks in SQLite but delegates search to Meilisearch, which is what makes full-text search over the crawled body of every page fast. It also holds the vector index when semantic search is on.
How do I stop other people signing up on my Karakeep instance?
Create your own account first — it becomes the administrator — then set DISABLE_SIGNUPS=true on the karakeep service. Existing accounts keep working; the sign-up form disappears.
Where are screenshots and archived pages stored? In the object storage bucket, not on the volume. The volume holds only the SQLite database and the job queue, so the archive can grow without resizing anything.
Do I need an OpenAI key to use self-hosted Karakeep?
No. Saving, crawling, archiving, screenshots, tags, lists and full-text search all work with no key. Setting OPENAI_API_KEY or OLLAMA_BASE_URL adds automatic tagging, summaries and semantic search on top.
Template Content
