GitPedia

Koder

QR/bar code scanner for the Browser

From maslick·Updated May 28, 2026·View on GitHub·

🚀 NEW: Check Out Kameroon - QR/Bar Code Scanner as a Service 🚀 The project is written primarily in JavaScript, distributed under the MIT License license, first published in 2020. Key topics include: barcode, covid-19, covid-certificate, ean13, ean8.

Latest release: v1.8.0
February 6, 2022View Changelog →
<p align="right"> <kbd style="background-color:#f03c15; color: white; padding: 10px;"> 🚀 NEW: Check Out <a style="text-decoration:none" href="https://github.com/maslick/kameroon">Kameroon</a> - QR/Bar Code Scanner as a Service 🚀 </kbd> </p>

=koder=

QR/bar code scanner for the Browser

npm
Build Status
License: MIT

:bulb: Demo

https://koder-prod.web.app

🚀 Features

  • QR/barcode module implemented in WebAssembly
  • Barcode support (ISBN, UPC-A, UPC-E, EAN-8, EAN-13, I25, ITF-14, CODE-128, CODE-39, CODE-93, CODABAR, DATABAR)
  • Uses Zbar C++ library (version 0.23.90)
  • Packaged as PWA (caching files with Service Worker, Add to Home Screen)
  • Mobile first (can be used on a Laptop as well)
  • Multiplatform (iOS, Android, Desktop)
  • QR/bar code recognition logic is performed off the browser's Main thread (i.e. Web Worker)
  • koder React component supports a jsqr based Web Worker (see jsQrWorker.js)
  • Emscripten-zbar-sdk Docker image based on emscripten/emsdk, Dockerfile
  • ReactJS component
  • Vanilla JS example
  • :new: Turn on/off the beep sound
  • :new: Support for UPN QR (Slovenia only)
  • :new: EU Digital Covid Certificate validator (vaccination, test), works in offline mode!
  • :new: Emscripten v3.1.1
  • :new: npm package
<p align="center" > <img src="./screenshots/app_1.png" width="400px" /> <img src="./screenshots/app_2.png" width="400px" /> </p>

⚡ Usage

Install dependencies

shell
npm install --global yarn yarn install --frozen-lockfile

Run React app

shell
npm run start open https://locahost:8080

Productionize

shell
npm run build # -> build React app into ./public npm run prod # -> serve static web app on port 8082 open http://localhost:8082

⚡ NPM module

npm install @maslick/koder
javascript
// CommonJS const Koder = require('@maslick/koder'); // ES6 modules import Koder from '@maslick/koder';
javascript
const Koder = require('@maslick/koder'); const {loadImage, createCanvas} = require("canvas"); const getImageData = async (src) => { const img = await loadImage(src); const canvas = createCanvas(img.width, img.height); const ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0); return { data: ctx.getImageData(0, 0, img.width, img.height).data, width: img.width, height: img.height }; }; (async () => { const url = 'https://raw.githubusercontent.com/maslick/koder/master/screenshots/app_1.png'; const koder = await new Koder().initialized; const {data, width, height} = await getImageData(url); const t0 = new Date().getTime(); const res = koder.decode(data, width, height); const t1 = new Date().getTime(); console.log(`Scanned in ${t1-t0} ms`); // Scanned in 7 ms console.log(res); // http://en.m.wikipedia.org })();

:spades: Development

Fetch or build the Builder image

shell
docker pull maslick/emscripten-zbar-sdk docker build -t maslick/emscripten-zbar-sdk -f docker/Dockerfile docker

Build WASM artifacts

shell
# Linux, Mac Intel docker run \ -e INPUT_FILE=zbar/qr.cpp \ -e OUTPUT_FILE=zbar \ -e OUTPUT_DIR=public/wasm \ -v $(pwd):/app \ maslick/emscripten-zbar-sdk make -B # Mac M1/M2 docker run \ --platform linux/amd64 \ -e INPUT_FILE=zbar/qr.cpp \ -e OUTPUT_FILE=zbar \ -e OUTPUT_DIR=public/wasm \ -v $(pwd):/app \ maslick/emscripten-zbar-sdk make -B

Clean the build artifacts (if necessary):

shell
OUTPUT_DIR=public/wasm OUTPUT_FILE=zbar make clean

🔭 References

Contributors

Showing top 3 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from maslick/koder via the GitHub API.Last fetched: 6/14/2026