If you enjoyed this article, you can support the author by becoming a sponsor on Boosty (link in the contacts section).
What is Linkwarden?#
Linkwarden is an open-source self-hosted app for managing and archiving bookmarks. It’s built for users who value control over their data, want a local copy of important information from the internet, and want a convenient interface for organizing links.
The project is actively developed and positions itself as an alternative to services like Pocket, Raindrop.io, and Pinboard, but with an emphasis on privacy, independence, and open source.
Key features#
Archiving web pages#
Linkwarden doesn’t just save a link - it archives the content of the page (including text, images, and styles), letting you view it even offline. This is especially useful for building a knowledge base and storing scientific materials and blog posts that might disappear from the web.
Full-fledged search#
Full-text search across saved pages is supported. You can find what you need even if you forgot the link or the title.
Tags and collections#
Links can be organized using tags and collections, which greatly simplifies navigating a large number of bookmarks.
Multi-user support#
Linkwarden supports a multi-user mode with access rights separation. This is convenient for team work or family use.
Privacy and control#
By deploying Linkwarden on your own server, you get full control over your data. Authentication via email, Google, GitHub, and other providers is supported through the OAuth 2.0 protocol.
Key features in table form#
| Feature | Description |
|---|---|
| Page archiving | Automatically saves HTML, PDF, and screenshots of added links. |
| Reading mode and annotations | Lets you read articles without ads, take notes, and highlight text. |
| Collections and tags | Organizes content into hierarchical collections with tags. |
| Collaboration | Share collections and manage member permissions. |
| Import / export | Supports imports from browsers and export to CSV/HTML. |
| Content search | Fast full-text search (via Meilisearch). |
| Integrations (API, SSO) | Supports Authentik, a REST API, and custom integrations. |
| Extensions and clients | Chrome extension, PWA, Android and iOS apps. |
| AI tags and auto-analysis | Determines a link’s topic based on the page’s content. |
| Wayback Machine | Submits links to archive.org for long-term preservation. |
Simple installation (Docker)#
The project ships with ready-made Docker containers. Deployment takes just a couple of minutes:
git clone https://github.com/linkwarden/linkwarden
cd linkwarden
cp .env.example .env
docker compose up -dFiles used in the video#
Docker compose file
services:
postgres:
container_name: postgres_linkwarden
image: postgres:16-alpine
env_file: .env
restart: always
volumes:
- /home/stilicho/docker/linkwarden/pgdata:/var/lib/postgresql/data
networks:
- linkwarden #not necessary if you don't use another postgres instance
#- proxy
linkwarden:
container_name: linkwarden
env_file: .env
environment:
- DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres
restart: always
# build: . # uncomment this line to build from source
image: ghcr.io/linkwarden/linkwarden:latest # comment this line to build from source
#ports:
# - 3000:3000
volumes:
- /home/stilicho/docker/linkwarden/data:/data/data
depends_on:
- postgres
networks:
- proxy
- linkwarden #not necessary if you don't use another postgres instance
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.linkwarden.entrypoints=http"
- "traefik.http.routers.linkwarden.rule=Host(`linkwarden.domain.ru`)"
- "traefik.http.middlewares.linkwarden-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.linkwarden.middlewares=linkwarden-https-redirect"
- "traefik.http.routers.linkwarden-secure.entrypoints=https"
- "traefik.http.routers.linkwarden-secure.rule=Host(`linkwarden.domain.ru`)"
- "traefik.http.routers.linkwarden-secure.tls=true"
- "traefik.http.routers.linkwarden-secure.tls.certresolver=cloudflare"
- "traefik.http.routers.linkwarden-secure.service=linkwarden"
- "traefik.http.services.linkwarden.loadbalancer.server.port=3000" # make sure the loadbalancer is the last line!!!
networks:
proxy:
external: true
linkwarden:
external: trueEnvironment file
NEXTAUTH_URL=https://linkwarden.domain.ru/api/v1/auth
# NEXTAUTH_URL=http://localhost:3000/api/v1/auth # Uncomment this if you don't want to use another Identity Provider
NEXTAUTH_SECRET=linkwarden
POSTGRES_PASSWORD=Rpassword
# SMTP Settings
#NEXT_PUBLIC_EMAIL_PROVIDER=
#EMAIL_FROM=
#EMAIL_SERVER=
#BASE_URL=
#################
# SSO Providers #
#################
#AUTHENTIK_CUSTOM_NAME=Authentik
#NEXTAUTH_URL=https://linkwarden.domain.ru/api/v1/auth
#NEXT_PUBLIC_AUTHENTIK_ENABLED=true
#AUTHENTIK_CUSTOM_NAME=authentik
#AUTHENTIK_ISSUER=https://auth.domain.ru/application/o/linkwarden
#AUTHENTIK_CLIENT_ID=ID
#AUTHENTIK_CLIENT_SECRET=SECRETComparison with alternatives#
| Feature | Linkwarden | Raindrop.io | Wallabag | |
|---|---|---|---|---|
| Self-hosted | ✅ | ❌ | ❌ | ✅ |
| Page archiving | ✅ | ❌ | ✅ (Pro) | ✅ |
| Full-text search | ✅ | ✅ | ✅ | ✅ |
| Multi-user | ✅ | ❌ | ✅ | ✅ |
| Open source | ✅ | ❌ | ❌ | ✅ |
Use in a homelab#
For homelab owners and enthusiasts, Linkwarden is a great addition to a self-hosting stack. It integrates easily with Traefik, Nginx, or Caddy, and can be protected via SSO (for example, with Authentik or Authelia).
Conclusion#
Linkwarden is a modern and powerful tool for managing links, built with an emphasis on privacy, convenience, and independence from cloud services. It’s a great fit for both personal use and team or family collaboration.




