Linkwarden: Use Docker Compose for Linkwarden as replacement for Pocket

Pocket will be ended by October 2025. But where to save your documents you want to read later? Here's my solution using Linkwarden on Docker...

Linkwarden: Use Docker Compose for Linkwarden as replacement for Pocket
The logo of Linkwarden

"Pocket is a free service from Mozilla that makes it easy to discover great content that’s personalized to your interests, and save this content so you can return to it later – on any device, at any time."

I was using Pocket for many years. Unfortunately, Mozilla - the owner of Pocket - decided to discontinue this service. So I needed a replacement.

Linkwarden could be a suitable replacement, as it matches many of my requirements:

Linkwarden needs 3 components:

  • Linkwarden application: it provides the website and all functionalities
  • Database: PostgreSQL is used, which is in fact my favourite for open source projects
  • Meilisearch: "Meilisearch is a flexible and powerful user-focused search engine that can be added to any website or application"

Here's my docker-compose.yml:

services:
  db:
    image: postgres:17
    env_file: .env
    restart: always
    volumes:
      - ./pgdata:/var/lib/postgresql/data
  app:
    env_file: .env
    hostname: linkwarden
    environment:
      - DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@db:5432/postgres
    restart: always
    image: ghcr.io/linkwarden/linkwarden:latest # comment to build from source
    ports:
      - 3000:3000
    volumes:
      - ./data:/data/data
    depends_on:
      - db
      - meilisearch
  meilisearch:
    image: getmeili/meilisearch:v1.12.8
    restart: always
    env_file:
      - .env
    volumes:
      - ./meili_data:/meili_data
In this case, I used meilisearch:v1.12.8, but I also tested meilisearch:latest. When you just upgrade from an older version like 1.2.* to latest (what now is at something like 1.15), there will be an issue as Meilisearch neads an upgrade. The easiest way to resolve that is to completely remove the Meilisearch container and run docker compose pull && docker compose up -d again.

Additionally, there's an .env file. These are the parameters which need to be set:

NEXTAUTH_URL=http://<hostname>/api/v1/auth
NEXTAUTH_SECRET=XxXxXxXx
DATABASE_URL=postgresql://<db hostname>:<password>@db:5432/linkwarden
POSTGRES_PASSWORD=XxXxXxXx

First, let's pull the containers:

# docker compose pull

Then, let's start them:

# docker compose up -d

After that, you'll be able to start Linkwarden using your web browser; just use the hostname and the port which was exposed by Docker:

http://<hostname>:3000

Now, Linkwarden is available (sorry, my site is already configured in German):

The startpage of Linkwarden

You can now start to add new links:

The button to add new links, files, or collections

If you wish, you can also import your links from Pocket. Just export them and import in Linkwarden - Account -> Settings -> Import and Export -> Import links

In my case I use Nginx Proxy Manager - it provides a secure HTTPS connection to Linkwarden including a certificate from Let's Encrypt. And I can use it from the whole internet...

Subscribe to Martin's Blog

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe