██╗ ██╗ ██╗ ██╗ █████╗
██║ ██║ ██║ ██╔╝██╔══██╗
██║ ██║ █████╔╝ ███████║
██║ ██║ ██╔═██╗ ██╔══██║
███████╗███████╗██║ ██╗██║ ██║
╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝
One-command installer for leih.lokal — a management system for Libraries of Things (Leihladen).
npx llka-deployThat's it. The interactive installer walks you through everything.
| Component | What it does | Port |
|---|---|---|
| LLKA-B | PocketBase backend — API, database, auth, hooks | 8090 |
| LLKA-V | Management UI — items, customers, rentals | 3000 |
| LLKA-R | Public reservation portal (optional) | 3001 |
Everything is installed to ~/.leihlokal/.
- Component selection — choose which parts of the stack to install
- Configuration — name your library, set opening hours, configure your domain
- Prerequisites check — verifies git, curl, Node.js 20+
- LLKA-B — downloads the latest PocketBase binary for your platform
- LLKA-V / LLKA-R — clones, configures
.env.local, and builds the Next.js apps - Admin setup — creates your superuser, seeds settings, configures email templates
- Networking — optionally sets up Caddy (auto-HTTPS) or Cloudflare Tunnel
- Services — registers systemd (Linux) or launchd (macOS) services for auto-start
- CLAUDE.md — generates an agent-readable config file for AI-assisted maintenance
- Linux or macOS
- Node.js 20+ (Bun auto-detected and preferred if available)
- git and curl
npx llka-deploy@latestThe installer detects your existing installation and offers to update, reconfigure, start fresh, or uninstall.
When you provide a domain name, the installer offers three options:
- Caddy (recommended) — downloads Caddy, generates a Caddyfile, handles HTTPS automatically
- Cloudflare Tunnel — sets up a tunnel with
cloudflaredfor Cloudflare-managed domains - Manual — prints the port map and example reverse proxy configs
Without a domain, everything runs on localhost.
| Linux | macOS | |
|---|---|---|
| Services | systemd (auto-start, auto-restart) | launchd (auto-start, auto-restart) |
| Logs | journalctl --user -u leihbackend |
~/.leihlokal/logs/ |
| Networking | Caddy, Cloudflare Tunnel, manual | Caddy, manual |
| Production | Yes | Testing recommended |
npx llka-deploy
# Select "Uninstall"Stops all services, deregisters service files, and removes ~/.leihlokal/.
git clone https://github.com/leih-lokal/llka-deploy
cd llka-deploy
npm install
npm run dev # Run directly via tsx
npm run build # Build for distributionTech stack: TypeScript, @clack/prompts (TUI), tsup (bundler), Node.js built-ins for everything else.
- leih-lokal/leihbackend — LLKA-B: PocketBase backend, hooks, migrations
- leih-lokal/llka-verwaltung — LLKA-V: Next.js management UI
- leih-lokal/llka-resomaker — LLKA-R: Next.js reservation portal
MIT