Linkwarden: Self-Hosted Bookmark Manager with Archiving
You have bookmarks scattered across three browsers, a "Read Later" folder with 400 items, and a growing suspicion that half those links are already dead. Browser bookmarks have no search, no tags worth using, no archiving, and no way to share across devices without syncing your entire browser profile through Google or Apple.
Linkwarden is a self-hosted bookmark manager that solves this properly. Save links with tags and collections, and Linkwarden automatically archives the page content — screenshots and full-page copies — so the content survives even when the original site goes down. It's collaborative, searchable, and works across every device through browser extensions and a clean web interface.
Why Self-Host Your Bookmarks?
Browser bookmarks seem fine until they aren't:
- Link rot: Studies show roughly 50% of web links break within 10 years. Your bookmarks from 2020 are already dying.
- No full-text search: Browser bookmarks search titles and URLs. Linkwarden searches the actual content of saved pages.
- No archiving: When a site goes down or changes, your browser bookmark points to nothing. Linkwarden keeps a preserved copy.
- Cross-browser: If you use Firefox on desktop and Safari on your phone, your bookmarks don't sync. Linkwarden works everywhere.
- Privacy: Cloud bookmark services (Raindrop.io, Pocket) store your browsing interests on their servers.
Linkwarden vs. Linkding vs. Wallabag
Three strong options exist for self-hosted bookmarks. They serve different needs:
| Feature | Linkwarden | Linkding | Wallabag |
|---|---|---|---|
| Primary focus | Bookmarks + archiving | Bookmarks (lightweight) | Read-later + archiving |
| Page archiving | Screenshots + full copies | No (links only) | Full article extraction |
| Collections | Yes (hierarchical) | No (tags only) | Yes (entries + tags) |
| Collaboration | Multi-user, shared collections | Multi-user | Multi-user |
| Browser extension | Yes | Yes | Yes |
| Mobile app | PWA | PWA | Native iOS + Android |
| Full-text search | Yes (archived content) | Yes (titles + descriptions) | Yes (article content) |
| Resource usage | Moderate (~300 MB RAM) | Minimal (~50 MB RAM) | Moderate (~200 MB RAM) |
| Tech stack | Next.js + PostgreSQL | Python + SQLite | PHP + MySQL/PostgreSQL |
| Import from | Browsers, Pocket, others | Netscape HTML | Pocket, Instapaper, Pinboard |
When to choose each
Linkwarden — You want a full-featured bookmark manager with archiving, collections, and collaboration. You're willing to run PostgreSQL.
Linkding — You want the lightest possible bookmark manager. You don't need archiving or collections. Tags are enough. Runs on minimal hardware.
Wallabag — You primarily want a read-later service (like Pocket). You want to extract article content for offline reading. Less focused on bookmark organization.
Docker Setup
Linkwarden requires PostgreSQL for its database. Here's the complete setup:
services:
linkwarden:
image: ghcr.io/linkwarden/linkwarden:latest
container_name: linkwarden
restart: unless-stopped
depends_on:
- linkwarden-db
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://linkwarden:changeme@linkwarden-db:5432/linkwarden
NEXTAUTH_SECRET: generate-a-random-string-here
NEXTAUTH_URL: http://localhost:3000
# Optional: S3-compatible storage for archives
# SPACES_ENDPOINT: https://your-s3-endpoint
# SPACES_BUCKET_NAME: linkwarden
# SPACES_KEY: your-access-key
# SPACES_SECRET: your-secret-key
volumes:
- ./data:/data/data
linkwarden-db:
image: postgres:16
container_name: linkwarden-db
restart: unless-stopped
environment:
POSTGRES_USER: linkwarden
POSTGRES_PASSWORD: changeme
POSTGRES_DB: linkwarden
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
docker compose up -d
Open http://your-server:3000 and create your account. The first registered user becomes the admin.
Important configuration
- NEXTAUTH_SECRET: Generate a random string (
openssl rand -hex 32). This secures session tokens. - NEXTAUTH_URL: Set this to your actual URL if you're using a reverse proxy (e.g.,
https://bookmarks.yourdomain.com). - Storage: By default, archives are stored locally in the
/data/datavolume. For large collections, configure S3-compatible storage (Minio, Backblaze B2, etc.).
Reverse proxy setup
For HTTPS access, add a Caddy config:
bookmarks.yourdomain.com {
reverse_proxy localhost:3000
}
Update NEXTAUTH_URL to https://bookmarks.yourdomain.com and restart Linkwarden.
Browser Extension
Linkwarden has extensions for Chrome and Firefox that add a one-click save button to your browser.
Installation
- Install from the Chrome Web Store or Firefox Add-ons
- Click the extension icon and enter your Linkwarden server URL
- Log in with your credentials
Using the extension
When you find a page worth saving:
- Click the Linkwarden extension icon
- Add tags (optional)
- Select a collection (optional)
- Click Save
The page is saved to Linkwarden and archiving starts in the background. You can also right-click any link and select "Save to Linkwarden" without opening the page.
Organizing with Collections and Tags
Linkwarden uses a dual system: collections for hierarchical organization and tags for cross-cutting labels.
Collections
Collections work like folders and can be nested:
Development/
Frontend/
Backend/
DevOps/
Research/
AI & ML/
Self-Hosting/
Recipes/
Reading List/
Each collection can have its own sharing settings — public, shared with specific users, or private.
Tags
Tags cut across collections:
to-read— Haven't read yetreference— Things you come back to regularlytutorial— Step-by-step guidestool— Software tools and services
Recommended approach
Use collections for broad categories (what the link is about) and tags for status or type (how you interact with it). Don't over-organize — Linkwarden's full-text search means you can find things even without perfect tagging.
Automatic Archiving and Screenshots
This is Linkwarden's killer feature. When you save a link, Linkwarden:
- Takes a screenshot of the page as it appeared when you saved it
- Saves a full copy of the page content (readable version)
- Stores the PDF (optional, configurable)
Why this matters
- Link rot protection: The website shuts down? Your archived copy still exists.
- Content changes: Articles get edited or paywalled after publication. Your archive preserves the original.
- Evidence: Need to prove what a page said on a specific date? The screenshot has a timestamp.
Archive storage
Archives accumulate over time. For a heavy user saving 20-30 links per week:
- Screenshots: ~500 KB each, so ~1 GB per year
- Full copies: ~200 KB each (text-heavy pages), so ~400 MB per year
- Total: Roughly 1-2 GB per year for most users
Configure S3-compatible storage if you want to offload archives from your local disk.
Collaboration Features
Linkwarden supports multiple users with shared collections:
Setting up collaboration
- Create a collection (e.g., "Team Resources")
- Click the sharing icon on the collection
- Invite other Linkwarden users by username or email
- Set permissions: View only, Can add links, or Full access
Use cases
- Families: Share a "Recipes" collection where anyone can add links
- Research groups: Collaborate on a collection of resources for a project
- Teams: Maintain shared reference materials
Each user still has their own private collections alongside shared ones.
Importing from Other Services
Linkwarden can import bookmarks from several sources:
From your browser
- Export bookmarks from your browser (Chrome: Bookmark Manager → Export; Firefox: Library → Import and Backup → Export)
- In Linkwarden, go to Settings → Import
- Upload the HTML file
- Linkwarden imports all bookmarks, preserving folder structure as collections
From Pocket
- Export your Pocket data from getpocket.com/export
- Upload the HTML file in Linkwarden's import settings
From Raindrop.io
- Export as HTML from Raindrop.io settings
- Import into Linkwarden
After import, Linkwarden begins archiving all imported links in the background. This can take a while for large imports (hundreds or thousands of links), so be patient and let it run.
API and Automation
Linkwarden has a REST API for programmatic access:
API token
Generate an API token under Settings → API Keys.
Example: Save a link via API
curl -X POST https://bookmarks.yourdomain.com/api/v1/links \
-H "Authorization: Bearer your-api-token" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/article",
"name": "Interesting Article",
"collection": { "id": 1 },
"tags": [{ "name": "reference" }]
}'
Automation ideas
- Save links from RSS feeds automatically using n8n or a script
- Archive Hacker News top posts daily
- Save links from a Telegram bot using the API
- Bulk tag management for organizing large imports
Backup Strategy
Your bookmarks and archives are valuable. Back them up:
- Database:
docker compose exec linkwarden-db pg_dump -U linkwarden linkwarden > backup.sql - Archive files: Back up the
./datadirectory (contains screenshots and page copies) - Export: Linkwarden can export all bookmarks as HTML — keep a periodic export as a portable backup
The Honest Trade-offs
Linkwarden is great if:
- You want bookmark archiving (screenshots + full copies)
- You need hierarchical organization with collections
- You collaborate with others on shared bookmark collections
- You're tired of link rot destroying your saved references
Linkwarden is not ideal if:
- You want the lightest possible setup (Linkding uses far fewer resources)
- You primarily want a read-later service with article extraction (Wallabag is better for this)
- You don't need archiving and just want organized links
- You're running on very limited hardware (Raspberry Pi might struggle)
Bottom line: Linkwarden fills a real gap. Browser bookmarks don't archive or search well. Pocket and Raindrop.io store your data in the cloud. Linkding is lighter but doesn't archive. If you value preserving the content behind your bookmarks — not just the URLs — Linkwarden is the best self-hosted option available. The collections system, collaboration features, and automatic archiving make it worth the slightly heavier resource footprint.
Resources
- Linkwarden documentation
- Linkwarden GitHub
- Browser extensions
- API reference
- Linkding — Lightweight alternative
- Wallabag — Read-later alternative