Skip to content

v3.1.0

Latest

Choose a tag to compare

@jaredwray jaredwray released this 29 Jun 15:57
5e3aff6

qrbit@3.1.0 — 2026-06-29

Replace node-qrcode with a native Rust QR engine; drop the qrcode runtime dependency.

Features

  • replace node-qrcode with a native Rust port — the no-logo toSvg() path no longer depends on the qrcode npm package; QR encoding and SVG rendering are now a self-contained Rust port producing byte-identical output (validated against ~18,500 differential cases), ~1.5× faster for SVG generation (dd4abf7, #115)

    import { QrBit } from "qrbit";
    
    // Same API and byte-identical SVG — qrbit no longer pulls in node-qrcode at runtime.
    const svg = await new QrBit({ text: "https://jaredwray.com" }).toSvg();

Bug Fixes

  • match node-qrcode's lenient hex color parsing for backgroundColor / foregroundColor (74b676f, #115)
  • apply foregroundColor independently when backgroundColor is omitted (a foreground-only color was previously ignored), and preserve aspect ratio when only one of width/height is passed to the PNG/JPEG/WebP rasterizer instead of stretching to a fixed 2× (8f2f4a7, #117)

Performance

  • render logo QR modules as a single <path> instead of one <rect> per module, shrinking the SVG and the work resvg does when rasterizing to PNG/JPEG/WebP; raster output is pixel-identical (412b351, #118)

Documentation

Internal

  • remove dead rasterization code and drop the imageproc dependency (62ece9c, #116)
  • collapse duplicated SVG generators and rasterizers into shared helpers (749ab86, #117)
  • upgrade GitHub Actions: actions/checkout v6→v7, codecov/codecov-action v6→v7 (87370d8, #114)
  • upgrade imageproc 0.26.2→0.27.0 (later removed in #116) (9619a85, #113)
  • upgrade napi crates: napi 3.9.0→3.9.4, napi-derive 3.5.6→3.5.7 (9d57c97, #112)
  • upgrade hookified 3.0.0→3.0.1 (94d9229, #111)
  • upgrade napi tooling: @napi-rs/cli 3.6.2→3.7.2, @emnapi/core & @emnapi/runtime 1.10.0→1.11.1 (675c4ff, #110)
  • upgrade TypeScript build tooling: tsx 4.22.3→4.22.4, tsdown 0.22.0→0.22.3, @types/node 24.12.2→24.13.2 (4b0c3a3, #109)
  • upgrade code-quality deps: @biomejs/biome 2.4.15→2.5.1, vitest & @vitest/coverage-v8 4.1.7→4.1.9, @faker-js/faker 10.4.0→10.5.0 (2f31ebc, #108)

Contributors

Full List of Changes

  • root - chore: upgrade code quality dependencies by @jaredwray in #108
  • root - chore: upgrade TypeScript and build tooling by @jaredwray in #109
  • root - chore: upgrade napi tooling by @jaredwray in #110
  • root - chore: upgrade hookified by @jaredwray in #111
  • root - chore: upgrade napi dependencies by @jaredwray in #112
  • root - chore: upgrade imageproc (breaking) by @jaredwray in #113
  • root - chore: upgrade GitHub Actions (breaking) by @jaredwray in #114
  • Replace node-qrcode with a native Rust port (byte-identical, faster) by @jaredwray in #115
  • Remove dead rasterization code and drop imageproc dependency by @jaredwray in #116
  • Collapse duplicated SVG generators and rasterizers into shared helpers by @jaredwray in #117
  • Render logo QR modules as a single <path> instead of per-module rects by @jaredwray in #118
  • feat - updating readme with new benchmarks by @jaredwray in #119

Full diff: v3.0.0...v3.1.0