# Project pack: Linkwarden @ 952ac45 Facts about **Linkwarden** for an AI following the [BespokeAI handover guide](https://handoff.bespokeai.software/guide/v4.md). Pinned to one version; never changes after publication. > Linkwarden is a bookmark keeper that also saves a full copy of each page, as a screenshot, a PDF and a readable version, so recipes, articles and guides stay with you even if the website changes or vanishes. Sort links into collections and tags, highlight and annotate as you read, and share collections with family or friends. It runs on your own server, with phone apps and a browser extension. ## Setup path (checked 2026-11-03) - **Needs Docker.** Tell the person before any setup work; no light non-Docker route is documented upstream. Upstream ships a docker-compose.yml; no other install path was found in the pages checked. Docker Desktop on Windows may need a computer restart and an admin-only Windows feature (virtualisation); say so and let the person decide. - Verdict source: https://raw.githubusercontent.com/linkwarden/linkwarden/HEAD/docker-compose.yml - You may be unable to download source archives or run commands in this session. The person downloads and runs things; if you cannot fetch something, give any changed file in full in chat with its path. ## Version and source - Repository: https://github.com/linkwarden/linkwarden - Pinned commit: `952ac4540657cae3a67c3ca59433899d2fda8374`. Use exactly this version. - Zip the person can download in a browser: https://github.com/linkwarden/linkwarden/archive/952ac4540657cae3a67c3ca59433899d2fda8374.zip - Fresh checkout (only if you have a shell and git): use the commands below in an empty folder. If this exact source is already checked out, keep your branch and use the development command; do not clone again or reset local changes. - Official docs: https://docs.linkwarden.app - Live demo: https://demo.linkwarden.app. Official public demo, shared by everyone. Don't save anything private. - Licence: **AGPL-3.0-only**. Free to use and change. If you run a changed version that other people use over the internet (not just you or your household), you must offer them your source code under the same licence. Private use has no extra obligations. ## Commands from the pinned source - Developer commands (they may use Docker): ```sh git clone https://github.com/linkwarden/linkwarden bespoke-linkwarden cd bespoke-linkwarden git checkout --detach 952ac4540657cae3a67c3ca59433899d2fda8374 # Prepare development requirements and local configuration first. # Setup notes: web app on :3000 plus the worker yarn install && cp .env.sample .env && yarn prisma:generate && yarn prisma:deploy && yarn concurrently:dev ``` - Separate trial of the current upstream release (not your changes; sample data and a separate data directory only): ```sh mkdir linkwarden && cd linkwarden curl -O https://raw.githubusercontent.com/linkwarden/linkwarden/952ac4540657cae3a67c3ca59433899d2fda8374/docker-compose.yml curl -L https://raw.githubusercontent.com/linkwarden/linkwarden/952ac4540657cae3a67c3ca59433899d2fda8374/.env.sample -o .env # Edit .env: set NEXTAUTH_SECRET, POSTGRES_PASSWORD and MEILI_MASTER_KEY to three different long random phrases. docker compose up -d # Then open http://localhost:3000 and create your account. ``` - Tools these commands use: Docker with Docker Compose; about 4 GB RAM and 2 CPU cores, For development, Node 20+ and Yarn (Corepack), PostgreSQL, and Playwright's Chromium for page capture - Develop: `yarn install && cp .env.sample .env && yarn prisma:generate && yarn prisma:deploy && yarn concurrently:dev # web app on :3000 plus the worker` - Test: `yarn test # vitest; e2e tests: yarn workspace @linkwarden/web e2e` - Check/lint: `yarn workspace @linkwarden/web lint` - Build: `yarn prisma:generate && yarn web:build` - Stack: typescript, javascript, css (Next.js, React, Prisma, Tailwind CSS, Playwright, Expo (mobile)). Difficulty for a non-developer with an AI: **moderate**. Theme, preservation formats, AI tagging, sign-up and storage are settings or environment variables. The code is a TypeScript monorepo: a Next.js web app (apps/web), a background worker that captures pages (apps/worker), a Prisma database package and a mobile app. Pages and API routes are easy to find; anything touching preservation runs a headless browser and needs the full Docker stack to test. Personal data: **yes**. Stored in: PostgreSQL (./pgdata) for links, collections, tags and highlights; page copies, screenshots, PDFs and uploads in ./data (or S3); the search index in ./meili_data. Secrets are entered by the person, never in chat. --- Later, only when a step needs it: [reference.md](https://handoff.bespokeai.software/p/linkwarden/952ac45/r3/reference.md) (customisation points, must-keep-working, data and costs, coding conventions) · [hosting.md](https://handoff.bespokeai.software/p/linkwarden/952ac45/r3/hosting.md) (long-term hosting; hosts are paid third parties) · [bespoke.yaml](https://handoff.bespokeai.software/p/linkwarden/952ac45/r3/bespoke.yaml) · [SKILL.md](https://handoff.bespokeai.software/p/linkwarden/952ac45/r3/SKILL.md)