v1.0.0
15 Sep 2026First release.
Added
- A QR encoder covering versions 1–40, all four error-correction levels, and numeric, alphanumeric and byte modes with UTF-8 — verified module for module against an independent implementation across 1440 combinations of version, level, mode and mask, with error-correction codewords matching ISO/IEC 18004's own worked example.
- Automatic version and mask selection, the latter scored by all four penalty rules the specification defines.
- A logo in the middle, checked rather than hoped: the modules underneath are removed rather than covered, the error-correction level is raised to carry it, and where even H cannot, a warning names the largest size that would work. The budget is measured — a solid square destroys whole codewords, so the usable share is about a third of the published tolerance, not all of it.
- SVG output as two
<path>elements whatever the version, one for the body and one for the finders, so finders can be shaped separately. - PNG output rounded up to whole module pixels, because a fractional module width blurs every edge and is what makes a downloaded code fail to scan.
- Camera scanning built on the browser's own Barcode Detection API: the back
camera,
playsinlinefor iOS, the torch where there is one, every camera listed, and the track stopped when the tab is hidden and restarted when it returns.canScan()says whether the browser can, so an upload fallback can be offered where it cannot. - Colours, module and finder shapes, quiet zone, fixed or fluid sizing, and a
titlefor screen readers. - The encoder and SVG renderer have no DOM in them, so both run on a server, in a worker, or at build time.
- React, Vue, Svelte,
<dx-qr>and a CDN build over one core. - Theming through CSS variables,
classNameson every part,theme: 'auto'and a@layer devixstylesheet. - 7.7 kB gzip for the whole CDN bundle, zero dependencies.