Linkwarden

Self-hosted collaborative bookmark manager that captures full-page archives, enables annotation, and keeps your knowledge accessible forever.

18.8Kstars
795forks
GNU AGPLv3
TypeScript

Linkwarden is a self-hosted, open-source collaborative bookmark manager built for researchers, content teams, and knowledge workers who need to permanently preserve and organize web content. It solves link rot at its root by automatically saving a screenshot, PDF, and single HTML archive of every webpage you bookmark — so your links remain accessible even if the original page disappears.

Beyond preservation, Linkwarden provides a distraction-free reader view with text highlighting and margin annotations, AI-powered automatic tagging based on page content, and full-text search via Meilisearch. Teams can collaborate on shared collections with granular permission controls, and public sharing lets you distribute curated link sets to anyone.

The platform is built on a Next.js and TypeScript monorepo with three distinct services: a web frontend, a background worker that handles archival using Playwright and the Rust-based Monolith CLI, and a shared Prisma/PostgreSQL data layer. Native iOS and Android apps, a browser extension, Floccus sync support, and a REST API make it accessible from any device or workflow.

Linkwarden ships as a Docker Compose stack with PostgreSQL and Meilisearch, making self-hosted deployment straightforward for homelabs, NAS devices, and cloud VMs. An official Linkwarden Cloud offering is available for those who prefer a managed experience, with all revenue funding continued open-source development.

What You Get

  • Full-page Archive in Three Formats - Automatically captures a screenshot, PDF, and single self-contained HTML file for every saved link, ensuring content remains accessible long after the original page changes or disappears.
  • Reader View with Highlighting and Annotations - Opens any saved page in a clean, distraction-free reading interface where you can highlight passages and add margin notes, with configurable font family, size, line height, and line width.
  • AI-Powered Auto-Tagging - Analyzes page content using a local AI model to generate relevant tags automatically, with options to generate new tags, apply only from an existing tag set, or use predefined tags.
  • Collaborative Collections with Role-Based Permissions - Invite team members to contribute to shared link collections and assign granular permissions for viewing, editing, or administering content within each collection.
  • Wayback Machine Integration - Optionally submits saved pages to archive.org for decentralized, permanent storage as a secondary backup alongside the local archive copies.
  • Browser Extension and Floccus Sync - Save links in one click from Chrome, Firefox, or Edge using the official browser extension, and sync existing browser bookmarks bidirectionally via Floccus.
  • RSS Feed Subscription in Collections - Subscribe to RSS feeds directly within any collection so that new articles from followed sources automatically appear alongside manually saved links.
  • SSO Authentication and API Key Access - Enterprise and self-hosted users can authenticate via SAML or OAuth2 SSO providers, and all users can generate API keys to integrate Linkwarden into automation workflows.
  • Bulk Actions and Import/Export - Select hundreds of links at once to batch-tag, move, or delete; import bookmarks from browser HTML exports or SingleFile uploads; export the full archive as JSON.
  • Native iOS and Android Apps - Official mobile apps support creating collections, browsing and searching saved links, sharing from the system share sheet, offline reading of cached content, and both Cloud and self-hosted instances.

Common Use Cases

  • Academic researchers preserving sources - A PhD student saves journal articles and conference papers with full-page PDFs so citations remain accessible for years, regardless of paywall changes or domain expirations.
  • Content teams building shared reference libraries - A marketing team collects competitor landing pages, case studies, and trend reports into shared collections, using AI tagging to surface relevant links quickly during campaign planning.
  • Developers archiving technical documentation - A DevOps engineer saves API reference pages, Stack Overflow answers, and runbook guides with screenshots and HTML copies, then searches full-text across the archive during incidents.
  • Personal knowledge management and second brain - A writer curates quotes, essays, and research across tagged collections with margin annotations, then exports links and notes into Obsidian or Notion for writing projects.
  • Homelab users replacing commercial read-it-later apps - Someone who previously used Pocket or Instapaper self-hosts Linkwarden to own their data, gaining permanent archival and full-text search that the commercial tools don’t offer.
  • Teams coordinating content calendars and news monitoring - A newsroom assigns reporters to collections by topic; each member saves and annotates breaking articles, and editors review the shared queue to assign follow-up coverage.

Under The Hood

