Skip to content

Minimal library for generating QR codes in the browser and server-side.


Notifications You must be signed in to change notification settings


Repository files navigation

Lean QR

Lean QR is a lightweight yet fully-featured library for generating QR Codes. It runs in NodeJS and all recent browsers, and includes wrapper components for React and Preact. Under 4kB compressed.


  • ISO 18004 compliant;
  • Lightweight (less than 4kB compressed, ~7kB uncompressed, no dependencies);
  • Simple yet flexible API, with sensible defaults for all configuration;
  • Supports all standard encodings out-of-the box:
    • including Unicode 😎;
    • and Shift-JIS 漢字;
    • and supports custom modes for special requirements;
  • Automatic encoding to minimise output size;
  • Fast enough for lag-free live editing;
  • Comprehensive automated testing;
  • Multiple output formats (canvas / PNG / SVG / text).

You can see it in action online, or try it from the terminal:

npx lean-qr 'MY MESSAGE HERE'

Basic Usage

See the Quickstart documentation for NodeJS / Browser / React / Preact / CLI usage.

npm install --save lean-qr
<canvas id="my-qr-code" />

#my-qr-code {
  image-rendering: pixelated;
  width: 100%;
import { generate } from 'lean-qr';

const qrCode = generate('LEAN-QR LIBRARY');


Jest / JSDOM error: "TextEncoder is not defined"

There is a bug in JSDOM which prevents this class being available in tests. This issue only affects JSDOM, and can be fixed with:

import { TextEncoder, TextDecoder } from 'node:util';
global.TextEncoder = TextEncoder;
global.TextDecoder = TextDecoder;

You can put this in the test file or in Jest's setupFilesAfterEnv config. You should not put this in your application code.

Full Documentation