A lightweight, framework-agnostic library for generating M-PESA Payment QR codes. Built using Web Components, PesaQR works seamlessly with any modern JavaScript framework or vanilla HTML.
npm install pesaqr
<script
type="module"
src="https://github.com/davidamunga/pesaqr/raw/v1.0.3/node_modules/pesaqr/dist/pesaqr.mjs"
></script>
<pesa-qr type="till" tillNumber="123456" amount="100" width="300"></pesa-qr>
<pesa-qr
type="paybill"
paybillNumber="888880"
accountNumber="ACC123"
amount="100"
width="300"
></pesa-qr>
<pesa-qr
type="phone"
phoneNumber="0712345678"
amount="100"
width="300"
></pesa-qr>
import "pesaqr";
function App() {
return <pesa-qr type="till" tillNumber="123456" amount="100" width={300} />;
}
<template>
<pesa-qr type="till" :tillNumber="'123456'" :amount="'100'" :width="300" />
</template>
<script>
import "pesaqr";
export default {
name: "App",
};
</script>
// app.module.ts
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import 'pesaqr';
@NgModule({
// ...
schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class AppModule { }
// component template
<pesa-qr
type="till"
tillNumber="123456"
amount="100"
[width]="300"
></pesa-qr>
| Property | Type | Description | Required |
|---|---|---|---|
| type | string | Payment type: "till", "paybill", or "phone" | Yes |
| tillNumber | string | Till number for till payments | Yes (for type="till") |
| paybillNumber | string | Paybill number for paybill payments | Yes (for type="paybill") |
| accountNumber | string | Account number for paybill payments | Yes (for type="paybill") |
| phoneNumber | string | Phone number for send money payments | Yes (for type="phone") |
| amount | string | Payment amount | Yes |
| width | number | QR code width in pixels | No (default: 600) |
Contributions are welcome! Please feel free to submit a Pull Request.
David Amunga
If you have any feedback or questions, please reach out to me on Twitter.
$ claude mcp add pesaqr \
-- python -m otcore.mcp_server <graph>