{
  "schema_version": 1,
  "generated_at": "2026-10-23T00:00:00.000Z",
  "canonical_url": "https://openlogs.fyi/tools/linkding",
  "slug": "linkding",
  "name": "Linkding",
  "tagline": "Self-hosted bookmark manager with tags and search.",
  "replaces": {
    "summary": "Paid read-later services, such as Pocket.",
    "products": [
      {
        "slug": "pocket",
        "name": "Pocket",
        "vendor": "Mozilla",
        "url": "https://openlogs.fyi/alternatives/pocket"
      }
    ]
  },
  "stack": [
    {
      "kind": "language",
      "name": "Python"
    }
  ],
  "deployment_methods": [
    "docker_compose"
  ],
  "requirements": {
    "min_ram_mb": null,
    "min_cpu_cores": null,
    "source_url": null
  },
  "license": {
    "spdx": "MIT",
    "class": "osi",
    "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/LICENSE.txt"
  },
  "business_model": {
    "value": "unknown",
    "notes": "The README at the pinned commit does not state a business model, so it stays unknown.",
    "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/README.md",
    "checked_at": "2026-10-22"
  },
  "difficulty": {
    "value": "easy",
    "reason": "1 service, 1 volume mount, 1 env value to set, no elevated host access. Heuristic score 1 of 11: easy."
  },
  "repository": {
    "owner": "sissbruecker",
    "name": "linkding",
    "url": "https://github.com/sissbruecker/linkding"
  },
  "compose_check": {
    "status": "config_ok",
    "validated_at": "2026-10-22",
    "summary": "config_ok on 2026-10-22"
  },
  "recipe": {
    "version": 1,
    "source_path": "docker-compose.yml",
    "source_repo": "sissbruecker/linkding",
    "source_commit_sha": "27b7303baf41bb28babc610ac8eaa486e1ddfab5",
    "source_kind": "app_repo",
    "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml"
  },
  "install_steps": [
    {
      "order": 1,
      "kind": "prerequisite",
      "language": "text",
      "label": "Docker with the Compose plugin",
      "body": "A host with Docker and the Docker Compose plugin. This entry runs from a compose file.",
      "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docs/src/content/docs/installation.md",
      "validation_status": "unvalidated"
    },
    {
      "order": 2,
      "kind": "compose",
      "language": "yaml",
      "label": "Save the compose file as docker-compose.yml",
      "body": "services:\n  linkding:\n    container_name: \"${LD_CONTAINER_NAME:-linkding}\"\n    image: sissbruecker/linkding:latest\n    ports:\n      - \"${LD_HOST_PORT:-9090}:9090\"\n    volumes:\n      - \"${LD_HOST_DATA_DIR:-./data}:/etc/linkding/data\"\n    env_file:\n      - .env\n    restart: unless-stopped",
      "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml",
      "validation_status": "config_ok"
    },
    {
      "order": 3,
      "kind": "env",
      "language": "dotenv",
      "label": "Save as .env next to the compose file",
      "body": "# Docker container name\nLD_CONTAINER_NAME=linkding\n# Port on the host system that the application should be published on\nLD_HOST_PORT=9090\n# Directory on the host system that should be mounted as data dir into the Docker container\nLD_HOST_DATA_DIR=./data\n\n# Can be used to run linkding under a context path, for example: linkding/\n# Must end with a slash `/`\nLD_CONTEXT_PATH=\n# Username of the initial superuser to create, leave empty to not create one\nLD_SUPERUSER_NAME=\n# Password for the initial superuser, leave empty to disable credentials authentication and rely on proxy authentication instead\nLD_SUPERUSER_PASSWORD=\n# Option to disable background tasks\nLD_DISABLE_BACKGROUND_TASKS=False\n# Option to disable URL validation for bookmarks completely\nLD_DISABLE_URL_VALIDATION=False\n# Enables support for authentication proxies such as Authelia\nLD_ENABLE_AUTH_PROXY=False\n# Name of the request header that the auth proxy passes to the application to identify the user\n# See docs/Options.md for more details\nLD_AUTH_PROXY_USERNAME_HEADER=\n# The URL that linkding should redirect to after a logout, when using an auth proxy\n# See docs/Options.md for more details\nLD_AUTH_PROXY_LOGOUT_URL=\n# Disables the login form, useful to enforce OIDC authentication\nLD_DISABLE_LOGIN_FORM=False\n# List of trusted origins from which to accept POST requests\n# See docs/Options.md for more details\nLD_CSRF_TRUSTED_ORIGINS=\n\n# Database settings\n# These are currently only required for configuring PostreSQL.\n# By default, linkding uses SQLite for which you don't need to configure anything.\n\n# Database engine, can be sqlite (default) or postgres\nLD_DB_ENGINE=\n# Database name (default: linkding)\nLD_DB_DATABASE=\n# Username to connect to the database server  (default: linkding)\nLD_DB_USER=\n# Password to connect to the database server\nLD_DB_PASSWORD=\n# The hostname where the database is hosted (default: localhost)\nLD_DB_HOST=\n# Port use to connect to the database server\n# Should use the default port if not set\nLD_DB_PORT=\n# Any additional options to pass to the database (default: {})\nLD_DB_OPTIONS=\n",
      "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/.env.sample",
      "validation_status": "unvalidated"
    },
    {
      "order": 4,
      "kind": "note",
      "language": "text",
      "label": "What the compose file check ran with",
      "body": "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.",
      "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docs/src/content/docs/installation.md",
      "validation_status": "unvalidated"
    },
    {
      "order": 5,
      "kind": "shell",
      "language": "bash",
      "label": "Start it",
      "body": "docker compose up -d",
      "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docs/src/content/docs/installation.md",
      "validation_status": "unvalidated"
    },
    {
      "order": 6,
      "kind": "verify",
      "language": "text",
      "label": "Open the app",
      "body": "Open http://localhost:9090. The compose file publishes host port 9090 for the linkding service.",
      "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml",
      "validation_status": "unvalidated"
    }
  ],
  "notes": [
    {
      "kind": "gotcha",
      "title": "Some images use the latest tag or no tag",
      "body": "Images without a pinned version: linkding: sissbruecker/linkding:latest. A later pull can get a different version.",
      "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file publishes host ports",
      "body": "Host ports: 9090 (linkding). A port without a host address listens on all host network interfaces.",
      "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file mounts host folders",
      "body": "Host paths mounted into containers: ${LD_HOST_DATA_DIR at -./data} (linkding).",
      "source_url": "https://github.com/sissbruecker/linkding/blob/27b7303baf41bb28babc610ac8eaa486e1ddfab5/docker-compose.yml",
      "checked_at": "2026-10-22"
    }
  ],
  "signals": {
    "captured_at": "2026-10-22",
    "stars": 11329,
    "forks": 666,
    "open_issues": 237,
    "last_push": "2026-10-01",
    "days_since_push": 21,
    "latest_release": "v1.47.0",
    "latest_release_date": "2026-09-13",
    "days_since_release": 39
  },
  "links": {
    "html": "https://openlogs.fyi/tools/linkding",
    "markdown": "https://openlogs.fyi/tools/linkding.md",
    "json": "https://openlogs.fyi/tools/linkding.json"
  },
  "updated_at": "2026-10-22"
}
