lean-qr

minimal QR code generation
1,066,141 61
Install
npm install lean-qr
Latest Version:2.7.4
License:MIT
Last Updated:Sep 7, 2026
Links: GitHub  ·  npm
Maintainer: davidje13

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

Features

  • ISO 18004 compliant;
  • Lightweight (less than 4kB compressed, ~7kB uncompressed, no dependencies);
    • still too big? There's also an even smaller "nano" export which has reduced features to fit into ~2kB compressed, ~4kB uncompressed!
  • 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 Node.js / Browser / React / Preact / Vue / Web Components / CLI usage.

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

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

const qrCode = generate('LEAN-QR LIBRARY');
qrCode.toCanvas(document.getElementById('my-qr-code'));

Troubleshooting

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

Related Packages

cam2qr

Zero-dependency TypeScript QR code scanning for the browser — independent from-s...

4,003 1
@chenfengyuan/vue-qrcode

QR code component for Vue 3.

2,472,192 1,104
animated-fluent-emojis

Microsoft's animated Fluent emojis as one component. They play on load or hover,...

3,190 1
code-generator-library

A zero-dependency universal npm library for generating Code 128 Barcodes and QR...

815 2

Version History

Version Released License
2.7.4 MIT
2.7.3 MIT
2.7.2 MIT
2.7.1 MIT
2.7.0 MIT