Read any barcode, fast, on any device
26 symbologies with one API and a pre-built scanning UI. Decoding runs in a Web Worker on the web and on Apple Vision or ML Kit natively, and nothing leaves the device.
Features
Pre-built UI
Viewfinder, highlights, success toast, torch, zoom and camera switching in one element.
Off the main thread
Frames are decoded in a Web Worker with WebAssembly, so your UI stays at 60 fps.
Smart duplicate filter
Report every frame, once per second, or once per session, with no custom debounce code.
Region of interest
Decode only what's inside the viewfinder, which is faster and avoids stray reads.
Private by default
Camera frames never leave the device, and there is no telemetry.
Typed results
The same Barcode object on every platform, with GS1 in human-readable form.
A few lines of code
Drop in the pre-built component or build your own UI on the same engine.
Supported symbologies
- 2D
- QR, Micro QR, rMQR, Data Matrix, Aztec, PDF417, MicroPDF417, MaxiCode
- Retail
- EAN-13, EAN-8, UPC-A, UPC-E, ISBN, GS1 DataBar (Omni, Limited, Expanded)
- Industrial
- Code 128 / GS1-128, Code 39, Code 93, Codabar, ITF, ITF-14
- Specialty
- Code 32, PZN, Telepen, DX Film Edge
<qrgen-scanner symbologies="qr,ean13,code128" mode="continuous"></qrgen-scanner>
<script type="module">
import "qrgen-sdk/elements";
document.querySelector("qrgen-scanner").addEventListener("scan", (e) => {
for (const b of e.detail.barcodes) console.log(b.symbologyName, b.data);
});
</script>import { BarcodeScanner } from "qrgen-sdk";
const scanner = new BarcodeScanner({ video, symbologies: ["retail"], duplicateFilter: 1500 });
scanner.on("frame", ({ barcodes }) => drawBoxes(barcodes));
scanner.on("scan", ({ barcodes }) => addToCart(barcodes[0].data));
await scanner.start();Where teams use barcode scanning
- Point-of-sale and self-checkout
- Price checks and product lookup
- Ticket and boarding pass validation
- Asset and equipment tracking
- Healthcare medication checks
- Warehouse receiving
Try barcode scanning now
Open the demo on your phone, or let your coding agent add it to your app.