v1.1.0 · MIT licensed · self-hosted
A self-hosted, open-source QR generator with optional auth, scan analytics, and admin controls. No SaaS account, no trackers, no third parties — ever.
Generate
No sign-up required — anonymous codes are enabled by default. Sign in to manage and edit them later.
Features
Built for teams that print, share, and track real-world links — and want the whole stack under their own control.
Foreground & background colors, border treatments, templates, and a 10-character center overlay.
Download crisp PNG bitmaps or scalable SVG vectors. Pick the right format for print or web.
Require a password before the redirect resolves. Hashed server-side, never stored in plain text.
Schedule QR codes to deactivate automatically. Run a campaign without manual cleanup.
Count scans, country (from your reverse-proxy header), and device class — no fingerprinting, no trackers.
A clean REST API and CSV upload for generating many codes at once. Issue per-user API keys.
How it works
01
Drop any destination — link, login page, Wi-Fi voucher, payment flow.
02
Pick colors, a template, optional center text, expiry and password.
03
Download PNG/SVG, copy the short URL, or embed via the API.
Privacy & tracking
Open-QR is engineered so there is nothing for us to leak — because there is no us. You run it. Raw identifiers are never persisted; sessions are HTTP-only and scoped to the auth path; tracking pixels and third-party scripts simply do not exist in the codebase.
The full source is on GitHub under the MIT license. Audit it, fork it, deploy it.
Developer API
Issue per-user API keys from the dashboard, point your tooling at your own host, and integrate QR generation into anything — CI/CD, print pipelines, kiosk apps.
curl -X POST https://your-host/api/v1/qr \
-H "Authorization: Bearer $OPENQR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"targetUrl": "https://example.com",
"style": { "template": "minimal", "errorCorrection": "M" }
}'Self-host
Open-QR ships as a single Docker image with embedded SQLite. Bring your own SMTP for email OTP, or run it fully anonymous. There's nothing else to set up.