Self-hosted bookmark manager that is designed be to be minimal, fast, and easy to set up using Docker. https://linkding.link/
Find a file
2025-07-28 15:54:26 +04:00
.devcontainer Bump dependencies (#841) 2024-09-19 19:15:51 +02:00
.github/workflows Push Docker images to GHCR in addition to Docker Hub (#1024) 2025-05-17 08:33:11 +02:00
assets Fix header.svg text (#850) 2024-09-23 23:28:37 +02:00
bookmarks Improve bookmark form accessibility (#1116) 2025-07-03 08:44:41 +02:00
docker Bump base images 2025-02-19 16:14:34 +01:00
docs Add Pocket migration to to community page (#1112) 2025-07-23 03:17:45 +02:00
scripts Move e2e tests 2025-03-09 05:46:26 +01:00
.coveragerc Exclude tests from coverage 2021-05-14 23:45:32 +02:00
.dockerignore Merge siteroot application 2025-03-09 05:50:05 +01:00
.env Create .env 2025-07-28 15:54:26 +04:00
.env.sample Add database options (#406) 2023-05-18 09:31:13 +02:00
.gitattributes Added Dev Container support (#474) 2023-05-21 13:35:00 +02:00
.gitignore Replace uBlock Origin with uBlock Origin Lite (#866) 2024-09-29 14:42:50 +02:00
bootstrap.sh Implement IPv6 capability (#826) 2024-09-16 13:18:18 +02:00
CHANGELOG.md Update CHANGELOG.md 2025-06-20 00:38:18 +02:00
docker-compose.yml removed version line from docker compose yaml (#800) 2024-08-28 22:28:47 +02:00
install-linkding.sh Provide automated setup script 2019-12-26 18:49:10 +01:00
LICENSE.txt Add license 2019-12-24 11:03:08 +01:00
Makefile Prefer local snapshot over web archive link in bookmark list links (#1021) 2025-03-22 19:07:05 +01:00
manage.py Merge siteroot application 2025-03-09 05:50:05 +01:00
package-lock.json Bump nanoid from 3.3.7 to 3.3.8 (#928) 2025-01-26 18:51:40 +01:00
package.json Bump version 2025-06-19 22:23:34 +02:00
postcss.config.js Theme improvements (#822) 2024-09-13 23:19:47 +02:00
pytest.ini Merge siteroot application 2025-03-09 05:50:05 +01:00
README.md Merge siteroot application 2025-03-09 05:50:05 +01:00
requirements.dev.in Theme improvements (#822) 2024-09-13 23:19:47 +02:00
requirements.dev.txt Improve bookmark form accessibility (#1116) 2025-07-03 08:44:41 +02:00
requirements.in Theme improvements (#822) 2024-09-13 23:19:47 +02:00
requirements.txt Improve bookmark form accessibility (#1116) 2025-07-03 08:44:41 +02:00
rollup.config.mjs Build improvements (#649) 2024-03-16 15:57:23 +01:00
SECURITY.md Update SECURITY.md 2022-05-21 10:46:27 +02:00
supervisord.conf Fix directory name 2024-04-14 20:31:53 +02:00
uwsgi.ini Merge siteroot application 2025-03-09 05:50:05 +01:00
version.txt Bump version 2025-06-19 22:23:34 +02:00
web-types.json Allow uploading custom files for bookmarks (#713) 2024-04-20 12:14:11 +02:00

Introduction

linkding is a bookmark manager that you can host yourself. It's designed be to be minimal, fast, and easy to set up using Docker.

The name comes from:

  • link which is often used as a synonym for URLs and bookmarks in common language
  • Ding which is German for thing
  • ...so basically something for managing your links

Feature Overview:

  • Clean UI optimized for readability
  • Organize bookmarks with tags
  • Bulk editing, Markdown notes, read it later functionality
  • Share bookmarks with other users or guests
  • Automatically provides titles, descriptions and icons of bookmarked websites
  • Automatically archive websites, either as local HTML file or on Internet Archive
  • Import and export bookmarks in Netscape HTML format
  • Installable as a Progressive Web App (PWA)
  • Extensions for Firefox and Chrome, as well as a bookmarklet
  • SSO support via OIDC or authentication proxies
  • REST API for developing 3rd party apps
  • Admin panel for user self-service and raw data access

Demo: https://demo.linkding.link/

Screenshot:

Screenshot

Getting Started

The following links help you to get started with linkding:

Documentation

The full documentation is now available at linkding.link.

If you want to contribute to the documentation, you can find the source files in the docs folder.

If you want to contribute a community project, feel free to submit a PR.

Contributing

Small improvements, bugfixes and documentation improvements are always welcome. If you want to contribute a larger feature, consider opening an issue first to discuss it. I may choose to ignore PRs for features that don't align with the project's goals or that I don't want to maintain.

Development

The application is built using the Django web framework. You can get started by checking out the excellent Django docs. The bookmarks folder contains the actual bookmark application. Other than that the code should be self-explanatory / standard Django stuff 🙂.

Prerequisites

  • Python 3.12
  • Node.js

Setup

Create a virtual environment for the application (https://docs.python.org/3/tutorial/venv.html):

python3 -m venv ~/environments/linkding

Activate the environment for your shell:

source ~/environments/linkding/bin/activate[.csh|.fish]

Within the active environment install the application dependencies from the application folder:

pip3 install -r requirements.txt -r requirements.dev.txt

Install frontend dependencies:

npm install

Initialize database:

mkdir -p data
python3 manage.py migrate

Create a user for the frontend:

python3 manage.py createsuperuser --username=joe --email=joe@example.com

Start the Node.js development server (used for compiling JavaScript components like tag auto-completion) with:

npm run dev

Start the Django development server with:

python3 manage.py runserver

The frontend is now available under http://localhost:8000

Tests

Run all tests with pytest:

make test

Formatting

Format Python code with black, and JavaScript code with prettier:

make format

DevContainers

This repository also supports DevContainers: Open in Remote - Containers

Once checked out, only the following commands are required to get started:

Create a user for the frontend:

python3 manage.py createsuperuser --username=joe --email=joe@example.com

Start the Node.js development server (used for compiling JavaScript components like tag auto-completion) with:

npm run dev

Start the Django development server with:

python3 manage.py runserver

The frontend is now available under http://localhost:8000