@cartella/codes
v1.3.0
Published
Synchronous SVG generators for QR + barcode layers. Used by @cartella/renderer-html and @cartella/react.
Readme
@cartella/codes
Synchronous SVG generators for QR codes and barcodes. Deterministic, DOM-free, runs in Node / Edge / Workers / the browser.
Used by @cartella/renderer-html and @cartella/react to inflate QR and barcode layers into real visuals. Kept out of @cartella/core to keep core's runtime budget lean; consumers who want placeholder-only behavior can skip installing this package.
Install
pnpm add @cartella/codesUsage
QR codes
import { qrToSvg } from '@cartella/codes';
const svg = qrToSvg('https://academia.example.com/v/STU-2026-0142', {
errorCorrection: 'M', // L / M / Q / H (default M)
size: 128,
foreground: '#000000',
background: '#ffffff',
quietZone: 4,
});Barcodes
import { barcodeToSvg } from '@cartella/codes';
const svg = barcodeToSvg('STU-2026-0142', 'code128', {
barWidth: 0.5, // mm
height: 15, // mm
displayValue: true,
foreground: '#000000',
background: '#ffffff',
});Supported formats: code128, code39, ean13, ean8, upc, itf14, datamatrix.
Why another codes package?
Parity. Cartella's editor and its server-side renderers share the same layerToHtml() function — so the QR/barcode output you see in the Studio must byte-identically match what the server prints. Both qrcode-svg and bwip-js produce deterministic SVG output with no randomness or floating-point noise, so the parity contract (0.1% pixel diff) holds end-to-end.
Determinism
Both helpers are pure:
- Same input → identical SVG bytes, every call
- No DOM, no network, no filesystem
- Safe to memoize by
(value, options)tuple
Unit tests verify byte-identical output across multiple invocations.
License
MIT
