# linkding

Minimal self-hosted bookmark manager with LD_* env config and a documented REST API.

linkding is a Django bookmark manager built to be small, fast, and Docker-first: tags, markdown notes, read-it-later, archiving to local HTML or the Internet Archive, sharing, and browser extensions. Configuration is entirely LD_* environment variables, and the REST API with token auth covers bookmarks, assets, tags, and bundles.

Alternative to: Raindrop.io, Pinboard

- Capabilities: adaptable, operable
- Vertical: notes-knowledge
- Shape: product
- Form factor: web-app
- Execution model: deterministic
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/sissbruecker/linkding (MIT), 11139 stars, last commit 2026-09-03
- Last activity: 2026-09-03
- Page: apps/sissbruecker--linkding.html
- JSON: apps/sissbruecker--linkding.json

## Use it when

- you want a bookmark service on a Raspberry Pi that an agent can post links to with a token
- you left Pinboard or del.icio.us and want tags, notes, and archives without a heavy stack

## Gotchas

- Single-maintainer project that declines features outside its scope (README)
- Local HTML archiving requires the single-file sidecar image variant (linkding:latest-plus)
- Managed hosting on linkding.link is third-party (not a Builder edition)

## Editions

- Free: Free, open source
  - source: https://github.com/sissbruecker/linkding
  - container: docker run --name linkding -p 9090:9090 -v ./data:/etc/linkding/data -d sissbruecker/linkding:latest

## Adaptable: make it yours

Effort: config-only (20 things to edit)

.env.sample and docker-compose.yml are the whole surface. LD_SUPERUSER_NAME and LD_SUPERUSER_PASSWORD create the first user; LD_DB_ENGINE and LD_DB_* switch to Postgres; LD_ENABLE_AUTH_PROXY with LD_AUTH_PROXY_USERNAME_HEADER puts it behind your SSO; LD_DISABLE_BACKGROUND_TASKS, LD_DISABLE_URL_VALIDATION, and LD_CONTEXT_PATH tune behavior.

- Env vars: LD_SUPERUSER_NAME, LD_SUPERUSER_PASSWORD, LD_HOST_PORT, LD_HOST_DATA_DIR, LD_CONTEXT_PATH, LD_DB_ENGINE, LD_DB_HOST, LD_DB_PORT, LD_DB_DATABASE, LD_DB_USER, LD_DB_PASSWORD, LD_ENABLE_AUTH_PROXY, LD_AUTH_PROXY_USERNAME_HEADER, LD_AUTH_PROXY_LOGOUT_URL, LD_DISABLE_LOGIN_FORM, LD_DISABLE_BACKGROUND_TASKS, LD_DISABLE_URL_VALIDATION, LD_CSRF_TRUSTED_ORIGINS
- Config files: .env, docker-compose.yml
- Prompt files: none
- Accounts you'll need: none

## Operable: what an agent can drive

Operability: official. Interface: api at https://linkding.link/api/ (published by the builder, local).

### Reach (partial coverage)

- Create, update, and delete bookmarks: reachable. POST/PUT/PATCH/DELETE /api/bookmarks/ (docs/src/content/docs/api.md)
- Search and list bookmarks: reachable. GET /api/bookmarks/ with query, GET /api/bookmarks/check/?url=
- Archive and unarchive: reachable. POST /api/bookmarks/&lt;id>/archive/ and /unarchive/
- Tag bookmarks: reachable. GET/POST /api/tags/ and tag_names on bookmarks
- Bundles (saved filters): reachable. GET/POST/PUT/PATCH/DELETE /api/bundles/
- Store and download HTML snapshots: reachable. /api/bookmarks/&lt;id>/assets/ with upload and download
- Share bookmarks with users or guests: reachable. shared field on the bookmark resource
- Markdown notes and read-it-later: reachable. notes and unread fields on the bookmark resource
- Import and export Netscape HTML: not reachable. settings UI only; no API endpoint
- User administration: not reachable. Django admin panel; only GET /api/user/profile/ is exposed

## Code stack

- Languages: Python, JavaScript
- Frameworks: Django
- Package manager: uv
- Database: SQLite, PostgreSQL
- Hosting target: docker

## Evidence and confidence

- formFactor: README: Django web app, Docker install (confidence 0.95)
- executionModel: no model anywhere in the stack (confidence 0.95)
- operability: docs/src/content/docs/api.md in the repo, published at linkding.link/api (confidence 0.95)
- effort: .env.sample LD_* names; docker-compose.yml (confidence 0.95)
- editions: MIT; no paid edition; community managed hosting listed separately (confidence 0.95)
- active: pushedAt 2026-09-03
- provenance: 2019 project, no agent markers (confidence 0.6)
- reach:  (confidence 0.9)

## Open questions

- chickenzord/linkding-mcp (15 stars, 2026-05-25) is the only wrapper; note as runner-up if the Curator prefers an MCP entry point

## Sources

- https://github.com/sissbruecker/linkding (sourcing:notes-knowledge:curated)
- https://linkding.link/api/ (analysis)
