---
title: "Deploy Linkwarden"
description: "Bookmark manager with full-page archiving, collections, and team sharing."
category: "Other"
url: https://railway.com/deploy/linkwarden-1
---

# Deploy Linkwarden

Bookmark manager with full-page archiving, collections, and team sharing.

**[Deploy Linkwarden on Railway](https://railway.com/template/linkwarden-1)**

- **Creator:** Agaz Self-Host
- **Category:** Other

## Template content

### Postgres

- **Image:** postgres:16-alpine

### Linkwarden

- **Image:** ghcr.io/linkwarden/linkwarden:v2.16.0
- **Health check:** /
- **Public domain:** Yes

## Documentation

# Deploy and Host Linkwarden on Railway

Linkwarden is an open-source collaborative bookmark manager that collects, organizes, annotates, and fully preserves web pages. It creates local screenshot, PDF, readable-text, and self-contained HTML archives, supports collections and tags, and lets individuals or teams retain useful material even when the original page changes or disappears.

## About Hosting Linkwarden

Hosting Linkwarden requires its web and background-worker container, PostgreSQL, a canonical authentication URL, and persistent storage for generated archives. This package pins the official Linkwarden v2.16.0 image, exposes its documented port `3000` through Railway HTTPS, and mounts `/data/data` for screenshots, PDFs, readable copies, previews, and uploaded files. PostgreSQL 16 stores users, collections, links, tags, and archive metadata on a separate volume. Railway generates the database password and NextAuth secret, keeps database traffic on the private network, and derives the exact NextAuth URL from the public service domain. Prisma migrations run before the web and worker processes start.

> Preserve only content you are authorized to access and archive. Follow applicable copyright law and site terms, do not circumvent access controls, and do not redistribute archived content without permission.

## Common Use Cases

- Build a private, searchable bookmark library with durable full-page archives
- Organize research and reference material with collections, tags, annotations, and readable views
- Share curated collections and collaborate on bookmarks with a team

## Dependencies for Linkwarden Hosting

- `ghcr.io/linkwarden/linkwarden:v2.16.0`
- `postgres:16-alpine`
- Persistent volumes at `/data/data` and `/var/lib/postgresql/data`

### Deployment Dependencies

- [Linkwarden self-hosting installation](https://docs.linkwarden.app/self-hosting/installation)
- [Linkwarden environment variables](https://docs.linkwarden.app/self-hosting/environment-variables)
- [Linkwarden v2.16.0 source](https://github.com/linkwarden/linkwarden/tree/v2.16.0)
- [Linkwarden v2.16.0 container](https://github.com/linkwarden/linkwarden/pkgs/container/linkwarden)
- [Umbrel Linkwarden definition](https://github.com/getumbrel/umbrel-apps/tree/master/linkwarden)

## Implementation Details

| Service | Image | Networking and health | Persistent storage |
| --- | --- | --- | --- |
| `Linkwarden` | `ghcr.io/linkwarden/linkwarden:v2.16.0` | Only public service; HTTPS targets port `3000`; root path `/` is the upstream container health check | `/data/data` for local archives, previews, and uploads |
| `Postgres` | `postgres:16-alpine` | Private only on port `5432`; no public TCP proxy | `/var/lib/postgresql/data` with `PGDATA` below the mount root |

- **Private database:** `Linkwarden.DATABASE_URL` references `Postgres.DATABASE_URL`, which uses `Postgres.RAILWAY_PRIVATE_DOMAIN`; no public database endpoint is provisioned.
- **Authentication URL:** `NEXTAUTH_URL` is exactly `https://${{Linkwarden.RAILWAY_PUBLIC_DOMAIN}}/api/v1/auth`, including the suffix required by Linkwarden v2.
- **Secrets:** Railway generates `NEXTAUTH_SECRET` and `POSTGRES_PASSWORD` once per deployment. Linkwarden consumes the authoritative Postgres URL rather than duplicating the password.
- **Persistence:** `STORAGE_FOLDER=data` resolves to `/data/data` in both Linkwarden processes. The mounted volume preserves generated HTML, screenshots, PDFs, readable JSON, previews, and uploaded files across redeploys.
- **First administrator:** credentials registration starts enabled so the first account receives user ID `1`, matching `NEXT_PUBLIC_ADMIN=1`. Immediately set `NEXT_PUBLIC_DISABLE_REGISTRATION=true` after creating the first administrator. Credentials login remains enabled so SMTP is not required for initial setup.
- **OAuth:** GitHub, Google, and generic OIDC are disabled by default. Their externally issued client credentials have no shared defaults; add them only for providers you configure, using the callback URLs documented in `TEMPLATE.md`.
- **Search:** Meilisearch is optional upstream and intentionally outside this two-service graph. Linkwarden falls back to PostgreSQL-backed search when `MEILI_MASTER_KEY` is absent.

This is a community-maintained deployment package and does not imply affiliation with or endorsement by Linkwarden.

## Why Deploy Linkwarden on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Linkwarden on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — [Jul'26] Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/linkwarden-1
