What Linkwarden Does
- Save & Organize: Save links with tags, collections, and descriptions
- Page Preservation: Automatic full-page screenshots and PDF snapshots of every saved link
- Full-Text Search: Search across saved page content, not just titles and URLs
- Collaboration: Share collections with team members, with permission controls
- Browser Extension: One-click save from Chrome, Firefox, and Safari
- Mobile PWA: Progressive web app for mobile bookmark access
- Import/Export: Import from Pocket, Raindrop, browser bookmarks (HTML/JSON)
- RSS Feeds: Subscribe to collections via RSS
- Tags & Collections: Hierarchical organization with nested sub-collections
- Reading List: Mark bookmarks as read/unread with reading progress
Architecture
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Next.js │────▶│ Next.js API │────▶│ PostgreSQL │
│ Frontend │ │ + Prisma │ │ (Data) │
└──────────────┘ └──────┬───────┘ └──────────────┘
│
┌──────┴───────┐
│ Playwright │
│ (Screenshot │
│ & Archive) │
└──────────────┘Self-Hosting
Docker Compose
services:
linkwarden:
image: ghcr.io/linkwarden/linkwarden:latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://linkwarden:linkwarden@postgres:5432/linkwarden
NEXTAUTH_SECRET: your-random-secret
NEXTAUTH_URL: http://localhost:3000
NEXT_PUBLIC_DISABLE_REGISTRATION: "false"
ARCHIVAL_METHOD: screenshot,pdf
depends_on:
- postgres
volumes:
- linkwarden-data:/data/data
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: linkwarden
POSTGRES_PASSWORD: linkwarden
POSTGRES_DB: linkwarden
volumes:
- pg-data:/var/lib/postgresql/data
volumes:
linkwarden-data:
pg-data:Key Features
Page Archival
Every saved link automatically gets:
- Screenshot: Full-page rendered screenshot (like Wayback Machine)
- PDF Snapshot: Complete page saved as PDF
- Readable View: Clean, readable text extraction
This means even if a website goes offline, you still have the content.
Browser Extension
Available for Chrome, Firefox, and Safari:
- Right-click any link to save
- Quick-add popup with tag and collection selector
- Keyboard shortcut (Ctrl+Shift+L)
Collaboration
- Create shared collections
- Invite team members with view/edit/admin roles
- Activity feed for shared collections
- Public collections with shareable links
API
# Save a link
curl -X POST http://localhost:3000/api/v1/links
-H "Authorization: Bearer YOUR_TOKEN"
-H "Content-Type: application/json"
-d '{"url": "https://example.com", "collection": {"id": 1}, "tags": [{"name": "dev"}]}'
# Search links
curl "http://localhost:3000/api/v1/links?searchQueryString=react&searchByName=true&searchByUrl=true"
-H "Authorization: Bearer YOUR_TOKEN"Linkwarden vs Alternatives
| Feature | Linkwarden | Raindrop.io | Wallabag | |
|---|---|---|---|---|
| Open Source | Yes (AGPL-3.0) | No | No | Yes (MIT) |
| Self-hosted | Yes | No | No | Yes |
| Page archive | Screenshot + PDF | Simplified | No | Article text |
| Collaboration | Yes | No | Yes | No |
| Full-text search | Yes | Premium | Yes | Yes |
| Browser ext. | Yes | Yes | Yes | Yes |
FAQ
Q: How much storage do web page snapshots use? A: Each screenshot is about 0.5–2MB (PNG); PDFs about 0.2–1MB. Allocate enough storage if you save a lot of links. In settings, you can choose to save only screenshots or only PDFs.
Q: Can I import browser bookmarks? A: Yes. You can import HTML bookmarks exported from browsers, plus exports from Pocket, Raindrop.io, and Omnivore.
Q: Multi-user support? A: Yes. Each user has their own bookmark space, and you can collaborate through shared collections. Admins control whether registration is open.