Skip to content

Self-host linkding

updated Jul 2026prices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →

A clean, fast self-hosted bookmark manager with tags, search across titles, descriptions, notes and URLs, and browser extensions — the easiest way to own your bookmarks.

Key facts

CategoryBookmarks
LicenseMIT
StackPython, Django
Min RAM256 MB
Official imageyes
Measured idle RAM148 MB
Difficulty
Our recommendation

Pick linkding when you want to own a bookmark list, not the pages behind it: tags, notes, search over titles, notes and URLs, a REST API and a Firefox/Chrome extension, in one MIT-licensed Django container with SQLite in `/etc/linkding/data` (Postgres is a `LD_DB_ENGINE` switch, not a different image). It is the lightest app in this group to run and the docs say the image runs on a Raspberry Pi. If what you actually want is the article text saved for offline reading, Wallabag is the read-it-later tool; linkding's optional `latest-plus` image can archive HTML snapshots, but only by bundling Chromium.

What you need

  • Any VPS with at least 256 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install

Run these commands on your server:

# linkding
docker run -d --name linkding \
  -p 9090:9090 -v linkding:/etc/linkding/data \
  sissbruecker/linkding:latest
# open http://SERVER_IP:9090

What you take on

linkding is small and stable, but four things in its own docs decide how you run it:

non-negotiableOur snippet pulls sissbruecker/linkding:latest, the basic image. Local HTML snapshots need latest-plus, which upstream describes as "significantly larger" because it includes a Chromium installation, "requires more runtime memory to run Chromium" and more disk for the snapshots; the -alpine variants are marked experimental.
non-negotiableThere is no account after first start. Create one with docker exec -it linkding python manage.py createsuperuser --username=joe --email=joe@example.com, or set LD_SUPERUSER_NAME (and LD_SUPERUSER_PASSWORD — without it the user is created with no usable password and can only log in through an auth proxy).
non-negotiableBehind Nginx add proxy_set_header Host $host; and proxy_set_header X-Forwarded-Proto $scheme;; if the proxy rewrites the Host header, set LD_CSRF_TRUSTED_ORIGINS or POSTs fail CSRF checks. LD_CONTEXT_PATH handles sub-path hosting and must end with a slash.
non-negotiableDo not copy db.sqlite3 from a running container — the backup docs call that "not transaction safe" and warn it may corrupt the database. Use docker exec -it linkding python manage.py full_backup /etc/linkding/data/backup.zip, which also captures assets, favicons and previews; the HTML export in the UI omits snapshots and user profiles.
non-negotiableThe 256 MB floor is our estimate; linkding publishes no RAM requirement (the installation guide only notes the image runs on ARM/Raspberry Pi). Expect the plus image to need more.

An alternative to

Head-to-head

More self-hosted tools

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.