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
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
- ๐ UPI QR Code Generator
- ๐ Table of Contents
- โ ๏ธ Important Disclaimer
- โจ Features
- ๐ Requirements
- ๐ฆ Installation
- ๐ Quick Start
- ๐ก Advanced Usage
- ๐ API Reference
- ๐ฏ Supported UPI Apps
- ๐ ๏ธ Development
- ๐ง Error Handling
- ๐ฑ Frontend Integration
- ๐ Security & Compliance
- โ Frequently Asked Questions
- ๐ Resources
- ๐ค Contributing
- ๐ License
- ๐จโ๐ป Author
- ๐ Support
โ ๏ธ 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
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 buildProject 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
- ๐ NPCI UPI Linking Specs - Official UPI documentation
- ๐ Usage Blog Post - Detailed tutorial by the author
- ๐ป Examples Directory - Additional code examples
- ๐ Report Issues - Bug reports and feature requests
๐ค 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
- Fork the repository
- Clone your fork:
git clone https://github.com/yourusername/upiqrcode.git - Install dependencies:
npm install - Make your changes
- Run tests:
npm test - Build the project:
npm run build - Create a Pull Request
๐ License
This project is licensed under the GPL v3 License - see the LICENSE file for details.
๐จโ๐ป Author
Pratyay Mitra Mustafi
- Website: pratyay.vercel.app
- Email: pratyaymustafi@outlook.com
- GitHub: @Pratyay360
๐ 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