13 releases (5 breaking)

new 0.8.2 Feb 1, 2023
0.8.1 Jan 24, 2023
0.7.1 Jan 13, 2023
0.7.0 Dec 20, 2022
0.2.1 Apr 8, 2022

#28 in Images

Download history 1050/week @ 2022-10-14 401/week @ 2022-10-21 240/week @ 2022-10-28 922/week @ 2022-11-04 1179/week @ 2022-11-11 238/week @ 2022-11-18 1182/week @ 2022-11-25 808/week @ 2022-12-02 572/week @ 2022-12-09 700/week @ 2022-12-16 619/week @ 2022-12-23 516/week @ 2022-12-30 464/week @ 2023-01-06 1455/week @ 2023-01-13 992/week @ 2023-01-20 379/week @ 2023-01-27

3,317 downloads per month
Used in miniserve

Custom license

140KB
3K SLoC

Example qr for website example.com

fast_qr is approximately 6-7 times faster than qrcode, see benchmarks

You can create a QR as

  • Raw matrix, well suited for custom usage
  • Vectorized image, well suited for web usage
  • Image, well suited for mobile / print usage

Usage

Rust

Examples

You can run the examples with:

cargo run --example simple
cargo run --example svg -F svg
cargo run --example image -F image

They are all explained in detail below.

Converts QRCode to Unicode

use fast_qr::convert::ConvertError;
use fast_qr::qr::QRBuilder;

fn main() -> Result<(), ConvertError> {
    // QRBuilder::new can fail if content is too big for version,
    // please check before unwrapping.
    let qrcode = QRBuilder::new("https://example.com/")
        .build()
        .unwrap();

    let str = qrcode.to_str(); // .print() exists
    println!("{}", str);

    Ok(())
}

Converts QRCode to SVG docs.rs

Note: It requires the svg feature

use fast_qr::convert::ConvertError;
use fast_qr::convert::{svg::SvgBuilder, Builder, Shape};
use fast_qr::qr::QRBuilder;

fn main() -> Result<(), ConvertError> {
    // QRBuilder::new can fail if content is too big for version,
    // please check before unwrapping.
    let qrcode = QRBuilder::new("https://example.com/")
        .build()
        .unwrap();

    let _svg = SvgBuilder::default()
        .shape(Shape::RoundedSquare)
        .to_file(&qrcode, "out.svg");

    Ok(())
}

Converts QRCode to an image docs.rs

Note: It requires the image feature

use fast_qr::convert::ConvertError;
use fast_qr::convert::{image::ImageBuilder, Builder, Shape};
use fast_qr::qr::QRBuilder;

fn main() -> Result<(), ConvertError> {
    // QRBuilder::new can fail if content is too big for version,
    // please check before unwrapping.
    let qrcode = QRBuilder::new("https://example.com/")
        .build()
        .unwrap();

    let _img = ImageBuilder::default()
        .shape(Shape::RoundedSquare)
        .background_color([255, 255, 255, 0]) // Handles transparency
        .fit_width(600)
        .to_file(&qrcode, "out.png");

    Ok(())
}

JavaScript / Typescript

Installation

npm install --save fast_qr
# Or
yarn add fast_qr

Create an svg

import init, { qr_svg } from "fast_qr";
import type { QrSvgOptions } from "fast_qr";

const options: QrSvgOptions = {
  module_color: "#FFF",
  background_color: "#000",
};

/// Once `init` is called, `qr_svg` can be called any number of times
// Using then / catch:
init()
  .then(() => {
    for (let i = 0; i < 10; i++) {
      const svg = qr_svg("https://fast-qr.com", options);
      console.log(svg);
    }
  })
  .catch((e) => {
    console.error("Could not fetch wasm: ", e);
  });

// Or using modern async await:
await init();
for (let i = 0; i < 10; i++) {
  const svg = qr_svg("https://fast-qr.com", options);
  console.log(svg);
}

Build WASM

WASM module also exists in NPM registry

Package is named fast_qr and can be installed like so :

npm install --save fast_qr

WASM module might be bundled

Find a bundled version in the latest release.

WASM module can be built from source

./wasm-pack.sh # Runs build in release mode and wasm-opt twice again
wasm-pack pack pkg # Creates an archive of said package
# wasm-pack publish pkg # Creates an archive & publish it to npm

Benchmarks

According to the following benchmarks, fast_qr is approximately 6-7x faster than qrcode.

Benchmark Lower Estimate Upper
V03H/qrcode 524.30 us 535.02 us 547.13 us
V03H/fast_qr 82.079 us 82.189 us 82.318 us fast_qr is 6.51x faster
V10H/qrcode 2.1105 ms 2.1145 ms 2.1186 ms
V10H/fast_qr 268.70 us 269.28 us 269.85 us fast_qr is 7.85x faster
V40H/qrcode 18.000 ms 18.037 ms 18.074 ms
V40H/fast_qr 2.4313 ms 2.4362 ms 2.4411 ms fast_qr is 7.40x faster

More benchmarks can be found in /benches folder.

Dependencies

~0–700KB
~15K SLoC