linkding

A self-hosted bookmark manager that's minimal, fast, and Docker-first. Tag, search, and organize your entire web bookmark collection with a modern UI — no browser sync required.

yaml

docker-compose.yml

services:
  linkding:
    container_name: ${LD_CONTAINER_NAME:-linkding}
    image: sissbruecker/linkding:latest
    ports:
      - ${LD_HOST_PORT:-9090}:9090
    volumes:
      - ${LD_HOST_DATA_DIR:-./data}:/etc/linkding/data
    restart: unless-stopped

.ENV

.env example

# Docker container name
LD_CONTAINER_NAME=linkding

# Port on the host system that the application should be published on
LD_HOST_PORT=9090

# Directory on the host system that should be mounted as data dir into the Docker container
LD_HOST_DATA_DIR=./data

# Optional context path (must end with /)
# LD_CONTEXT_PATH=linkding/

# Initial superuser account (leave empty to skip auto-creation)
LD_SUPERUSER_NAME=admin
# LD_SUPERUSER_PASSWORD=changeme123

# Disable background tasks (parsing, etc.) - set to True to disable
# LD_DISABLE_BACKGROUND_TASKS=False

# Disable URL validation for bookmarks
# LD_DISABLE_URL_VALIDATION=False

# Auth proxy support (set True to enable)
# LD_ENABLE_AUTH_PROXY=False
# LD_AUTH_PROXY_USERNAME_HEADER=X-User
# LD_AUTH_PROXY_LOGOUT_URL=

# Disable login form (enforce OIDC/proxy auth)
# LD_DISABLE_LOGIN_FORM=False

# Trusted CSRF origins (comma-separated)
# LD_CSRF_TRUSTED_ORIGINS=https://example.com

# Database engine: sqlite (default) or postgres
# LD_DB_ENGINE=sqlite
# LD_DB_DATABASE=linkding
# LD_DB_USER=linkding
# LD_DB_PASSWORD=changeme
# LD_DB_HOST=localhost
# LD_DB_PORT=5432
# LD_DB_OPTIONS={}

deployment

Quick Start

  1. Create a working directory named after the service.
  2. Copy the compose file and generated `.env` into that directory.
  3. Review the variables and replace placeholders with real values.
  4. Run `docker compose up -d`.
mkdir linkding
cd linkding
# create docker-compose.yml
# create .env
docker compose up -d