# The best open-source QR code generators

> For libraries, the standouts are qrcode on npm (MIT), Python's qrcode and segno (BSD), ZXing (Apache 2.0, encode and decode), and Nayuki's QR Code generator, the respected multi-language reference implementation (MIT). Finished open-source generator websites are rarer than the search suggests: most are a static page wrapping one of those libraries. Judge every option by licence and maintenance activity.

Source: https://useqr.app/vs/best-open-source-qr-code-generator · Last reviewed 2026-08-21 · UseQR is free forever, no signup.

---

## Two different questions hiding in one search

"Open-source QR generator" means either **a library** you embed in your own code, or
**a product** (a generator with a UI and API), whose source you can read, fork and
self-host. The lists are different and conflating them produces bad recommendations, so
here they are separately.

## The libraries

| Library | Language | Licence | Notes |
|---|---|---|---|
| qrcode (npm) | JavaScript | MIT | The default in the JS ecosystem; [detailed comparison](/vs/useqr-vs-qrcode-npm) |
| qr-code-styling | JavaScript | MIT | Styled codes: dots, eyes, logos; [comparison](/vs/useqr-vs-qr-code-styling) |
| qrcode (PyPI) | Python | BSD | The default in Python; [comparison](/vs/useqr-vs-python-qrcode) |
| segno | Python | BSD | Rigorous ISO/IEC 18004 coverage incl. Micro QR, zero dependencies |
| ZXing | Java (+ ports) | Apache 2.0 | Encodes **and decodes**; the decoder is the industry workhorse, now in maintenance mode |
| Nayuki QR Code generator | Java, TS, Python, Rust, C++, C | MIT | The respected reference implementation: small, correct, readable |

Two of these deserve a sentence more. **Nayuki's QR Code generator** is what you read
when you want to understand how encoding actually works: one careful codebase ported
across six languages, widely treated as a reference. **[ZXing](/glossary/zxing)** matters
because it decodes: any serious pipeline should read its codes back after generating
them, and ZXing (or a port) is usually the reader. It is what UseQR's own
[verify loop](/docs/developers/why-verify-that-your-qr-code-decodes) uses. The wider
field, including Go, Rust and PHP options, is surveyed in
[QR libraries compared](/docs/developers/qr-code-libraries-compared).

## The products

Most generator *websites* are closed: free to use, but you cannot read, audit or redeploy
them. Be sceptical of the ones that claim otherwise: "open source" is a common badge on
generator sites whose repository is either absent, a years-stale mirror, or a marketing
page rather than the code actually running. Click through before you believe it.

The genuinely open ones are almost always **library-plus-page builds**: a static page
wrapping `qrcode` or `qr-code-styling`, published by one person. These are perfectly good;
judge them individually by the criteria below.

UseQR, this site, is not on that list. It is free forever with no account and no paid
tier, and static codes are generated entirely in your browser, but the source is not
published today. If auditability is the requirement rather than the price, use a library
from the table above and read it yourself.

If your interest in open source is really about running it yourself, that is its own
decision with its own trade-offs, covered in
[the self-hosted roundup](/vs/best-self-hosted-qr-code-generator) and the
[self-hosting guide](/docs/developers/self-hosting-a-qr-generator).

## How to judge any option

1. **Licence.** MIT/BSD/Apache mean unrestricted commercial embedding. Copyleft licences
   (GPL family) are fine for self-hosting but constrain embedding in proprietary code:
   check before you build on anything.
2. **Maintenance.** Look at the commit log, not the star count. A QR library can be
   legitimately "done" (the spec is from 2000 and stable), but a decoder or a product
   accumulating unfixed issues is a different signal.
3. **Correctness evidence.** Tests against the spec, and ideally decode-verification of
   output. Encoding bugs are silent; they produce codes that mostly scan.
4. **Payload scope.** Libraries encode strings; the WiFi/UPI/EPC payload formats on top
   are where [most real-world failures happen](/docs/troubleshooting/wifi-qr-code-not-connecting).
   Check whether the project handles them or leaves them to you.

## Honest bottom line

Inside your own codebase: use a library: qrcode, segno, or Nayuki depending on language
and taste, with ZXing reading the output back. That combination is the whole recipe, and
it is the same one every good generator uses under the hood.

If what you actually want is not to *read* the code but to *trust the output*, there is a
better test than a licence file: generate a code, then
[decode it independently](/validate) and check that what comes back is what you put in.
That works on any generator, open or closed, ours included.

## FAQ

### What is the best open-source QR code library?
qrcode (npm) for JavaScript, qrcode or segno for Python, ZXing where you also need decoding, and Nayuki's QR Code generator as the reference implementation across six languages. All are permissively licensed.

### Is there a fully open-source QR code generator website?
There are small ones, usually a static page wrapping an open library, published by an individual. Most large generator sites are closed products with free tiers, and some advertise "open source" while linking to an empty or stale repository, so check the commit log before trusting the badge.

### Are open-source QR generators free for commercial use?
The permissively licensed ones (MIT, BSD, Apache 2.0) are, with obligations limited to attribution notices. Check the licence file on anything GPL-family before embedding it in proprietary software.

### Why does open source matter for QR codes?
Mainly auditability: you can check what happens to the data you encode rather than trusting a claim. Permanence matters less than people assume, because a static code never depended on the generator in the first place: the data is in the pattern, and a printed code keeps working whoever disappears.

## Try it

- https://useqr.app/url
- https://useqr.app/validate