Architecture Linkwarden is organized as a Yarn v4 monorepo with three deployable services and five shared packages. The web application is a Next.js Pages Router app that handles all HTTP requests through typed Next.js API routes, with business logic isolated in a controller layer and data access centralized through a shared Prisma client package. The background worker is a standalone Node.js process that runs an event loop polling for unprocessed links and dispatching them to purpose-specific handlers for screenshot capture, PDF export, HTML snapshotting, readability extraction, and Wayback Machine submission. A shared router package encapsulates query logic for collections, links, tags, highlights, and users, preventing duplication between API handlers. This separation means the web process and the worker process can scale, restart, and be updated independently without coupling their concerns.

Tech Stack The web frontend is built with Next.js 15 and React 19 on TypeScript, using NextAuth for authentication with support for credentials, OAuth2, and SAML SSO via the Prisma adapter. Data is stored in PostgreSQL with Prisma ORM managing the schema, migrations, and type-safe queries. Meilisearch provides full-text search with containerized persistent storage. The archival worker uses Playwright to drive a headless Chromium browser for screenshots and PDFs, and pipes page HTML through the Monolith Rust binary — built in a separate Docker stage — to produce self-contained single-file HTML archives. Local AI tagging integrates with configurable providers including Ollama and Perplexity. The entire stack is orchestrated with Docker Compose, and Stripe is optionally integrated for the cloud billing tier.

Code Quality The project has comprehensive test coverage across multiple layers: Playwright end-to-end tests exercise authentication flows, link creation, and import workflows against a real browser; Vitest integration tests run against a live PostgreSQL instance for controller-level logic like HTML import parsing; and unit tests cover security-critical utilities including the SSRF protection module, which validates both IPv4 and IPv6 addresses against blocked CIDR ranges and hostname suffixes. The SSRF implementation is notably thorough, handling IPv4-mapped IPv6 addresses, double-colon expansion, DNS rebinding vectors, and configurable private network access. Error handling uses typed custom error classes with explicit catch blocks throughout the archival pipeline. TypeScript strict mode is enforced across all packages, and ESLint with Prettier maintains consistent formatting.

What Makes It Unique Linkwarden’s archival pipeline is its most distinctive technical feature: instead of relying on third-party screenshot APIs or cloud archiving services, it combines a self-managed Playwright Chromium instance with the Rust-based Monolith CLI to produce three independent archive formats per link in a single processing pass. The Monolith binary inlines all remote assets — stylesheets, scripts, and images — into a single self-contained HTML file that renders faithfully without any network access. The browser instance is shared across concurrent archival jobs and automatically recycled every thirty minutes to prevent memory accumulation. The SSRF protection layer performs DNS resolution at the application level before any browser or HTTP request is issued, blocking private network access while supporting an explicit opt-in flag for homelabs. The AI tagging system supports three distinct modes — generate, existing, and predefined — each using different prompt strategies, and can be toggled to retroactively process already-archived links.

Self-Hosting

Linkwarden is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). In plain terms this means the source code is freely available to use, modify, and redistribute, but any modified version you deploy — including as a network service — must also be released under the same AGPL-3.0 license. For most self-hosters running Linkwarden internally for their own team, this has no practical impact. Organizations that want to integrate Linkwarden into a commercial product or SaaS offering they distribute to others should evaluate whether the copyleft terms are compatible with their licensing requirements.

Running Linkwarden yourself requires deploying three services: the Next.js web application, the background archival worker, and PostgreSQL for data storage. Optionally you will also want Meilisearch for full-text search. The official Docker Compose file handles all of this, and most homelabs and small teams can get started on a single server with 2–4 GB of RAM. The archival worker launches a persistent headless Chromium instance, so memory usage grows with link processing volume. You are responsible for maintaining your own backups, applying version updates by pulling new container images, and monitoring disk usage as archived screenshots, PDFs, and HTML files accumulate on the filesystem.

The official Linkwarden Cloud tier handles all infrastructure, updates, and backups, and directly funds ongoing development. Self-hosters gain full data ownership and no per-seat pricing, but give up managed reliability, automatic updates, priority support, and the guarantee of a hardened production environment. SSO support (SAML, OAuth2) is available to both Cloud subscribers and self-hosted Enterprise customers. Community support is available through the Discord server and GitHub issues, but there is no formal SLA or paid support contract for the open-source self-hosted deployment.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack

No spam. Unsubscribe anytime.

Join 750+ subscribers
No spam. Unsubscribe anytime.

Search