Wallabag is a self-hosted read-it-later app. Save any web article with one click, and Wallabag fetches the text, strips ads and clutter, and keeps a clean, readable copy, even if the original disappears. Read on the web, on your phone, or export to e-readers. With Pocket shut down in 2025, it’s one of the best ways to keep your reading list under your own control.

Requirements

  • A small VPS: 1 vCPU and 1–2 GB RAM.
  • Docker and Docker Compose. See install Docker.
  • A domain, e.g. read.example.com.

Docker Compose

# /opt/wallabag/compose.yaml
services:
  wallabag:
    image: wallabag/wallabag:latest
    restart: unless-stopped
    environment:
      SYMFONY__ENV__DATABASE_DRIVER: pdo_pgsql
      SYMFONY__ENV__DATABASE_HOST: db
      SYMFONY__ENV__DATABASE_PORT: 5432
      SYMFONY__ENV__DATABASE_NAME: wallabag
      SYMFONY__ENV__DATABASE_USER: wallabag
      SYMFONY__ENV__DATABASE_PASSWORD: change-me-db
      POSTGRES_PASSWORD: change-me-root
      POSTGRES_USER: postgres
      SYMFONY__ENV__DOMAIN_NAME: https://read.example.com
      SYMFONY__ENV__SERVER_NAME: "My Wallabag"
      SYMFONY__ENV__FOSUSER_REGISTRATION: "false"
      SYMFONY__ENV__REDIS_HOST: redis
      SYMFONY__ENV__SECRET: change-me-long-random
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      - ./images:/var/www/wallabag/web/assets/images
    depends_on: [db, redis]

  db:
    image: postgres:16
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: change-me-root
      POSTGRES_USER: postgres
    volumes:
      - ./db:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    restart: unless-stopped
cd /opt/wallabag && docker compose up -d
docker compose logs -f wallabag      # the first start provisions the database

The default login is wallabag / wallabag. Change the password immediately, or create your own admin user and delete the default one:

docker compose exec wallabag /var/www/wallabag/bin/console fos:user:create --super-admin --env=prod

Generate the secret with openssl rand -hex 32. Check the image documentation for current variable names.

HTTPS with Nginx

server {
    server_name read.example.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    # listen 443 ssl; certbot --nginx -d read.example.com
}

SYMFONY__ENV__DOMAIN_NAME must match the public URL. See Let’s Encrypt.

Saving articles

  • Browser extensions for Firefox and Chrome: set your server URL and an API client (created under API clients management).
  • Mobile apps: the official Wallabag apps for Android (also on F-Droid) and iOS, with sharing from any app.
  • Bookmarklet, or email-to-wallabag via integrations.
  • Import from Pocket, Instapaper, Pinboard, browser exports or other Wallabag instances (Import menu). Redis handles large imports asynchronously.

Organise and read

  • Tagging rules tag articles automatically (e.g. domainName = "github.com" → dev, or readingTime >= 15 → longread).
  • Annotations and highlights, starred and archived states, and full-text search.
  • Export to EPUB, MOBI, PDF, CSV or JSON. Send a batch of saved articles to your e-reader.
  • RSS feeds of your unread, starred or tagged articles, which integrate with RSS readers. See Miniflux and FreshRSS.

Paywalls and site credentials

Some sites need credentials or special parsing. Wallabag uses site configuration files (graby/fivefilters) for better extraction, and supports site credentials for paywalled sources you subscribe to. Respect each site’s terms.

Backups and updates

  • Back up the database and the images folder:
docker compose exec -T db pg_dumpall -U postgres > /backups/wallabag-$(date +%F).sql
tar -czf /backups/wallabag-images-$(date +%F).tar.gz -C /opt/wallabag images

See backup strategy.

Quick reference

Task Command / setting
Start docker compose up -d
Default login wallabag / wallabag (change it!)
Public URL SYMFONY__ENV__DOMAIN_NAME
Disable signups SYMFONY__ENV__FOSUSER_REGISTRATION=false
API for apps API clients management
Create admin bin/console fos:user:create --super-admin --env=prod

Related: Docker Compose and n8n workflow automation.

  • Self-Hosting
  • Productivity
  • Docker