Bookmarks are broken. Browser bookmark folders turn into graveyards. Links rot. Pages disappear. You save something important and never find it again.
Linkwarden fixes this by saving the actual content — not just the URL. It archives full pages, tags them with AI, and makes everything searchable. If the original page goes down, you still have it.
Why Linkwarden?
- Full-page archiving — saves a copy of every page, not just the URL
- AI-powered tagging — automatically categorizes your bookmarks
- Full-text search — find anything by searching the page content
- Collections — organize bookmarks into shareable folders
- Collaboration — share collections with teams or family
- Browser extension — save links with one click
- PDF and screenshot capture — preserves pages in multiple formats
- RSS feed support — import from feeds automatically
Prerequisites
- Docker and Docker Compose
- 1GB+ RAM (AI features use more)
- PostgreSQL (included in the compose file)
Docker Setup
mkdir -p ~/linkwarden && cd ~/linkwarden
# docker-compose.yml
version: "3.8"
services:
linkwarden:
image: ghcr.io/linkwarden/linkwarden:latest
container_name: linkwarden
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- linkwarden_data:/data/data
environment:
DATABASE_URL: postgresql://linkwarden:changeme_password@db:5432/linkwarden
NEXTAUTH_SECRET: changeme_long_random_string
NEXTAUTH_URL: http://localhost:3000
NEXT_PUBLIC_DISABLE_REGISTRATION: "false"
ARCHIVING_ENABLED: "true"
BROWSER_TIMEOUT: 15000
depends_on:
- db
db:
image: postgres:16
container_name: linkwarden-db
restart: unless-stopped
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_USER: linkwarden
POSTGRES_PASSWORD: changeme_password
POSTGRES_DB: linkwarden
volumes:
linkwarden_data:
pgdata:
Generate proper secrets:
# Replace the placeholder values
openssl rand -hex 32 # Use for NEXTAUTH_SECRET
openssl rand -hex 16 # Use for database password (update both places)
docker compose up -d
Visit http://your-server:3000 and create your account.
Saving Your First Bookmarks
Browser Extension
Install the Linkwarden browser extension (available for Chrome and Firefox) from your Linkwarden instance:
- Go to Settings → Browser Extension
- Download for your browser
- Enter your Linkwarden URL and API key
- Click the extension icon on any page to save it
The extension captures:
- Page title
- URL
- Description
- A full archived copy
Manual Entry
Click New Link in the dashboard, paste a URL, and Linkwarden fetches everything automatically — title, description, screenshot, and full-page archive.
Import Existing Bookmarks
Moving from another service? Linkwarden imports from:
- Browser bookmark exports (HTML)
- Raindrop.io
- Wallabag
- Plain CSV/JSON
Go to Settings → Import and upload your export file.
Collections
Collections are folders for your bookmarks. Create them around topics:
- Dev Resources — documentation, tutorials, tools
- Read Later — articles you want to come back to
- Recipes — cooking pages (with full archiving, the recipe is preserved forever)
- Research — reference material for projects
- Shopping — products you’re considering
- Travel — destinations, hotels, guides
Sharing Collections
Make a collection public to share it:
- Open a collection
- Click Share
- Toggle Public
- Share the link
Great for sharing curated resource lists with your team or community.
Collaborative Collections
Invite others to add to a collection:
- Open collection settings
- Add members by email
- Set permissions (view, add, or manage)
Useful for shared research, team resources, or family bookmarks.
AI-Powered Tagging
Linkwarden can automatically tag bookmarks using AI. When you save a link about Docker security, it auto-applies tags like docker, security, devops.
Setting Up AI Tagging
Add an OpenAI API key to enable AI features:
environment:
OPENAI_API_KEY: sk-your-api-key-here
Or use a self-hosted LLM via an OpenAI-compatible API:
environment:
OPENAI_API_KEY: not-needed
OPENAI_BASE_URL: http://your-ollama-server:11434/v1
This pairs perfectly with a local Ollama instance — AI tagging with zero cloud dependency.
Full-Page Archiving
This is Linkwarden’s killer feature. When you save a link, it creates:
- Screenshot — visual preview of the page
- PDF — full-page capture
- Readable article — extracted clean text
- Raw HTML — complete page source
If the original site goes down, your archived copy is still there. This is especially valuable for:
- Documentation that might change or disappear
- News articles behind paywalls (save before the wall goes up)
- Product pages you need for warranty claims
- Research papers and references
Archive Storage
Archives use more storage than plain bookmarks. Plan for:
- ~1-5MB per bookmark (with screenshots and PDFs)
- A few hundred bookmarks ≈ 1-2GB
- Thousands of bookmarks ≈ 5-10GB
Monitor usage:
docker exec linkwarden du -sh /data/data/
Searching
The search is powerful because it indexes the full page content, not just titles and URLs:
- Title search: finds bookmarks by page title
- Full-text search: searches inside the archived page content
- Tag filter: narrow by tags
- Collection filter: search within specific collections
- Date range: find bookmarks from a specific period
Search “nginx reverse proxy tutorial” and find that one perfect guide you saved three months ago, even if the title didn’t mention nginx.
API Access
Linkwarden has a REST API for automation:
# Get all bookmarks
curl -H "Authorization: Bearer YOUR_API_KEY" \
http://localhost:3000/api/v1/links
# Create a bookmark
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "collection": {"id": 1}}' \
http://localhost:3000/api/v1/links
Automation Ideas
- Save Hacker News front page daily — script that saves top stories
- Archive newsletters — forward emails to a save endpoint
- Sync with RSS — auto-bookmark new items from feeds
- Backup tool docs — periodically archive documentation pages
Backup
Back up the database and archive files:
#!/bin/bash
BACKUP_DIR=~/linkwarden-backups
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
# Database backup
docker exec linkwarden-db pg_dump -U linkwarden linkwarden | gzip > $BACKUP_DIR/db-$DATE.sql.gz
# Archive files backup
docker run --rm -v linkwarden_linkwarden_data:/data -v $BACKUP_DIR:/backup alpine \
tar czf /backup/archives-$DATE.tar.gz /data
# Keep last 7 backups
ls -t $BACKUP_DIR/db-*.sql.gz | tail -n +8 | xargs -r rm
ls -t $BACKUP_DIR/archives-*.tar.gz | tail -n +8 | xargs -r rm
Reverse Proxy
For remote access with HTTPS:
server {
server_name bookmarks.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 50M;
}
}
Update NEXTAUTH_URL to match your public URL:
environment:
NEXTAUTH_URL: https://bookmarks.yourdomain.com
Linkwarden vs Alternatives
| Feature | Linkwarden | Wallabag | Raindrop.io |
|---|---|---|---|
| Self-hosted | ✅ | ✅ | ❌ (cloud) |
| Full-page archive | ✅ | ✅ | ❌ |
| AI tagging | ✅ | ❌ | ❌ |
| Collaboration | ✅ | Limited | ✅ |
| Browser extension | ✅ | ✅ | ✅ |
| Free | ✅ | ✅ | Freemium |
| PDF capture | ✅ | ❌ | ❌ |
Linkwarden combines the best of read-it-later apps (Wallabag, Pocket) with bookmark managers (Raindrop) and adds AI on top.
Wrapping Up
Linkwarden turns chaotic bookmarking into an organized, searchable, permanent archive. The AI tagging reduces manual work, the full-page archiving means links never die, and the collaboration features make it useful for teams.
Set it up in five minutes, install the browser extension, and start saving. In a month, you’ll have a personal knowledge base of every useful page you’ve found on the internet — fully searchable and entirely under your control.