Skip to content

Linkding

Self-Hosted Bookmark Manager

Linkding is a minimal bookmark manager you can host yourself. It features tagging, full-text search, browser extension support, and a clean interface for organizing and archiving web links.

Why Choose Linkding?

  • Lightweight - minimal resource usage, fast search
  • Browser extensions - available for Firefox and Chrome
  • Search - search across bookmark titles, descriptions, tags, and URLs
  • Tagging - organize bookmarks with tags
  • REST API - integrate with other tools and scripts

Install

Infrastructure as Code

This Linkding instance is deployed using OpenTofu with the official Docker image (plus variant for HTML snapshots). The infrastructure configuration manages container provisioning and persistent storage.

The canonical configuration is maintained at Benoit/OpenTofu.

Infrastructure Configuration

The OpenTofu configuration provisions:

  • Incus instance running official Linkding Docker image (plus variant for HTML snapshots)
  • Persistent storage volume for /etc/linkding/data directory containing:
    • SQLite database with bookmarks and tags
    • Archived HTML snapshots
    • User data and settings

About the plus variant

The plus image includes a bundled Chromium installation that enables archiving websites as HTML snapshots. This comes with trade-offs: significantly larger image size, more runtime memory for Chromium, and more disk space for storing snapshots.

OpenTofu Configuration
resource "incus_storage_volume" "linkding_etc_linkding_data" {
  name = "linkding_etc_linkding_data"
  pool = incus_storage_pool.default.name
}

resource "incus_instance" "linkding" {
  name  = "linkding"
  image = "docker:sissbruecker/linkding:1.45.0-plus"

  config = {
    "environment.LD_CSRF_TRUSTED_ORIGINS" = "https://linkding.benoit.jp.net"
    "environment.LD_LOG_X_FORWARDED_FOR" = "true"
  }

  device {
    name = "etc_linkding_data"
    type = "disk"
    properties = {
      path   = "/etc/linkding/data"
      source = incus_storage_volume.linkding_etc_linkding_data.name
      pool   = incus_storage_pool.default.name
    }
  }
}

Deploy Infrastructure

Apply OpenTofu configuration
tofu apply

Initial Configuration

After provisioning, create an admin user:

Create superuser
incus exec linkding -- python manage.py createsuperuser --username=admin --email=admin@example.com

Then log in at https://linkding.benoit.jp.net with the credentials you just created.

Upgrade

Docker Image Upgrade

Upgrading Linkding is straightforward since the /etc/linkding/data volume persists independently of the container.

Update OpenTofu configuration

Edit your OpenTofu configuration file to update the image version:

resource "incus_instance" "linkding" {
  name  = "linkding"
  image = "docker:sissbruecker/linkding:1.46.0-plus"  # Update version
  # ...
}

Apply infrastructure changes

Recreate container with new image
tofu apply

The container will be recreated with the new image while the data volume remains intact.


Related Documentation: