# @suaveplan/qrcode - QR code generation producing SVG, pixel matrix, terminal (Unicode blocks), and data URL representations. Implements QR code versions 1-10, error correction levels L/M/Q/H, automatic version and mode selection. ## Summary QR code generation producing SVG, pixel matrix, terminal (Unicode blocks), and data URL representations. Implements QR code versions 1-10, error correction levels L/M/Q/H, automatic version and mode selection. ## Documentation tree - [core](./src/core/qrcode.md) — _(no submodules)_ - data-encoder — _(no submodu… - [encoder](./src/core/encoder/data-encoder.md) — _(no submodules)_ - [data-encoder](./src/core/encoder/data-encoder.md) — _(no submodules)_ - [mask](./src/core/mask/masking.md) — _(no submodules)_ - [masking](./src/core/mask/masking.md) — _(no submodules)_ - [matrix](./src/core/matrix/matrix-builder.md) — _(no submodules)_ - [matrix-builder](./src/core/matrix/matrix-builder.md) — _(no submodules)_ - [reed-solomon](./src/core/reed-solomon/reed-solomon.md) — _(no submodules)_ - [reed-solomon](./src/core/reed-solomon/reed-solomon.md) — _(no submodules)_ - [renderer](./src/core/renderer/svg-renderer.md) — _(no submodules)_ - [svg-renderer](./src/core/renderer/svg-renderer.md) — _(no submodules)_ - [tables](./src/core/tables/tables.md) — _(no submodules)_ - [tables](./src/core/tables/tables.md) — _(no submodules)_ - [qrcode](./src/core/qrcode.md) — _(no submodules)_ - data-encoder — _(no submodu… - [errors](./src/errors/qrcode-error.md) — _(no submodules)_ - [qrcode-error](./src/errors/qrcode-error.md) — _(no submodules)_ - [encoder](./src/core/encoder/data-encoder.md) — _(no submodules)_- [data-encoder](./src/core/encoder/data-encoder.md) — _(no submodules)_- [mask](./src/core/mask/masking.md) — _(no submodules)_- [masking](./src/core/mask/masking.md) — _(no submodules)_- [matrix](./src/core/matrix/matrix-builder.md) — _(no submodules)_- [matrix-builder](./src/core/matrix/matrix-builder.md) — _(no submodules)_- [reed-solomon](./src/core/reed-solomon/reed-solomon.md) — _(no submodules)_- [reed-solomon](./src/core/reed-solomon/reed-solomon.md) — _(no submodules)_- [renderer](./src/core/renderer/svg-renderer.md) — _(no submodules)_- [svg-renderer](./src/core/renderer/svg-renderer.md) — _(no submodules)_- [tables](./src/core/tables/tables.md) — _(no submodules)_- [tables](./src/core/tables/tables.md) — _(no submodules)_- [qrcode](./src/core/qrcode.md) — _(no submodules)_- [errors](./src/errors/qrcode-error.md) — _(no submodules)_- [qrcode-error](./src/errors/qrcode-error.md) — _(no submodules)_- data-encoder — _(no submodules)_- [data-encoder](./src/core/encoder/data-encoder.md) — _(no submodules)_- [mask](./src/core/mask/masking.md) — _(no submodules)_- [masking](./src/core/mask/masking.md) — _(no submodules)_- [matrix](./src/core/matrix/matrix-builder.md) — _(no submodules)_- [matrix-builder](./src/core/matrix/matrix-builder.md) — _(no submodules)_- [reed-solomon](./src/core/reed-solomon/reed-solomon.md) — _(no submodules)_- [reed-solomon](./src/core/reed-solomon/reed-solomon.md) — _(no submodules)_- [renderer](./src/core/renderer/svg-renderer.md) — _(no submodules)_- [svg-renderer](./src/core/renderer/svg-renderer.md) — _(no submodules)_- [tables](./src/core/tables/tables.md) — _(no submodules)_- [tables](./src/core/tables/tables.md) — _(no submodules)_- [qrcode](./src/core/qrcode.md) — _(no submodules)_- data-encoder — _(no submodules)_- [qrcode-error](./src/errors/qrcode-error.md) — _(no submodules)_- data-encoder — _(no submod… - [encoder](./src/core/encoder/data-encoder.md) — _(no submodules)_- [data-encoder](./src/core/encoder/data-encoder.md) — _(no submodules)_- [mask](./src/core/mask/masking.md) — _(no submodules)_- [masking](./src/core/mask/masking.md) — _(no submodules)_- [matrix](./src/core/matrix/matrix-builder.md) — _(no submodules)_- [matrix-builder](./src/core/matrix/matrix-builder.md) — _(no submodules)_- [reed-solomon](./src/core/reed-solomon/reed-solomon.md) — _(no submodules)_- [reed-solomon](./src/core/reed-solomon/reed-solomon.md) — _(no submodules)_- [renderer](./src/core/renderer/svg-renderer.md) — _(no submodules)_- [svg-renderer](./src/core/renderer/svg-renderer.md) — _(no submodules)_- [tables](./src/core/tables/tables.md) — _(no submodules)_- [tables](./src/core/tables/tables.md) — _(no submodules)_- [qrcode](./src/core/qrcode.md) — _(no submodules)_- data-encoder — _(no submod… - [errors](./src/errors/qrcode-error.md) — _(no submodules)_- [qrcode-error](./src/errors/qrcode-error.md) — _(no submodules)_- [encoder](./src/core/encoder/data-encoder.md) — _(no submodules)_ - [data-encoder](./src/core/encoder/data-encoder.md) — _(no submodules)_- [mask](./src/core/mask/masking.md) — _(no submodules)_ - [masking](./src/core/mask/masking.md) — _(no submodules)_- [matrix](./src/core/matrix/matrix-builder.md) — _(no submodules)_ - [matrix-builder](./src/core/matrix/matrix-builder.md) — _(no submodules)_- [reed-solomon](./src/core/reed-solomon/reed-solomon.md) — _(no submodules)_ - [reed-solomon](./src/core/reed-solomon/reed-solomon.md) — _(no submodules)_- [renderer](./src/core/renderer/svg-renderer.md) — _(no submodules)_ - [svg-renderer](./src/core/renderer/svg-renderer.md) — _(no submodules)_- [tables](./src/core/tables/tables.md) — _(no submodules)_ - [tables](./src/core/tables/tables.md) — _(no submodules)_- [qrcode](./src/core/qrcode.md) — _(no submodules)_- [errors](./src/errors/qrcode-error.md) — _(no submodules)_ - [qrcode-error](./src/errors/qrcode-error.md) — _(no submodules)_ ## Installation ```bash bun add @suaveplan/qrcode ``` ## Quick Start ```ts import { generate } from "@suaveplan/qrcode"; const result = generate("https://suaveplan.io"); console.log(result.svg); // Inline SVG string console.log(result.dataUrl); // data:image/svg+xml;base64,... console.log(result.terminal); // Unicode half-block for CLI display console.log(result.version); // e.g. 2 console.log(result.size); // e.g. 25 (version 2 = 25×25) ``` ## API ### `generate(data, options?)` Generates a complete QR code for any UTF-8 string. ```ts import { generate } from "@suaveplan/qrcode"; const result = generate("Hello World", { errorCorrectionLevel: "H", // 'L' | 'M' | 'Q' | 'H', default 'M' version: 2, // 1-10, auto-selected if omitted margin: 4, // quiet zone in modules, default 4 color: "#000000", // dark module color, default '#000000' background: "#ffffff", // light module color, default '#ffffff' scale: 10, // pixels per module in SVG, default 10 }); ``` **Returns** `QRCodeResult`: | Field | Type | Description | |-------|------|-------------| | `version` | `number` | QR version used (1-10) | | `errorCorrectionLevel` | `ErrorCorrectionLevel` | EC level used | | `mode` | `QRMode` | Encoding mode (numeric/alphanumeric/byte) | | `matrix` | `boolean[][]` | Module grid — `true` = dark | | `size` | `number` | Matrix dimension (size × size) | | `svg` | `string` | Complete SVG markup | | `dataUrl` | `string` | `data:image/svg+xml;base64,...` | | `terminal` | `string` | Unicode half-block terminal representation | ### Errors ```ts import { QRCodeError, QRCODE_CODES } from "@suaveplan/qrcode/errors"; try { generate("", { version: 1, errorCorrectionLevel: "H" }); } catch (e) { if (e instanceof QRCodeError) { switch (e.code) { case QRCODE_CODES.INVALID_DATA: // Empty input, invalid characters, or out-of-range version break; case QRCODE_CODES.VERSION_TOO_SMALL: // Data too large for the specified version (or all versions 1-10) break; case QRCODE_CODES.ENCODE_FAILED: // Internal encoding pipeline failure break; } } } ``` ## Module Exports | Subpath | Contents | |---------|----------| | `@suaveplan/qrcode` | `generate`, all types, all sub-module exports | | `@suaveplan/qrcode/errors` | `QRCodeError`, `QRCODE_CODES`, `QRCodeCode` | | `@suaveplan/qrcode/core/tables` | Lookup tables and helpers | | `@suaveplan/qrcode/core/encoder` | `detectMode`, `encodeData`, `BitBuffer`, `encodeUtf8` | | `@suaveplan/qrcode/core/reed-solomon` | `rsEncode`, `interleaveBlocks`, `splitBlocks`, GF arithmetic | | `@suaveplan/qrcode/core/matrix` | `buildMatrix` | | `@suaveplan/qrcode/core/mask` | `selectMask`, `penaltyScore` | | `@suaveplan/qrcode/core/renderer` | `renderSvg`, `renderDataUrl`, `renderTerminal` | ## Co-located Documentation - [errors/qrcode-error.md](src/errors/qrcode-error.md) - [core/tables/tables.md](src/core/tables/tables.md) - [core/encoder/data-encoder.md](src/core/encoder/data-encoder.md) - [core/reed-solomon/reed-solomon.md](src/core/reed-solomon/reed-solomon.md) - [core/matrix/matrix-builder.md](src/core/matrix/matrix-builder.md) - [core/mask/masking.md](src/core/mask/masking.md) - [core/renderer/svg-renderer.md](src/core/renderer/svg-renderer.md) - [core/qrcode.md](src/core/qrcode.md)