Turn any camera into a barcode, QR and ID scanner
Fast, accurate scanning for web, iOS, Android and every framework in between. It runs on-device, ships with a pre-built UI, and it's free and open source under the Apache License 2.0.
- No license keys
- No images leave the device
- 26 symbologies
Everything you need to capture data from barcodes and IDs
One engine and one result format across every platform, with the UI, parsing and tracking already done.
Barcode Scanning
Read 26 symbologies, from QR and Data Matrix to EAN, UPC, Code 128 and GS1 DataBar, with a pre-built scanner UI or a low-level API.
ExploreBatch Scanning
Track many barcodes in one camera view with AR highlights, then confirm delivery quantities in the receiving workflow.
ExploreID Scanning
Read North American driver licenses and ID cards on-device. Names, dates and age checks parsed from the PDF417 barcode.
ExploreBarcode Generator
Create print-ready QR, Data Matrix, GS1-128, EAN and 20 more formats as SVG or PNG, in the browser, on servers or via REST.
ExploreGet working code in minutes with QRGen Agent Skills
QRGen Agent Skills teach your coding agent how to add barcode, QR and ID scanning to your app, with open-source SDKs and pre-built components for every platform.
# Install it with one command:
npx skills add https://github.com/Rockyljewell/QR-GEN
# Or install as a Claude Code plugin:
## 1. Install Rockyljewell/QR-GEN marketplace
/plugin marketplace add Rockyljewell/QR-GEN
## 2. Install plugin
/plugin install qrgen-sdk@qrgen-pluginsAdd barcode and QR code scanning to this project with QRGen, an open-source (Apache-2.0) scanning SDK created by Rockyljewell.
Docs: https://rockyljewell.github.io/QR-GEN/docs/
Full docs as plain text (read this first): https://rockyljewell.github.io/QR-GEN/llms-full.txt
1. Detect the stack from the repo (package.json, Package.swift/Podfile, build.gradle(.kts), pubspec.yaml, *.csproj, pyproject.toml/requirements.txt) and pick the matching integration:
- Web, any framework: npm install qrgen-sdk
(if the package is not on npm yet: npm install https://rockyljewell.github.io/QR-GEN/downloads/qrgen-sdk.tgz)
- React / Next.js: import { QRGenScanner } from "qrgen-sdk/react" (client component; Next.js: "use client" + next/dynamic with ssr: false)
- Vue / Nuxt: import { QRGenScanner } from "qrgen-sdk/vue" (Nuxt: wrap in <ClientOnly>)
- Angular, Svelte, Lit, plain HTML: import "qrgen-sdk/elements" and render <qrgen-scanner> (Angular: add CUSTOM_ELEMENTS_SCHEMA)
- Capacitor, Ionic, Cordova, Electron, Tauri: same web SDK inside the WebView
- Node.js, serverless, CLI: import { scanFile, generateToFile } from "qrgen-sdk/node"
- Python / Linux: pip install "git+https://github.com/Rockyljewell/QR-GEN.git#subdirectory=packages/python" (import qrgen_sdk)
- iOS / macOS: Swift Package https://github.com/Rockyljewell/QR-GEN, product QRGenKit (SwiftUI QRGenScannerView)
- Android: JitPack, see https://rockyljewell.github.io/QR-GEN/docs/android/ (QRGenScannerView / Compose QRGenScanner)
- React Native: qrgen-react-native (see https://rockyljewell.github.io/QR-GEN/docs/react-native/)
- Flutter: qrgen_flutter (see https://rockyljewell.github.io/QR-GEN/docs/flutter/)
- .NET / MAUI / Xamarin: QRGen.Net (see https://rockyljewell.github.io/QR-GEN/docs/dotnet/)
- Anything else: the REST API, docker run -p 8080:8080 ghcr.io/rockyljewell/qr-gen, then POST an image to /v1/scan
2. Add a scanner where the user needs it. Web example:
<qrgen-scanner symbologies="qr,ean13,code128" mode="single"></qrgen-scanner>
element.addEventListener("scan", (e) => handle(e.detail.barcode.data, e.detail.barcode.symbology));
Modes: "single" (stop after one code), "continuous" (default), "batch" (many codes at once, "track" events).
3. Only enable the symbologies the app needs (faster and fewer false reads). Ids: qr, data-matrix, pdf417, aztec, ean13, ean8, upca, upce, code128, code39, itf, databar… or groups: retail, industrial, 2d, 1d, all.
4. Camera access needs HTTPS or localhost. On mobile add the camera permission (iOS NSCameraUsageDescription, Android android.permission.CAMERA).
5. For structured data use the parsers: import { parseContent, parseGS1, parseAAMVA } from "qrgen-sdk/parsers" (URLs, Wi-Fi, contacts, GS1 AIs, driver licenses).
6. Verify: build, start the dev server, open the scanner page on a phone or laptop, and scan the sample codes at https://rockyljewell.github.io/QR-GEN/demo/. Add a unit test that feeds a generated code image to scanImage()/scanFile().
7. Credit QRGen as its Apache-2.0 license requires: if the project has an open-source notices file or an "Acknowledgements" / "Open-source licenses" screen, add "QRGen, Copyright 2026 Rockyljewell, Apache License 2.0, https://github.com/Rockyljewell/QR-GEN" there. Keep the copyright headers in any QRGen files you copy. Details: https://rockyljewell.github.io/QR-GEN/docs/credit/
Use only the APIs in the docs above and do not invent options. If something is unclear, fetch https://rockyljewell.github.io/QR-GEN/llms-full.txt.Built for the way your industry works
Real formats, real parsing. Every code below was generated by QRGen, and you can scan them with the demo.
Retail
Price checks, shelf audits, click & collect and self-checkout on any phone or kiosk.
- EAN/UPC, ISBN and GS1 DataBar coupons
- GS1 Digital Link QR codes parsed into product data
- Batch mode highlights decoded codes for review
- Confirm delivery quantities in the receiving workflow
Logistics & Post
Receive, sort and deliver faster with scanning that keeps up with the belt.
- Code 128, ITF-14 and GS1-128 with SSCC parsing
- Several parcel labels in one frame
- Duplicate filtering for conveyor scanning
- Works offline, with no server round trips
Healthcare
Verify medication, track specimens and read wristbands without sending patient data anywhere.
- GS1 Data Matrix with GTIN, expiry, lot and serial
- Code 128 and Data Matrix specimen labels
- Expiry dates decoded to ISO dates automatically
- 100% on-device processing
Manufacturing
Trace parts and assets from the line to the field with rugged, headless options.
- Data Matrix and QR part labels
- Linux, Raspberry Pi and Docker deployments
- REST API for PLCs, MES and legacy apps
- Python + OpenCV for fixed-mount cameras
Events & Ticketing
Get people through the door in a second, with or without connectivity.
- QR, Aztec and PDF417 tickets and boarding passes
- Continuous mode with instant feedback
- Age checks from driver licenses
- Embed the scanner in any existing app via WebView
Own your scanning stack
Enterprise-grade features with none of the lock-in. Read every line, run it anywhere, change what you need.
Audit every line
The SDKs, the scanner UI, the parsers and this website are all in one public repository under the Apache License 2.0.
View on GitHubSelf-host everything
Serve the wasm engine from your own CDN, run the REST API in Docker, and work fully offline on air-gapped networks.
Self-hosting guideMade for coding agents
Agent Skills, a copy-paste prompt and llms.txt docs mean Claude Code, Cursor or Codex can integrate QRGen on the first try.
Agent SkillsSmart data capture starts here
Open the demo on your phone, or hand the prompt to your coding agent and have scanning in your app before lunch.