npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@fhylabs/qris-dynamic

v1.0.5

Published

Convert static QRIS codes into dynamic QRIS with automatic transaction amount insertion. Supports all Indonesian QRIS providers (EMVCo/Bank Indonesia).

Readme

Dynamic QRIS

A utility to convert static QRIS into dynamic QRIS by automatically adding the transaction amount, without altering the original QRIS structure. Supports all Indonesian QRIS providers according to EMVCo / Bank Indonesia (BI) standards, including DANA, GoPay, OVO, ShopeePay, Bank QRIS, and others.

Installation

npm install @fhylabs/qris-dynamic

CommonJS

Image

const { GenerateQris, ScannerQR } = require("@fhylabs/qris-dynamic");
const path = require("path");

(async () => {
  try {

    // Static QRIS Image
    const qrisData = await ScannerQR.scan(path.join(__dirname, "qrcode.png"));
    
    const res = await GenerateQris({
      qris: qrisData,
      amount: 20000,
      type: "base64"
    });

    console.log(res);
  } catch (error) {
    console.error("An error occurred:", error);
  }
})();

String

const { GenerateQris } = require("@fhylabs/qris-dynamic");

(async () => {
  try {

    // Static QRIS String
    const qrisData = "000201010211...";
    
    const res = await GenerateQris({
      qris: qrisData,
      amount: 20000,
      type: "base64"
    });

    console.log(res);
  } catch (error) {
    console.error("An error occurred:", error);
  }
})();

ESM

Image

import { GenerateQris, ScannerQR } from "@fhylabs/qris-dynamic";
import { createCanvas } from "canvas";
import path from "node:path";
import { fileURLToPath } from "node:url";

const __dirname = path.dirname(fileURLToPath(import.meta.url));

globalThis.document = {
  createElement: (tag) => (tag === "canvas" ? createCanvas(400, 400) : {})
};

(async () => {
  try {

    // Static QRIS Image
    const qrisData = await ScannerQR.scan(path.join(__dirname, "qrcode.png"));

    const res = await GenerateQris({
      qris: qrisData,
      amount: 20000,
      type: "base64"
    });

    console.log(res);
  } catch (error) {
    console.error("An error occurred:", error);
  }
})();

String

import { GenerateQris } from "@fhylabs/qris-dynamic";
import { createCanvas } from "canvas";

globalThis.document = {
  createElement: (tag) => (tag === "canvas" ? createCanvas(400, 400) : {})
};

(async () => {
  try {

    // Static QRIS String
    const qrisData = "000201010211...";

    const res = await GenerateQris({
      qris: qrisData,
      amount: 20000,
      type: "base64"
    });

    console.log(res);
  } catch (error) {
    console.error("An error occurred:", error);
  }
})();

UMD Browser

Image

<script src="https://cdn.jsdelivr.net/gh/FhyLabs/[email protected]/dist/QRISDynamic.umd.js"></script>
<img id="qrImage" alt="QR Code" />
<script>
  (async () => {
    try {
      const qrisData = await QRISDynamic.ScannerQR.scan("qrcode.png");

      const res = await QRISDynamic.GenerateQris({
        qris: qrisData,
        amount: 15000,
        type: "base64"
      });

      console.log(res);
      document.getElementById("qrImage").src = res.code;
    } catch (err) {
      console.error("Error:", err);
    }
  })();
</script>

String

<script src="https://cdn.jsdelivr.net/gh/FhyLabs/[email protected]/dist/QRISDynamic.umd.js"></script>
<img id="qrImage" alt="QR Code" />
<script>
  (async () => {
    try {
      const qrisData = "000201010211...";

      const res = await QRISDynamic.GenerateQris({
        qris: qrisData,
        amount: 15000,
        type: "base64"
      });

      console.log(res);
      document.getElementById("qrImage").src = res.code;
    } catch (err) {
      console.error("Error:", err);
    }
  })();
</script>

API Reference

Parameters

| Name | Type | Required | Default | Description | | -------- | -------------------- | -------- | ------- | --------------------------------------- | | qris | string | ✅ | – | Static QRIS string (raw QRIS payload) | | amount | number | ✅ | – | Transaction amount in IDR (no decimals) | | type | "row" / "base64" | ❌ | "row" | Output QRIS format |

Output Fields

| Field | Type | Description | | --------- | -------- | --------------------------------------- | | owner | string | Merchant / QRIS owner name | | city | string | Merchant city | | country | string | ISO country code, default ID | | amount | number | Transaction amount | | code | string | Dynamic QRIS (raw string or Base64 PNG) | | date | string | QRIS generation timestamp (ISO 8601) |


Supported

| Feature | Description | | --------- | ------------------------------------------- | | Standard | EMVCo / Bank Indonesia (BI) | | Providers | DANA, GoPay, OVO, ShopeePay, Bank QRIS, etc |