# Linkding

Self-hosted bookmark manager with tags and search.

- Replaces: [Pocket](https://openlogs.fyi/alternatives/pocket)
- Summary: Paid read-later services, such as Pocket.
- Stack: Python (language)
- Deployment: docker_compose
- License: MIT (osi) [source](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/LICENSE.txt)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/README.md), read 2026-10-22)
- Difficulty: easy. 1 service, 1 volume mount, 1 env value to set, no elevated host access. Heuristic score 1 of 11: easy.
- Requirements: not stated
- Repository: [sissbruecker/linkding](https://github.com/sissbruecker/linkding)

## Install

1. Docker with the Compose plugin ([source](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docs/src/content/docs/installation.md))

   ```text
   A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
   ```

2. Save the compose file as docker-compose.yml ([source](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml))

   ```yaml
   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"
       env_file:
         - .env
       restart: unless-stopped
   ```

3. Save as .env next to the compose file ([source](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/.env.sample))

   ```dotenv
   # 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
   
   # Can be used to run linkding under a context path, for example: linkding/
   # Must end with a slash `/`
   LD_CONTEXT_PATH=
   # Username of the initial superuser to create, leave empty to not create one
   LD_SUPERUSER_NAME=
   # Password for the initial superuser, leave empty to disable credentials authentication and rely on proxy authentication instead
   LD_SUPERUSER_PASSWORD=
   # Option to disable background tasks
   LD_DISABLE_BACKGROUND_TASKS=False
   # Option to disable URL validation for bookmarks completely
   LD_DISABLE_URL_VALIDATION=False
   # Enables support for authentication proxies such as Authelia
   LD_ENABLE_AUTH_PROXY=False
   # Name of the request header that the auth proxy passes to the application to identify the user
   # See docs/Options.md for more details
   LD_AUTH_PROXY_USERNAME_HEADER=
   # The URL that linkding should redirect to after a logout, when using an auth proxy
   # See docs/Options.md for more details
   LD_AUTH_PROXY_LOGOUT_URL=
   # Disables the login form, useful to enforce OIDC authentication
   LD_DISABLE_LOGIN_FORM=False
   # List of trusted origins from which to accept POST requests
   # See docs/Options.md for more details
   LD_CSRF_TRUSTED_ORIGINS=
   
   # Database settings
   # These are currently only required for configuring PostreSQL.
   # By default, linkding uses SQLite for which you don't need to configure anything.
   
   # Database engine, can be sqlite (default) or postgres
   LD_DB_ENGINE=
   # Database name (default: linkding)
   LD_DB_DATABASE=
   # Username to connect to the database server  (default: linkding)
   LD_DB_USER=
   # Password to connect to the database server
   LD_DB_PASSWORD=
   # The hostname where the database is hosted (default: localhost)
   LD_DB_HOST=
   # Port use to connect to the database server
   # Should use the default port if not set
   LD_DB_PORT=
   # Any additional options to pass to the database (default: {})
   LD_DB_OPTIONS=
   ```

4. What the compose file check ran with ([source](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docs/src/content/docs/installation.md))

   ```text
   The compose file check ran together with .env.sample from the same commit, saved as .env. The folder held only these files. The installation guide tells the reader to download docker-compose.yml and .env.sample, rename the sample to .env, set the parameters and start it with docker compose.
   ```

5. Start it ([source](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docs/src/content/docs/installation.md))

   ```bash
   docker compose up -d
   ```

6. Open the app ([source](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml))

   ```text
   Open http://localhost:9090. The compose file publishes host port 9090 for the linkding service.
   ```

Compose file check: config_ok on 2026-10-22.

## Gotchas and maintenance

### Gotchas

- Some images use the latest tag or no tag: Images without a pinned version: linkding: sissbruecker/linkding:latest. A later pull can get a different version. ([source](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml), checked 2026-10-22)
- The compose file publishes host ports: Host ports: 9090 (linkding). A port without a host address listens on all host network interfaces. ([source](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml), checked 2026-10-22)
- The compose file mounts host folders: Host paths mounted into containers: ${LD_HOST_DATA_DIR at -./data} (linkding). ([source](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 237
- Stars: 11329, forks: 666
- Last push: 2026-10-01 (21 days ago)
- Latest release: v1.47.0 on 2026-09-13 (39 days ago)

## Sources

- [Repository: https://github.com/sissbruecker/linkding](https://github.com/sissbruecker/linkding)
- [License: https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/LICENSE.txt](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/LICENSE.txt)
- [Business model: https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/README.md](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/README.md)
- [Compose file: https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml)
- [Install step: https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docs/src/content/docs/installation.md](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docs/src/content/docs/installation.md)
- [Install step: https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/.env.sample](https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/.env.sample)

---
Canonical: https://openlogs.fyi/tools/linkding  
Last updated: 2026-10-22
