Dynamic short links
Re-point custom codes any time — no reprinting. Add expiry dates (expired links return 410) and toggle any link on or off.
QRocodilla is a friendly, self-hosted URL shortener and QR code studio. Design codes for anything, watch every scan roll in, and redirect on the fly — all from one snappy studio.
Everything you need to run links and codes yourself — no swamp of third-party services required.
Re-point custom codes any time — no reprinting. Add expiry dates (expired links return 410) and toggle any link on or off.
Per-link clicks per day, top referrers, devices, and countries — and never a raw IP address stored.
A token-authenticated /api/v1 for full CRUD, stats, and QR rendering. Mint and revoke keys at /admin/keys.
Search, sortable columns, and pagination across every link and code — all in one tidy place.
Username + password login (scrypt-hashed) with a first-run /setup wizard and HMAC-signed sessions.
Host-aware base URLs serve many short-link domains from a single instance, each with its own canonical links.
…all from one self-hosted instance — no third-party services, no tracking scripts, MIT licensed.
Style every QR in a two-pane studio and watch it redraw as you type — then download straight from the form as SVG or PNG.
One generator, every common QR payload. Point the croc at it and it bites out a code.
Run it with one docker compose up, or manually on Node ≥ 20. The SQLite database creates itself on first boot — then finish the /setup wizard to pick your admin login.
# 1 · Clone & enter the repo
git clone https://github.com/QRocodilla/qrocodilla.git
cd qrocodilla
# 2 · Set a session secret in .env
cp .env.example .env
openssl rand -hex 32 # paste as SESSION_SECRET
# 3 · Launch with Docker 🐳
docker compose up -d
# 4 · Open http://localhost:3000 🐊
# then finish /setup to create your admin login
# 1 · Clone & enter the repo
git clone https://github.com/QRocodilla/qrocodilla.git
cd qrocodilla
# 2 · Install dependencies (needs Node ≥ 20)
npm install
# 3 · Set a session secret in .env
cp .env.example .env
openssl rand -hex 32 # paste as SESSION_SECRET
# 4 · Start the dev server (auto-creates the database)
npm run dev
# 5 · Open it up 🐊
# app: http://localhost:3000
# setup: http://localhost:3000/setup
# Build an optimized production bundle
npm run build && npm start
# Handy extras
npm run test:run # run the Vitest suite
npm run typecheck # TypeScript checks
Clone it, run it, and start turning links into trackable QR codes in under a minute.