20Docs
Solana
Build Solana apps with the same Bounded policy and client SDK. Add wallets, store records onchain, and use supported token and DeFi operations. Keep the rest of your app in Bounded.
What you can build
| Goal | Bounded support |
|---|---|
| Give users a wallet | Embedded wallets and external wallet login |
| Store records on Solana | Collections with onchain: true and wallet-signed writes |
| Move tokens or hold funds for an app | Token plugins, app accounts, and named escrow accounts |
| Build token launches and liquidity flows | Plugin families for Pump.fun, PumpSwap, Meteora, and other supported protocols |
| Use NFTs, prices, or randomness | NFT, price-feed, and oracle plugin families |
| Call another Solana program | Supported @CPI calls from policy hooks |
| Restrict updates to an app policy | Onchain upgrade governance and recovery sessions |
A plugin family does not mean every operation works on every network. Check the exact function, deployed runtime, and network before you build around it.
Start with a devnet collection
Solana devnet is a test network. Mark each collection that needs onchain storage with onchain: true.
{
"notes/$noteId": {
"onchain": true,
"fields": { "owner": "String!", "text": "String" },
"rules": {
"read": "true",
"create": "@user.address != null && @newData.owner == @user.address",
"update": "@user.address != null && @data.owner == @user.address && @newData.owner == @data.owner",
"delete": "@user.address != null && @data.owner == @user.address"
}
}
}This example stores public notes. Only the owner's wallet can update or delete its note. Use @user.address for onchain identity.
bounded verify --protocol realtime_devnet --json
bounded deploy ./policy.json --create --name solana-notes --protocol realtime_devnetFor CLI writes, set SOLANA_DEVNET_RPC_URL to your RPC endpoint. An RPC endpoint lets the client read the network and submit signed transactions.
For browser writes, configure init() with the app ID, chain: "solana_devnet", and rpcUrl. Connect a wallet before you write. Use the SDK's set() method to submit the change.
What changes when data is onchain
- The client requests a write.
- Bounded builds a Solana transaction for that write.
- The user's wallet signs the transaction.
- The Solana program checks the applicable policy and runs the transaction.
- Bounded's data mirror catches up with confirmed chain state.
The mirror is a copy for app reads and subscriptions. It can lag behind Solana. An immediate read is not proof that a transaction succeeded or failed.
Find an onchain operation
bounded plugins list --json
bounded plugins describe <plugin.function> --json
bounded verify --protocol realtime_devnet --jsonReplace <plugin.function> with an exact name from the catalog. Read its argument types, signer requirements, and supported contexts. Review capabilityReadiness in the verification report.
Hooks attach these operations to collection writes. A hook may transfer tokens, update an escrow account, or call another program. Decide who holds funds and who signs before you write the hook.
Use separate named accounts when different users or orders need separate funds.@contract.address identifies the app's shared custody context in supported plugins.
Which guarantees run on Solana?
The checked deployment registry records runtime v6 on devnet and mainnet-beta as of September 4, 2026. Source-only v7 features are not part of that deployment.
conservesupports direct, materialized, and sharded forms.rollingSumuses conservative time buckets onchain, rather than the exact offchain sliding window.tenantTagand full-pathtenantEdgehave onchain support. Bare-IDtargetPathVariablereferences remain offchain-only.boundis not enforced onchain.flowBoundandwindowSumremain offchain-only.
The deploy gate checks the target runtime before it accepts newer invariant metadata. See the coverage table for each declaration.
Move to mainnet
Use realtime_mainnet for real assets after you test the complete flow on devnet. Mainnet app creation requires a paid account plan and a wallet you control.
The creating wallet becomes the app's permanent onchain owner. That owner must authorize policy updates. Browser-based wallet accounts approve deployments in the browser.
Set SOLANA_MAINNET_RPC_URL for CLI transaction submission. For SDK submission, use chain: "solana_mainnet" and the matching rpcUrl.
Test signing, failed transactions, retries, and delayed mirror updates before handling user funds.