Sign inSign up

akrustam/linkwarden-slim

By akrustam

Updated 5 days ago

Unofficial slim Linkwarden: no Chromium/Playwright, multi-arch, upstream tags.

Image
0

1.3K

akrustam/linkwarden-slim repository overview

Unofficial slim multi-arch Docker image of Linkwarden, built from upstream source without bundling Chromium / Playwright browsers.

Monolith HTML capture binary is still included (Rust monolith).
Default runtime: DISABLE_BROWSER=true.
Image name: linkwarden-slim
Platforms: linux/amd64, linux/arm64
Tags: vX.Y.Z (same as upstream releases) and latest

Not affiliated with the Linkwarden project. See Disclaimer. Pull

Replace / with your GitHub org/user and Docker Hub username after you publish.

GHCR

docker pull ghcr.io//linkwarden-slim:v2.15.1 docker pull ghcr.io//linkwarden-slim:latest

Docker Hub

docker pull docker.io//linkwarden-slim:v2.15.1 docker pull docker.io//linkwarden-slim:latest

Pinned upstream version used for local docs / path-push rebuilds: see VERSION (pin only — not the source of truth for “already published”). Capabilities without a browser Works Broken / skipped for new links UI / API Screenshot Collections, tags, users PDF MeiliSearch Preview images RSS Readable extraction (browser path) AI tagging (if configured) Monolith HTML via browser flow* Viewing already saved archives Wayback capture for new links

*The monolith binary is in the image, but browser-driven preservation paths still require a browser or remote Playwright. Entrypoint OR invariant

There is no local Chromium. On start, docker-entrypoint.sh requires:

ok := (DISABLE_BROWSER|DISABLE_PRESERVATION is truthy) OR (PLAYWRIGHT_WS_URL nonempty)

Otherwise the container exits with code 1. Config Result Default (DISABLE_BROWSER=true) OK Disable false + PLAYWRIGHT_WS_URL=ws://… OK Disable false, URL empty exit 1

Truthy values: true, 1, yes (case-insensitive). No TCP probe of the remote browser.

Example — remote Playwright:

docker run --rm
-e DISABLE_BROWSER=false
-e PLAYWRIGHT_WS_URL=ws://browser:3000/
… ghcr.io//linkwarden-slim:v2.15.1

CI / sync policy

One workflow: .github/workflows/build-publish.yml. Trigger Version source schedule every 6h (0 */6 * * *) releases/latest → tag_name workflow_dispatch input version (+ optional force) push to main (Dockerfile / entrypoint / workflow) pin from VERSION

Source of truth for “already built”: versioned tag on GHCR ghcr.io//linkwarden-slim:vX.Y.Z. If it exists and force is false → skip. VERSION in git is only a pin (docs + path-push); commit of the pin after publish is best-effort.

Build contract:

checkout this repo checkout linkwarden/linkwarden @ → ./src cp docker-entrypoint.sh ./src/ docker buildx build -f Dockerfile ./src

Dockerfile sync-policy

Our Dockerfile is a deliberate fork of the upstream Dockerfile for the same tag:

Keep monolith-builder + app-builder (with PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1) aligned with upstream.
Omit playwright install / /ms-playwright and Playwright apt deps in the runtime stage.
Add DISABLE_BROWSER=true and ENTRYPOINT for docker-entrypoint.sh.

On every VERSION bump: manually diff against upstream’s Dockerfile for that tag; update node: / rust: base pins in lockstep. No sed/patch in CI.

After yarn workspaces focus --production, the Dockerfile runs a safe prune (keeps playwright / playwright-core for PLAYWRIGHT_WS_URL):

remove @next/swc-* (build-only)
remove unused Prisma WASM for mysql/sqlite/sqlserver (Postgres engines kept)
strip *.md / *.map / lucide UMD / phosphor SVG asset pack

Most remaining weight is Next.js + prod node_modules (~0.5–0.9 GB unpacked). Desktop “Size” is uncompressed; Hub shows compressed download. Compose

See docker-compose.example.yml for Postgres + MeiliSearch + slim Linkwarden. Local build

git clone https://github.com/linkwarden/linkwarden.git src git -C src checkout "$(cat VERSION)" cp docker-entrypoint.sh ./src/ docker build -f Dockerfile -t linkwarden-slim:local ./src

Publishing setup (maintainers)

Create a GitHub repo and push this tree.
Add secrets: DOCKERHUB_USERNAME, DOCKERHUB_TOKEN.
Ensure GITHUB_TOKEN can write packages (packages: write is in the workflow).
Run Actions → build-publish → Run workflow with version=v2.15.1 (first publish).
Confirm tags on GHCR and Docker Hub; compare Hub compressed size vs Docker Desktop uncompressed size.

Disclaimer

This is an unofficial packaging project. Linkwarden® and the application source are owned by their respective authors under AGPL-3.0. Packaging files in this repository are MIT; the image contents include AGPL software — comply with AGPL when redistributing the image. Use at your own risk; no warranty.

Tag summary

Content type

Image

Digest

sha256:acad792df

Size

248.3 MB

Last updated

5 days ago

docker pull akrustam/linkwarden-slim