JSPM

upiqrcode

1.0.5
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 13
  • Score
    100M100P100Q52100F
  • License GPL-3.0

Unofficial UPI QR code generator for Node.js with TypeScript support. Educational project - not affiliated with NPCI or financial institutions.

Package Exports

  • upiqrcode
  • upiqrcode/lib/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (upiqrcode) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

๐Ÿš€ UPI QR Code Generator

npm package Downloads Issues TypeScript License: GPL v3

A robust, TypeScript-ready library for generating NPCI-compliant UPI QR codes with intent URLs

Generate UPI QR codes (BASE64) along with UPI intent links for seamless payments through any UPI-enabled app. Perfect for merchants, developers, and payment integrations.

๐Ÿ“‹ Table of Contents

โš ๏ธ Important Disclaimer

๐Ÿšจ PERSONAL PROJECT NOTICE

This is a personal open-source project and is NOT officially associated with:

  • ๐Ÿ›๏ธ National Payments Corporation of India (NPCI)
  • ๐Ÿฆ Any financial institutions or banks
  • ๐Ÿ’ณ UPI service providers
  • ๐Ÿข Any government organizations

This library follows publicly available UPI specifications for educational and development purposes. Users are responsible for compliance with applicable regulations and should conduct proper testing before production use.

โœจ Features

  • ๐ŸŽฏ NPCI Compliant - Follows official UPI linking specifications
  • ๐Ÿ“ฑ Universal Support - Works with all major UPI apps (PhonePe, GPay, Paytm, etc.)
  • ๐Ÿ”ง TypeScript Ready - Full type definitions included
  • ๐ŸŒ Cross-Platform - Works in Node.js and browser environments
  • โšก Fast & Lightweight - Minimal dependencies, maximum performance (~50KB)
  • ๐Ÿ”’ Secure - No external API calls, everything processed locally
  • โœ… Well Tested - Comprehensive test suite included
  • ๐Ÿ“– Great Documentation - Detailed examples and API reference
  • ๐Ÿ”„ Promise-based - Modern async/await support
  • ๐Ÿ› ๏ธ Developer Friendly - Easy integration with existing projects

๐Ÿ“‹ Requirements

  • Node.js: 18.0.0 or later
  • Package Manager: pnpm (recommended), npm, yarn, or bun

๐Ÿ“ฆ Installation

# Using pnpm (recommended)
pnpm add upiqrcode

# Using bun
bun add upiqrcode

# Using npm
npm install upiqrcode

# Using yarn
yarn add upiqrcode

๐Ÿš€ Quick Start

import upiqrcode from "upiqrcode";

// Basic UPI QR code generation
const upiData = await upiqrcode({
  payeeVPA: "merchant@upi",
  payeeName: "Your Store Name"
});

console.log(upiData.qr);      // Base64 PNG image: data:image/png;base64,iVBOR...
console.log(upiData.intent);  // UPI intent: upi://pay?pa=merchant@upi&pn=Your%20Store%20Name

๐Ÿ’ก Advanced Usage

Payment with Amount

import upiqrcode from "upiqrcode";

const paymentQR = await upiqrcode({
  payeeVPA: "shop@paytm",
  payeeName: "Coffee Shop",
  amount: "299.00",
  currency: "INR",
  transactionNote: "Cappuccino and pastry",
  transactionId: "ORDER_" + Date.now()
});

// Use the QR code in your app
document.getElementById('qr-image').src = paymentQR.qr;

Dynamic QR for Different Amounts

import upiqrcode from "upiqrcode";

const createPaymentQR = async (amount: string, note: string) => {
  return await upiqrcode({
    payeeVPA: "business@upi",
    payeeName: "My Business",
    amount: amount,
    currency: "INR",
    transactionNote: note,
    transactionId: `TXN_${Date.now()}`,
    minimumAmount: amount // Ensure exact amount
  });
};

// Generate QR for โ‚น150
const qr150 = await createPaymentQR("150.00", "Product purchase");

๐Ÿ“– API Reference

upiqrcode(params: UpiqrcodeParams): Promise<UpiqrcodeResult>

Parameters

Parameter Type Required Description
payeeVPA string โœ… Yes UPI Virtual Payment Address (e.g., merchant@paytm)
payeeName string โœ… Yes Merchant/Payee name (min 4 chars)
amount string โŒ No Payment amount in decimal format (e.g., "299.50")
currency string โŒ No Currency code (default: "INR")
transactionNote string โŒ No Payment description/note
transactionId string โŒ No Unique transaction identifier
transactionRef string โŒ No Alternative transaction reference
minimumAmount string โŒ No Minimum amount to be paid
payeeMerchantCode string โŒ No Merchant category code
transactionRefUrl string โŒ No Reference URL for the transaction

Returns

interface UpiqrcodeResult {
  qr: string;      // Base64 encoded PNG image with data URI
  intent: string;  // UPI intent URL for app integration
}

Example Response

{
  qr: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
  intent: "upi://pay?pa=merchant@upi&pn=Store%20Name&am=100.00&cu=INR"
}

