# Linkwarden

Collaborative bookmark manager that preserves pages, with an official REST API and a paid cloud edition.

Linkwarden captures a screenshot, PDF, and single-file HTML of every link, adds reader view with highlights, optional AI tagging, collections with member permissions, RSS subscriptions, and native mobile apps. The documented REST API with bearer tokens is the agent interface; there is no official MCP server.

Alternative to: Raindrop.io, Pocket

- Capabilities: adaptable, operable
- Vertical: notes-knowledge
- Shape: business-app
- Form factor: web-app
- Execution model: hybrid
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/linkwarden/linkwarden (AGPL-3.0), 19666 stars, last commit 2026-09-02
- Last activity: 2026-09-02
- Page: apps/linkwarden--linkwarden.html
- JSON: apps/linkwarden--linkwarden.json

## Use it when

- your team collects research links and needs the pages preserved even after they vanish
- you want an agent saving links with tags into shared collections through a plain REST API

## Gotchas

- AGPL-3.0
- Archiving runs a Playwright browser; expect memory use and a separate worker
- SSO is limited to enterprise and self-hosted users
- Community MCP wrappers (ni-c/linkwarden-mcp, homeserverhq/linkwarden-mcp) have near-zero stars; use the REST API directly

## Editions

- Self-hosted: Free, open source
  - source: https://github.com/linkwarden/linkwarden
  - container: docker compose up -d
- Cloud: Free, closed source
  - hosted: https://linkwarden.app/#pricing

## Adaptable: make it yours

Effort: config-only (31 things to edit)

.env.sample is exhaustive: NEXTAUTH_SECRET, NEXTAUTH_URL, DATABASE_URL, and BASE_URL are required; STORAGE_FOLDER or SPACES_* choose local or S3 archives; NEXT_PUBLIC_DISABLE_REGISTRATION and MAX_LINKS_PER_USER gate signups; one provider key plus its *_MODEL var turns on AI tagging; MEILI_HOST and MEILI_MASTER_KEY enable search; dozens of SSO providers each have *_CLIENT_ID, *_CLIENT_SECRET, and NEXT_PUBLIC_*_ENABLED.

- Env vars: NEXTAUTH_SECRET, NEXTAUTH_URL, DATABASE_URL, BASE_URL, STORAGE_FOLDER, SPACES_BUCKET_NAME, SPACES_ENDPOINT, SPACES_KEY, SPACES_SECRET, NEXT_PUBLIC_DISABLE_REGISTRATION, NEXT_PUBLIC_CREDENTIALS_ENABLED, MAX_LINKS_PER_USER, ARCHIVE_TAKE_COUNT, OPENAI_API_KEY, OPENAI_MODEL, ANTHROPIC_API_KEY, ANTHROPIC_MODEL, OLLAMA_MODEL, NEXT_PUBLIC_OLLAMA_ENDPOINT_URL, OPENROUTER_API_KEY, MEILI_HOST, MEILI_MASTER_KEY, EMAIL_SERVER, EMAIL_FROM, OIDC_WELLKNOWN_URL, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, PLAYWRIGHT_WS_URL, PROXY
- Config files: .env, docker-compose.yml
- Prompt files: none
- Accounts you'll need: an AI provider (optional, for tagging); S3-compatible storage (optional); Linkwarden Cloud account (cloud edition)

## Operable: what an agent can drive

Operability: official. Interface: api at https://docs.linkwarden.app/api/api-introduction (published by the builder, both).

### Reach (partial coverage)

- Save, update, and delete links: reachable. apps/web/pages/api/v1/links and links/{id}
- Retrieve preserved formats (screenshot, PDF, HTML): reachable. api/v1/archives/{id} and links/{id}/archive
- Organize into collections and sub-collections: reachable. api/v1/collections and collections/{id}
- Tag links: reachable. tags in the link payload; docs list tags endpoints
- Highlight and annotate in reader view: reachable. api/v1/highlights and links/{id}/highlights
- Full text search: reachable. search parameters on links index; docs list search
- RSS feed subscriptions: reachable. docs API introduction lists RSS subscriptions
- Share collections publicly: reachable. api/v1/public/collections and public/links
- AI tagging: not reachable. runs automatically on save when a provider is configured; no endpoint to trigger it
- Send to Wayback Machine: undetermined. optional per-save behavior; no explicit endpoint seen

## Code stack

- Languages: TypeScript
- Frameworks: Next.js, Prisma, Playwright
- Package manager: yarn
- Database: PostgreSQL, Meilisearch
- Hosting target: docker

## Model stack

- Providers: OpenAI, Anthropic, Ollama, OpenRouter, Azure OpenAI, Perplexity, custom OpenAI-compatible
- Models: none
- Keys you need (names only): OPENAI_API_KEY, ANTHROPIC_API_KEY, OPENROUTER_API_KEY, AZURE_API_KEY, PERPLEXITY_API_KEY, NEXT_PUBLIC_OLLAMA_ENDPOINT_URL
- Prompts live in: none
- Tools: none

## Evidence and confidence

- formFactor: README and stack: Next.js web app with Docker install (confidence 0.95)
- executionModel: optional AI tagging with OpenAI, Anthropic, Ollama, OpenRouter, Azure, Perplexity keys in .env.sample (confidence 0.85)
- operability: docs.linkwarden.app/api: OpenAPI 1.0.0 with bearer auth; routes under apps/web/pages/api/v1; no mcp in the repo tree (confidence 0.9)
- effort: .env.sample with documented variables; docs self-hosting guide (confidence 0.9)
- editions: README: official Cloud with 14-day trial; self-host free (confidence 0.7)
- active: pushedAt 2026-09-02; 2.15 release on HN 2026-07-10
- provenance: project from 2023, no agent markers in repo (confidence 0.5)
- reach:  (confidence 0.8)

## Open questions

- Cloud plan names and prices (linkwarden.app pricing section did not render)
- Whether tags and users have dedicated v1 endpoints or ride on links

## Sources

- https://github.com/linkwarden/linkwarden (sourcing:notes-knowledge:community)
- https://docs.linkwarden.app/api/api-introduction (analysis)
