Linkding

Minimal and fast self-hosted bookmark manager

Bookmarks & Read-It-Later ★ 11.2k stars Easy setup BSD-3-Clause

Linkding is a minimal, fast self-hosted bookmark manager with tagging, full-text search, and a browser extension. It targets users who want a simple, no-frills bookmarking tool. It is deployed via Docker.

Key features

  • Tag-based bookmark organization
  • Full-text search
  • Browser extension
  • REST API

Pros & cons

Strengths

  • Fast and minimal
  • Easy to deploy
  • Good extension

Trade-offs

  • Plain interface
  • No automatic archiving

Linkding replaces

Last reviewed Aug 26, 2026 · 836 words

Linkding stores bookmarks, and it stores them on 256 MB of RAM in 1 container with a SQLite file behind it. If what you want is a place to put links that has tags, a search box that finds things, and a browser extension that saves a page in 2 clicks, you can install it this evening and never think about it again. If what you want is the page itself preserved for the day the link dies, that is a different category of tool, and knowing which of those 2 people you are is the whole decision.

Four lines of compose and a superuser

services:
  linkding:
    image: sissbruecker/linkding:latest
    ports:
      - "9090:9090"
    volumes:
      - ./data:/etc/linkding/data
    environment:
      - LD_SUPERUSER_NAME=admin
      - LD_SUPERUSER_PASSWORD=change-this-before-first-start
    restart: unless-stopped

The two LD_SUPERUSER_* variables create your account on first boot, so there is no manage.py dance inside the container. Everything persists in /etc/linkding/data: the SQLite database, favicons, and any snapshots you enable later. Postgres is supported through LD_DB_ENGINE=postgres, but I would not bother below several thousand bookmarks and several users; SQLite is the reason the whole thing fits in 256 MB. Put Caddy or Tailscale in front and the infrastructure part is over.

Tags plus search replace folders, and it holds up

There are no folders. Every bookmark takes any number of tags, the search box understands #tag to filter, and there are built-in filters for untagged and unread bookmarks so the reading queue and the unfiled pile are 1 click away. Search covers title, description, URL, and the free-text notes field, which accepts Markdown. It does not cover the content of the page, because Linkding never fetched it. In practice, a 2-second habit of adding 1 tag at save time gets you further than any folder tree I have maintained, and bulk edit handles the retagging when your scheme changes at bookmark 3,000.

The browser extension for Firefox and Chrome is what makes the habit cheap: it pre-fills title and description from the page, autocompletes your existing tags, and tells you if the URL is already saved. A bookmarklet covers browsers where you cannot install extensions.

It does not archive pages, and that is the fork in the road

Out of the box, Linkding keeps the URL and metadata. It can ask the Internet Archive to take a snapshot when you save, which gives you a Wayback link when the original dies, but that copy lives on archive.org, not on your disk. A separate latest-plus image bundles a headless browser to save full HTML snapshots locally. It works, it roughly triples the memory footprint, and it turns a tiny service into one that runs Chromium.

If offline copies are the actual requirement, start from the other end. ArchiveBox archives everything in several formats and treats bookmarking as a side effect. Linkwarden archives by default, has collections and a far richer interface, and needs several times the RAM. Wallabag is for reading articles later, not filing links. Linkding is the right pick when you want the link, not the page.

Import and export are the same file, so leaving is free

Import takes the Netscape HTML bookmark file that every browser exports, tags included. Export produces the same format. When Pocket shut down in 2025, people who had been importing into Linkding for years had nothing to do; everyone else had a CSV to convert first. The REST API at /api/bookmarks/ takes a token from your settings page and covers create, search, and tag operations, so a 10-line script can feed it from a feed reader or a phone automation.

Backups are 1 SQLite file. Use sqlite3 data/db.sqlite3 ".backup /backups/linkding-$(date +%F).sqlite3" rather than copying the live file, and ship it off the box nightly. A restore is copying the file back.

Multi-user is real but plain

Additional users come from the admin panel, each with a private set of bookmarks and an optional shared flag per bookmark that publishes it to a common view. There is no team workflow beyond that. LD_ENABLE_AUTH_PROXY=True lets Authelia or Authentik handle login and pass the username in a header, which is how I would run it for a family. The interface is plain to the point of austere. That is a feature right up until you want colour, and then it is simply what it is.

What I'd do

Standard image, SQLite, behind Caddy with Tailscale-only access, superuser set through the environment, nightly .backup to the same place the rest of my backups go. Wayback snapshots on, local snapshots off. If I later find myself missing dead pages more than twice a month, that is the signal to add ArchiveBox alongside it rather than to swap Linkding out, because the saving habit is the valuable part and Linkding is the tool that keeps the habit at 2 clicks.

Compare Linkding

22 head-to-head comparisons.

Similar bookmarks & read-it-later apps