๐ŸŽฏ Supported UPI Apps

Supported UPI Apps

Works with all major UPI-enabled applications

๐Ÿ› ๏ธ Development

Running Examples

# Clone the repository
git clone https://github.com/Pratyay360/upiqrcode.git
cd upiqrcode

# Install dependencies
npm install

# Run the example
npm run example

# Run tests
npm test

# Build the project
npm run build

Project Scripts

Script Description
npm run build Compile TypeScript to JavaScript
npm test Run the test suite
npm run example Execute usage examples

๐Ÿ”ง Error Handling

import upiqrcode from "upiqrcode";

try {
  const result = await upiqrcode({
    payeeVPA: "invalid", // Too short
    payeeName: "Test"
  });
} catch (error) {
  console.error("QR Generation failed:", error.message);
  // Handle validation errors gracefully
}

Common Errors

  • Validation Error: VPA or payee name too short/missing
  • Generation Error: QR code creation failed (rare)

๐Ÿ“ฑ Frontend Integration

React Example

import React, { useState } from 'react';
import upiqrcode from 'upiqrcode';

const PaymentQR: React.FC = () => {
  const [qrCode, setQrCode] = useState<string>('');

  const generateQR = async () => {
    try {
      const result = await upiqrcode({
        payeeVPA: 'store@upi',
        payeeName: 'My Store',
        amount: '500.00'
      });
      setQrCode(result.qr);
    } catch (error) {
      console.error('Failed to generate QR:', error);
    }
  };

  return (
    <div>
      <button onClick={generateQR}>Generate Payment QR</button>
      {qrCode && <img src={qrCode} alt="UPI QR Code" />}
    </div>
  );
};

HTML/Vanilla JS

<script type="module">
import upiqrcode from 'https://unpkg.com/upiqrcode@latest/lib/index.js';

const result = await upiqrcode({
  payeeVPA: 'merchant@upi',
  payeeName: 'Online Store'
});

document.getElementById('qr-image').src = result.qr;
</script>

๐Ÿ” Security & Compliance

๐Ÿ›ก๏ธ Security Features

  • Local Processing: All QR code generation happens locally - no data sent to external servers
  • No API Dependencies: Works completely offline after installation
  • Input Validation: Built-in validation for UPI parameters
  • Type Safety: Full TypeScript support prevents common errors

โš–๏ธ Compliance Notes

  • Follows publicly available UPI linking specifications
  • Users must ensure compliance with local financial regulations
  • Recommended for development, testing, and educational purposes
  • Production use requires proper validation and testing
  • Consider consulting with financial compliance experts for commercial implementations

โ“ Frequently Asked Questions

Is this library safe to use?

Yes, the library processes everything locally and doesn't send data to external servers. However, ensure you validate all inputs and test thoroughly before production use.

Can I use this for commercial projects?

This is an open-source library under GPL v3 license. You can use it for commercial projects, but you must comply with the license terms and ensure regulatory compliance.

Does this work with all UPI apps?

Yes, the generated QR codes follow standard UPI specifications and work with all major UPI-enabled applications like PhonePe, Google Pay, Paytm, etc.

Do I need NPCI approval to use this?

This library generates standard UPI QR codes based on publicly available specifications. For commercial payment processing, consult with your legal and compliance teams.

How accurate are the generated QR codes?

The library follows NPCI's publicly available UPI linking specifications. However, always test with your target UPI apps before production deployment.

๐Ÿ“š Resources

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

๐Ÿ“ Contribution Guidelines

  • Ensure all changes maintain the educational and open-source nature of this project
  • Add tests for new features
  • Update documentation as needed
  • Follow existing code style and conventions

Development Setup

  1. Fork the repository
  2. Clone your fork: git clone https://github.com/yourusername/upiqrcode.git
  3. Install dependencies: npm install
  4. Make your changes
  5. Run tests: npm test
  6. Build the project: npm run build
  7. Create a Pull Request

๐Ÿ“„ License

This project is licensed under the GPL v3 License - see the LICENSE file for details.

๐Ÿ‘จโ€๐Ÿ’ป Author

Pratyay Mitra Mustafi

๐Ÿ’– Support

If this project helped you, please consider:

  • โญ Starring the repository on GitHub
  • ๐Ÿ› Reporting bugs and issues
  • ๐Ÿ’ก Suggesting new features
  • ๐Ÿ“ Contributing to the codebase
  • ๐Ÿ“ข Sharing with others who might find it useful

๐Ÿ“Š Project Stats

  • ๐Ÿ“ฆ Bundle Size: ~50KB minified
  • ๐Ÿงช Test Coverage: Comprehensive test suite
  • ๐Ÿ“ˆ Performance: Generates QR codes in ~50ms (Node.js)
  • ๐Ÿ”ง Dependencies: Minimal footprint with only essential deps

โš ๏ธ DISCLAIMER: This is a personal open-source project
NOT affiliated with NPCI, banks, or financial institutions

Made with โค๏ธ for the developer community

Use responsibly โ€ข Test thoroughly โ€ข Follow regulations