Self-Host Linkwarden: Social Bookmark Manager 2026
TL;DR
Linkwarden (AGPL 3.0, ~8K GitHub stars, TypeScript/Next.js) is a self-hosted bookmark manager with automatic page archiving. When you save a link, Linkwarden captures a screenshot, a readable text snapshot (Readability), and preserves the page as a PDF — so you always have the content even if the original page goes offline. Replace Pocket (now owned by Mozilla/going paid) or Instapaper with your own archiving system.
Key Takeaways
- Linkwarden: AGPL 3.0, ~8K stars, TypeScript — bookmarks + automatic archiving
- Archiving: Screenshots + readable text + PDF snapshots per bookmark
- Browser extension: Chrome and Firefox extensions for one-click saving
- Collections: Organize links into collections, shareable with others
- Tags: Flexible tagging system
- Search: Full-text search across bookmarks and archived content
- RSS feeds: Import links from RSS feeds automatically
Linkwarden vs Pocket vs Pinboard
| Feature | Linkwarden (self-hosted) | Pinboard | |
|---|---|---|---|
| License | AGPL 3.0 | Proprietary | Proprietary |
| Cost | Free (hosting) | Free / $5/mo | $11/year |
| Page archiving | Yes (auto) | Premium only | Yes (paid) |
| Screenshots | Yes | No | No |
| Full-text search | Yes | Yes (premium) | Yes |
| Tags | Yes | Yes | Yes |
| Collections | Yes | No | No |
| Sharing | Yes | No | Yes |
| Browser extension | Yes | Yes | Yes |
| Self-hosted | Yes | No | No |
Part 1: Docker Setup
# docker-compose.yml
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://postgres:${POSTGRES_PASSWORD}@db:5432/linkwarden"
NEXTAUTH_SECRET: "${NEXTAUTH_SECRET}"
NEXTAUTH_URL: "https://links.yourdomain.com"
NEXT_PUBLIC_DISABLE_REGISTRATION: "false" # Set true after creating account
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: linkwarden
POSTGRES_USER: postgres
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
volumes:
linkwarden_data:
postgres_data:
# Generate NEXTAUTH_SECRET:
openssl rand -hex 32
docker compose up -d
Part 2: HTTPS with Caddy
links.yourdomain.com {
reverse_proxy localhost:3000
}
Visit https://links.yourdomain.com → register your account.
Part 3: Browser Extension
Install the Linkwarden browser extension to save links from any page:
- Chrome/Chromium: Chrome Web Store
- Firefox: Firefox Add-ons
Setup:
- Install extension
- Click extension icon → Settings
- Instance URL:
https://links.yourdomain.com - Enter your credentials
- Click extension icon on any page → Save link
Part 4: Organize with Collections
Collections are the primary organization structure:
- Sidebar → Collections → + New Collection
- Name: "Dev Resources", "Recipes", "Articles to Read", "Research"
- Color: pick a color for visual organization
- Optional: share collection with other users (view or edit access)
Save links to collections:
- Via browser extension: select collection in the save dialog
- Via web UI: Add Link → select collection
Part 5: Tags
Add tags for cross-collection organization:
- When saving a link → add tags:
javascript,docker,tutorial - Tag view: Click any tag in the sidebar → see all links with that tag
- Search by tag: Use the search bar with tag filter
Part 6: Archiving and Snapshots
When a link is saved, Linkwarden automatically:
- Screenshots: Full-page screenshot of the page
- Readable: Extracts the article text (Mozilla Readability)
- PDF: Creates a PDF snapshot of the page
View archives:
- Click any saved link → Archive tab → view screenshot/readable/PDF
This means you keep the content even if:
- The original page is deleted
- The domain expires
- The article is paywalled later
- The site goes offline
Manual re-archive: Click the refresh icon on any link to re-capture.
Part 7: Import Existing Bookmarks
From Browser (HTML export)
- Chrome/Firefox: Bookmarks Manager → Export to HTML file
- Linkwarden → Settings → Import → Browser bookmarks → upload HTML
From Pocket
- Pocket: Settings → Export (creates HTML)
- Import the HTML file into Linkwarden
From Raindrop.io
- Raindrop → Settings → Backups → Export CSV
- Linkwarden → Settings → Import → CSV
Part 8: Share Collections
Collaborate on bookmark collections:
- Collection → Settings → Sharing
- Public: Anyone with the link can view
- Invite by email: Specific users can view or edit
Share URL: https://links.yourdomain.com/public/collection/COLLECTION_ID
Team use case: Shared "Team Resources" collection → all team members add useful links.
Part 9: RSS Feed Import
Automatically import links from RSS feeds:
- Settings → RSS Feeds → Add RSS Feed
- URL:
https://news.ycombinator.com/rss(or any RSS feed) - Collection: where to save imported items
- Fetch interval: hourly, daily
All new items from the RSS feed appear in your chosen collection automatically.
Part 10: API Access
# Get API key from Settings → API Keys → Create New
# Get all links:
curl https://links.yourdomain.com/api/v1/links \
-H "Authorization: Bearer YOUR_API_KEY"
# Create a link:
curl -X POST https://links.yourdomain.com/api/v1/links \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com","name":"Example Site","tags":["example"]}'
# Get collections:
curl https://links.yourdomain.com/api/v1/collections \
-H "Authorization: Bearer YOUR_API_KEY"
Use the API with n8n or scripts to automatically save links from other sources.
Maintenance
# Update Linkwarden:
docker compose pull
docker compose up -d
# Backup:
# Database:
docker exec linkwarden-db-1 pg_dump -U postgres linkwarden | gzip \
> linkwarden-db-$(date +%Y%m%d).sql.gz
# Archived content (screenshots, PDFs):
tar -czf linkwarden-data-$(date +%Y%m%d).tar.gz \
$(docker volume inspect linkwarden_linkwarden_data --format '{{.Mountpoint}}')
# Logs:
docker compose logs -f linkwarden
See all open source productivity and bookmarking tools at OSSAlt.com/alternatives/pocket.