Introducing Qiro: Open Source QR Code Management
After months of building in public, we’re excited to officially announce Qiro — a fully open source QR code management platform built on Elixir and Phoenix.
Why we built Qiro
The commercial QR code tools on the market are either prohibitively expensive, lock your data in proprietary formats, or have privacy policies that would make you cringe. We wanted something different — a tool you can self-host on your own infrastructure with full control over your data.
What Qiro offers
Qiro packs everything you’d expect from an enterprise QR code platform, but with zero vendor lock-in:
- Dynamic QR codes — update the destination URL without reprinting
- Analytics — track scans by location, device, browser, and time
- Workspaces — organize QR codes by team or project
- API access — integrate with your existing tools via REST API
- Custom styles — brand your QR codes with your colors and logo
Built on solid foundations
We chose the Elixir/Phoenix stack because of its legendary reliability and performance. A single Qiro instance can handle thousands of concurrent scan redirects with millisecond latency and minimal resource usage.
# Every scan redirect is fully tracked
def handle_scan(conn, %{"short_code" => short_code}) do
with {:ok, qr_code} <- QR.get_by_short_code(short_code) do
QR.record_scan(qr_code, conn)
redirect(conn, external: qr_code.destination_url)
end
end
Open source and self-hostable
Qiro is licensed under AGPL-3.0. You can run it on a $6 VPS, a Kubernetes cluster, or anything in between. The Docker image is under 100MB.
docker run -p 4000:4000 \
-e DATABASE_URL=ecto://user:pass@host/qiro \
-e SECRET_KEY_BASE=$(mix phx.gen.secret) \
ghcr.io/qiro/qiro:latest
What’s next
We’re actively working on:
- A mobile app companion for on-the-go QR generation
- Zapier and Make integration
- Bulk import/export
- Advanced analytics filters
Follow us on GitHub and give us a star if Qiro sounds useful to you. We’d love your feedback!