This package, pi-sdk-react provides idiomatic React hooks and example components for
building apps and integrations on the Pi Network using the browser’s
window.Pi API with TypeScript safety and React ergonomics. It is
part of the “Ten Minutes to Transactions” effort described in this
video.
This package only contains the frontend interface for initiating and completing Pi transactions. It does not include backend support and will not operate without it. Use one of the backend packages such as pi-sdk-nextjs, pi-sdk-express, pi-sdk-express, or pi-sdk-rails.
pi-sdk-react package to your appnpm install pi-sdk-reactyarn add pi-sdk-reactAdd in your main app HTML (e.g., public/index.html or via a script/Head component).
<head>
<!-- ... other <head> content (meta, title, styles, etc.) ... -->
<script src="https://sdk.minepi.com/pi-sdk.js"></script>
</head>This is required for all Pi SDK browser integrations.
import React from 'react';
import { usePiConnection, usePiPurchase } from 'pi-sdk-react';
import { PaymentData } from 'pi-sdk-js';
const defaultPaymentData: PaymentData = {
amount: 0.01,
memo: 'Example Pi Payment',
metadata: { productId: 42, description: 'Demo purchase via Pi Network' }
};
export interface PiButtonProps {
paymentData?: PaymentData;
onConnected?: () => void;
children?: React.ReactNode;
}
export function PiButton({ paymentData = defaultPaymentData, onConnected, children }: PiButtonProps) {
const { connected } = usePiConnection();
const purchase = usePiPurchase(paymentData);
React.useEffect(() => {
if (connected && onConnected) onConnected();
}, [connected, onConnected]);
return (
<button disabled={!connected} onClick={purchase}>
{children || 'Buy with Pi'}
</button>
);
}The local REST endpoints that you must provide are described in the Official Pi SDK Docs.
usePiConnection() — Handles Pi authentication, user connection, and exposes { connected, user, ready }. Use this to enable/disable purchase buttons, or to get the current Pi user.usePiPurchase(paymentData) — Returns a purchase() callback that triggers the full Pi payment flow for the specified purchase (amount, memo, and metadata).pi-sdk-jsPaymentData, PiUser) come from pi-sdk-js.pi-sdk-js directly.window.Pi to be present (via Pi Network browser SDK script tag).pi-sdk-js, which is a dependency. Do not use window.Pi directly in React—use these hooks/components for best results.window.Pi in your test environment to return appropriate values. See Vitest or your test runner’s docs.For more advanced use-cases, see the internal documentation or contact the Pi SDK team.