Hoarder is now called Karakeep. It gives saved links, notes, images and PDFs a home you can search and organise. The useful question is whether it helps you find material again: automatic tags are convenient, but a bookmark collection still needs useful names, occasional curation and a backup.

What Karakeep Actually Saves

The maintained Karakeep project describes a bookmark manager with full-text search, lists, highlights and optional AI tagging. It is different from a general file-sync service. Saving a link creates a record; background jobs then try to fetch its content. A successful save does not prove that every image, video or interactive element was archived.

For example, keep a list for a planned Raspberry Pi project and add a short note explaining why each link matters. Later, a search for the component name should lead to the reference and your note. This is more useful than a large pile of unexplained URLs, particularly when several articles describe different hardware revisions.

Paywalls, sign-in requirements, anti-bot measures and changing websites can prevent a complete capture. Check the saved result before relying on it. Preserve the original URL and publication context so that a historical snapshot is not mistaken for current advice.

Install the Maintained Stack

Use Docker Engine and the Docker Compose plugin on a supported host. Follow the official Docker installation rather than combining old Hoarder examples with current images. The upstream stack connects the application, a Chromium service and Meilisearch, with persistent volumes already defined.

In a new directory, download and inspect the upstream file. These shell commands assume a Linux terminal with curl installed:

mkdir karakeep-app
cd karakeep-app
curl -fL https://raw.githubusercontent.com/karakeep-app/karakeep/main/docker/docker-compose.yml -o docker-compose.yml
openssl rand -base64 36
openssl rand -base64 36

The two generated values are separate random secrets, encoded in Base64. Create a private .env file beside the Compose file. Replace both placeholders before starting; do not reuse them or publish the file.

KARAKEEP_VERSION=release
NEXTAUTH_SECRET=REPLACE_WITH_FIRST_GENERATED_SECRET
MEILI_MASTER_KEY=REPLACE_WITH_SECOND_GENERATED_SECRET
NEXTAUTH_URL=http://localhost:3000

release is a moving stable tag. For a repeatable deployment, choose a supported version from the project's releases and record it. Keep the compatible browser and search versions from the matching upstream stack; independently upgrading Meilisearch can make its existing index incompatible.

For a first test on the Docker host, change the application's port mapping to "127.0.0.1:3000:3000". This binds it to that host rather than every interface. Then validate and start the stack:

docker compose config --quiet
docker compose up -d
docker compose ps
docker compose logs --tail=100 web

Open http://localhost:3000 on the same host. If your browser runs on another machine, localhost refers to that machine instead. Use a deliberate private access method or a properly configured proxy, and set NEXTAUTH_URL to the address readers actually use. Keep Chrome's debugging port and Meilisearch private. A successful syntax check does not establish that the application can reach every dependency.

Test Saving Before Enabling AI

Register your account through the application, save one harmless public article and add a note and manual tag. Confirm that its title is sensible, the captured text is readable and a search finds a distinctive phrase. Restart the stack without deleting volumes, then check that the bookmark and account remain. These are proposed acceptance checks, not measurements from a TechDecode test deployment.

Next try an image or PDF you are allowed to store. Search and OCR results depend on the file and processing outcome; image-only scans and poor-quality text can need manual notes. Check jobs and logs when a record exists but its content or tags do not appear.

Optional AI and Archiving

AI tagging is optional. The configuration reference documents provider settings and crawler options. For Ollama, use OLLAMA_BASE_URL with an endpoint reachable from the application container and select an installed model through INFERENCE_TEXT_MODEL. An image model must support the required vision requests. Inside a container, localhost normally refers to that container, not a separate Ollama server.

The context setting is case-sensitive: INFERENCE_CONTEXT_LENGTH. A larger value lets the model receive more source text, within its own limits, but also consumes more resources. Review suggested tags before treating them as an accurate description. A mistaken tag can make an important reference harder to find.

A hosted provider can receive the content supplied for inference and can charge for API use. A local model avoids sending those inference requests to a hosted provider, but the crawler still contacts bookmarked websites. Self-hosting therefore does not make all network activity private or remove electricity and hardware costs.

Full-page archival, full-page screenshots and video downloads are separate optional settings, not promises that every bookmark has a complete offline copy. Enable one option at a time, save a test link and inspect the resulting asset and disk usage. Avoid enabling unrestricted downloads before checking free space and retention needs.

Import, Curate and Recover

The import guide lists supported export formats. Use the format produced by the source service rather than assuming any CSV or JSON will work. Try a small representative collection first and compare titles, tags and URLs. Import completion and completion of later crawling or AI jobs are different events.

Keep the original export until you have checked the imported collection. Remove obvious duplicates only after comparing their notes and captured content. A regular review of a project list can also identify references that need a newer version or a clearer explanation.

For recovery, retain the Compose file, private environment settings and persistent application data, including stored assets. Identify the actual volume names with docker volume ls; a Compose project name can change their prefixes. Make a consistent backup by stopping writes during the copy or using a supported backup process. Store an additional copy away from the server.

Restore into an isolated test instance before depending on the backup. Check account access, bookmarks, notes and several attachments, then check search. The troubleshooting guide explains provider reachability and search-index compatibility. Reindexing can repair a derived search index; it cannot recover missing application records or assets.

Choose Karakeep when searchable references and notes solve a real problem for you. Judge it by whether you can retrieve your own material reliably, rather than an unsupported claim about import speed, search latency or universal archive fidelity.