Five minutes from npm install to a signed, settled Solana payment.
Three code snippets cover 90% of what most integrations need. The SDK is typed, tree-shakable, and works in Node, Deno, Bun, and the browser. Everything below runs against devnet by default — swap one env var to go to mainnet.
Install the SDK
One dependency. No peer-deps. @solana/web3.js is bundled transitively — you can import it directly if needed.
Your first payment
Get an API key from dashboard.solupg.dev — or run locally without one (see self-hosting). Sign transactions with a keypair you own; the SDK never touches your seed.
In devnet, SolUPG auto-funds your payer with 2 SOL on first use. In mainnet you're responsible for keeping it topped up.
Webhooks
Every payment lifecycle event (created · signed · confirmed · finalized · failed) fires a webhook. Signatures are HMAC-SHA256; verify before trusting.
Patterns
Three canonical flows. Pick the one closest to your use case and fork.
Self-host in one command
If you'd rather not depend on our hosted gateway, run the full stack on your own machine. Clone, compose, done.
Required env
| SOLANA_RPC_URL | RPC endpoint (Helius, Triton, QuickNode) |
| POSTGRES_URL | defaults to compose service |
| REDIS_URL | defaults to compose service |
| UPG_SIGNER_KEY | base58 keypair for the gateway payer |
| WEBHOOK_SECRET | HMAC secret for signed events |
Optional env
| JUPITER_URL | override default quote endpoint |
| OTP_PROVIDER | twilio · mailgun · log |
| PROM_PUSHGATEWAY | optional metrics push |
| RATE_LIMIT_RPS | default 50 |
| LOG_LEVEL | trace · debug · info · warn |
Scaling notes
The stack was load-tested to 1,000 TPS sustained on a single 8-core node. Past that, split along the natural service boundaries:
Stateless. Scale horizontally behind any load balancer. Use sticky sessions only if you rely on long-poll webhooks.
CPU-bound on signature verification. Pin to dedicated cores; each replica handles ~350 TPS.
Redis-cached. Scales with RAM. 1M entries ≈ 180MB.
Single-writer by design. Use Postgres streaming replicas for read-heavy dashboards.
Contribute
This is a small team. Good first issues are tagged good-first-issue and deliberately kept scoped. Large refactors should start with an RFC in /rfcs.
Pick a starter ticket
Typo fixes, missing tests, docs improvements. Most merge within 48h.
Code style & conventions
Rustfmt + clippy for Rust. ESLint + Prettier for TS. Conventional commits.
Propose an RFC
Open a discussion before opening a large PR. Saves everyone's time.
Releases cut every two weeks on Fridays. Changelog lives at /CHANGELOG.md. SDK versions follow the on-chain program IDL — a minor bump indicates a new IDL.
Still stuck?
Open a discussion on GitHub or reach out on X. Response times are typically under a day, because this team is small and nobody has a support-ticket queue.