Linkwarden
Self-hosted collaborative bookmark manager to collect, read, annotate, and fully preserve what matters, all in one place.
Alternative to: raindrop.io, pocket, instapaper
Linkwarden is a self-hosted, open-source collaborative bookmark manager that lets you collect, read, annotate, and fully preserve webpages in one place. It automatically captures a screenshot, PDF, and readable copy of every link so your bookmarks survive even if the original page disappears. Links can be organized into collections and tags, and shared or worked on together with a team, making it a self-hosted alternative to services like Raindrop.io, Pocket, and Instapaper.
Linkwarden Docker Compose example
Self-host Linkwarden on your own server, homelab, or VPS starting from this Docker Compose example.
It runs Linkwarden in Docker containers using the official ghcr.io/linkwarden/linkwarden:latest, postgres:16-alpine, getmeili/meilisearch:latest images, with persistent volumes and automatic restarts preconfigured.
Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.
services:
linkwarden:
image: ghcr.io/linkwarden/linkwarden:latest
restart: unless-stopped
depends_on:
- postgres
- meilisearch
environment:
# A random secret used to sign authentication tokens. Generate with: openssl rand -base64 32
NEXTAUTH_SECRET: "changeme"
# The full public URL of your instance, with /api/v1/auth appended.
NEXTAUTH_URL: "http://localhost:3000/api/v1/auth"
# Connection string to the bundled Postgres database. The password must match POSTGRES_PASSWORD below.
DATABASE_URL: "postgresql://postgres:changeme@postgres:5432/postgres"
# URL of the bundled Meilisearch full-text search engine.
MEILI_HOST: "http://meilisearch:7700"
# Master key for Meilisearch. Must match MEILI_MASTER_KEY on the meilisearch service and be at least 16 bytes.
MEILI_MASTER_KEY: "changeme_changeme_changeme"
volumes:
- data:/data/data
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
# Password for the bundled Postgres database. Must match the password in DATABASE_URL above.
POSTGRES_PASSWORD: "changeme"
volumes:
- pgdata:/var/lib/postgresql/data
meilisearch:
image: getmeili/meilisearch:latest
restart: unless-stopped
environment:
# Master key for Meilisearch. Must match MEILI_MASTER_KEY on the linkwarden service and be at least 16 bytes.
MEILI_MASTER_KEY: "changeme_changeme_changeme"
volumes:
- meili_data:/meili_data
volumes:
data:
pgdata:
meili_data:
Values set to changeme are required — replace them with your own
values before starting Linkwarden.
Prefer a managed setup? WinterFlow installs, configures, and updates Linkwarden for you using this same Docker Compose configuration.