freedzhost.cloud

Homelab 16: keep everything you read, forever, with Karakeep

A bookmark is a promise that the page will still be there. Often it is not. Karakeep (formerly Hoarder) saves the page itself: the full archive, readable even when the original site is gone, with tags and a summary written by a model running at home. Ours also passes every saved page to our knowledge base, so our agents can search what we read.

How these figures were obtained. Measured on our own machines (see the protocol), usually a single run, with speeds as reported by the server itself; we do not publish raw logs. Treat them as orders of magnitude on this hardware, not as guarantees on yours. Figures from outside are labelled with their source.

Browser, phoneshare → saveKarakeepfull archiveLocal modeltags + summaryWebhooktoken in a headerYour knowledge basesearchable by agents
Save a page from the browser or the phone. Karakeep archives the whole page, a small local model tags and summarises it, and a webhook hands it to your knowledge base, where your agents can search it a minute later.

A bit of history

Bookmark-and-read-later services come and go; when one closes, years of saved pages vanish with it. Karakeep, first published as Hoarder and renamed in 2025, keeps a full copy of every page you save on your own server, and lets a local model summarise and tag it. The page survives even when the original site disappears.

1. Run it

Karakeep publishes a Docker Compose setup: the application, a headless Chrome to fetch pages, and Meilisearch for full-text search. Follow it, pin the versions, publish through your HTTPS proxy (Homelab 2), and install the browser extension and the phone app.

2. The settings that matter

SettingWhy, measured
CRAWLER_FULL_PAGE_ARCHIVE=true41,327 characters archived instead of 8,927: the whole page, not just its first screen
INFERENCE_ENABLE_AUTO_SUMMARIZATION=truea summary answers a search better than a raw page full of menus
INFERENCE_JOB_TIMEOUT_SEC=300tagging took 54 s on a long page with a small local model; the 30 s default cut it off
OCR_LANGS=fra+engFrench documents and images are read correctly
DB_WAL_MODE=trueanother program can read the database while Karakeep writes

For tags and summaries, point Karakeep at your model gateway (One gateway for all your models) through its OpenAI-compatible settings, and choose a small model: tagging does not need a large one.

3. Hand it to your agents

In Karakeep's settings, add a webhook to a small receiver of yours that exports new pages into your knowledge base. Put the token in Karakeep's auth token field, not in the URL: it is then sent as a header, and headers do not end up in proxy logs.

Traps we paid for

Our gateway's alias answered "I am the big model" while silently serving a 3B fallback. Ask the gateway which model actually served, never trust an alias (that is why our gateway now has no aliases at all).

Turn semantic search off if your gateway serves no embedding model: left on, indexing fails without a single visible error.

NEXTAUTH_URL is not only a redirect: the login checks requests against it. Set it to the address you really use, and behind a proxy add AUTH_TRUST_HOST=true. A login page that loads is not a login that works.

Importing 500 bookmarks fires 500 webhooks. Do not re-index on each one: let the receiver set a flag, and run the export once after 30 seconds of calm. Ours had a small VM killed by the out-of-memory killer before that change.

Sources

Found this useful? Tell us what to measure next.