monerod (daemon, blockchain data) and monero-wallet-rpc (wallet operations). Generate subaddresses per customer, monitor payments, create transactions. Libraries exist for JS/TS, Python, Rust, Java, Go, PHP. For turnkey payment processing, use BTCPay Server or MoneroPay.
Monero has two core services:
| Service | Port | Purpose |
|---|---|---|
monerod | 18081 (RPC) / 18080 (P2P) | Full node: blockchain sync, tx relay, block validation |
monero-wallet-rpc | 18082 | Wallet: addresses, balances, send/receive, key management |
Your app talks to monero-wallet-rpc for most operations. The wallet-rpc connects to monerod for blockchain data. Both communicate via JSON-RPC 2.0 over HTTP.
| Language | Library | Type | Notes |
|---|---|---|---|
| JavaScript/TS | monero-ts | Full implementation | Most comprehensive. Browser + Node.js. Wallet + daemon. |
| Python | monero-python | RPC wrapper | pip install monero. Clean API. Active maintenance. |
| Rust | monero-rs | Native implementation | Low-level. Address parsing, tx construction. |
| Java | monero-java | Full implementation | JNI bindings to C++ wallet2. Heavy but complete. |
| Go | go-monero-rpc-client | RPC wrapper | Lightweight daemon + wallet RPC client. |
| PHP | monerophp | RPC wrapper | For web shop integrations. WooCommerce compatible. |
| C/C++ | Official source | Native | libwallet2_api. Maximum control, maximum complexity. |
| Solution | Self-hosted | Effort | Best For |
|---|---|---|---|
| BTCPay Server | Yes | Medium | E-commerce, invoicing, multi-coin |
| MoneroPay | Yes | Low | Simple XMR-only payment processing |
| Globee | No (hosted) | Low | Quick integration, custodial |
| Custom (wallet-rpc) | Yes | High | Full control, custom flow |
--testnet) or stagenet (--stagenet). Free test XMR from faucets. Identical behavior to mainnet. Never risk real funds during development.
Subaddresses are deterministically generated from your main address. Create billions of unique addresses from one wallet. Each is cryptographically unlinkable to your main address or other subaddresses. Use one per customer, order, or campaign.
Monero blocks average ~2 minutes. 1 confirmation = seen on-chain. 10 confirmations (~20 min) = considered final. For small payments, 1-2 confirmations is practical. For large amounts, wait for 10.
A view key lets you monitor incoming payments without spending ability. Create a view-only wallet for your payment server — even if the server is compromised, funds cannot be stolen.
Official docs: getmonero.org/resources/developer-guides
RPC reference: Daemon RPC | Wallet RPC
Monero Stack Exchange: developer-tagged questions and answers
GitHub: monero-project/monero
1. Run monerod --stagenet + monero-wallet-rpc --stagenet
2. Get test XMR from a stagenet faucet
3. Call create_address to generate payment addresses
4. Poll get_transfers for incoming payments
5. Deploy to mainnet when ready (change ports, use real wallet)
Questions? The Monero developer community is active on Matrix and IRC (#monero-dev on Libera.Chat).