That's the magic of Solana xNFT apps. Not your boring JPEGs. These are executable NFTs-full on apps bundled into an NFT that run inside Backpack wallet. Think React code living on IPFS, tied to a Solana mint, and poof, it's playable from your wallet. I built my first one last week, sent a tiny SOL tip to a friend. Took like 30 minutes. Why mess with separate dApps when it's all in one spot?
In my experience, xNFTs shine for games, tools, or quick utilities. Fees? Dirt cheap, around 0.000005 SOL per tx. Faster than Ethereum swaps. But okay, you wanna build and deploy your own? Let's break it down casual like. No fluff.
xNFTs are NFTs with brains. Regular NFTs? Static images. xNFTs? They got code that executes in Backpack. You "install" 'em by minting the NFT, and it pops up in your wallet's apps section. Backpack owns the show here-Phantom doesn't run 'em yet. The thing is, it's React frontend stuffed into an NFT account owned by the xNFT program. Upload to IPFS, link the hash onchain, done.
Sound familiar? Like a PWA but on Solana, gated by NFT ownership. Why does this matter? Devs build once, users run it wallet native. No browser tabs. Users own the app via NFT-resellable, composable. Mad Lads did staking this way. I usually start with their example to see it click.
Yours will be xNFT. Focus there.
Grab these now:
Pro tip: Enable Backpack dev mode first. Hit Ctrl+G to pop it fullscreen. Apps tab is where xNFTs live.
Okay, imagine your buddy asks for a quick tip jar app. You whip up an xNFT saying "GM" and lets 'em send 0.001 SOL. Runs in wallet. Here's how I did it last time. Follow along.
yarn create xnft my gm appusePublicKey() and useSolanaConnection() are baked in. No fumbling Solana connections.src/App.tsx. Ditch boilerplate. Add a button:import { usePublicKey, useSolanaConnection } from '@xnft/react'; function App() { const publicKey = usePublicKey(); const connection = useSolanaConnection(); const sendTip = async () => { // Build tiny tx: 0.001 SOL to some address const tx = new Transaction().add( SystemProgram.transfer({ fromPubkey: publicKey, toPubkey: new PublicKey('YourTipJarAddressHere'), lamports: 1000000, // 0.001 SOL }) ); await window.xnft.solana.send(tx); }; return ( <div> <h1>GM from xNFT!</h1> <button onClick={sendTip}>Tip 0.001 SOL</button> </div> );
}
That's it. Hooks grab your wallet PK and RPC connection. window.xnft.solana.send() signs and broadcasts. Fees auto added, like ~0.000005 SOL. Hit yarn dev-button works in simulator.
But wait, issues? If simulator lags, restart Backpack. Connection errors? Check dev mode. In my experience, forgetting to import Transaction from '@solana/web3.js' kills it. Add: import { Transaction, SystemProgram, PublicKey } from '@solana/web3.js';
Now make it useful. Fetch balance? Easy with connection.getBalance(publicKey). Show "Your SOL: X". Or pull token list from CoinGecko API-examples have it.
Want multiplayer? Use Anchor for onchain state. But for first app, frontend only rocks. Games? Unity SDK exports WebGL straight to xNFT template. Change platform to WebGL, pick xNFT template in Player Settings, build. Host on Arweave or whatever.
Common pitfall: Screen resize. xNFTs run in wallet viewport-use responsive CSS. Backpack fullscreen helps testing.
Ready to ship? Build it.
yarn build. Spits out dist folder.{ "entrypoints": { "default": { "web": "https://ipfs.io/ipfs/QmYourHash/" } }, "tag": "app", "icon": "ipfs://QmIconHash/icon.png", "screenshots": [..]
}
Zip manifest + Assets folder (icons, shots).Boom. Live app. Mine went viral in a small Discord-folks tipping each other GM. Fees so low, spamming's free.
| Step | Cost (SOL) | Time | Gotchas |
|---|---|---|---|
| Build | 0 | 10min | Missing deps |
| IPFS upload | ~0.001 | 2min | Pin it! |
| Mint/publish | 0.01 | 1min | Dev mode on |
| Test tx | 0.000005 | Instant | Funded wallet |
Before coding, fund Backpack. Buy SOL on Binance/Coinbase (~$20 gets you plenty). Copy address, send. Start small-test tx 0.001 SOL to self first.
Setup steps if new:
Phantom works for buying, but switch to Backpack for xNFTs. Backpack handles xNFT program ownership.
Tx fails? Lamports wrong-SOL to lamports: multiply by 1e9. PublicKey typo? Parse error. Fix: new PublicKey('addr').
Simulator blank? yarn dev --force. IPFS down? Use public gateway first, pin later.
Advanced: Integrate Solana Pay for cNFT mints in app. Or Jito staking. But start simple-GM button wins friends.
Got a Unity game? SDK.gg has template. WebGL build, swap template to xNFT, publish same way. Tag "game" in manifest. Runs fullscreen in Backpack. I ported a pong clone-kids loved it.
Want royalties? Master edition enforces on transfers. Users mint your app NFT, resell with cut to you. Or add in app swaps via Jupiter API.
Collections? Tie to master mint like Mad Lads. Multiple users, one app.
Honestly, ecosystem's exploding. Check OSK dashboard for inspo. Follow Backpack Twitter-updates drop weekly.
What's next? Build that GM app tonight. Hit snags? Tweak, redeploy. You'll be shipping xNFTs like pro. Ping me if stuck-I've got your back.
One more: Security. Never hardcode privkeys. Hooks handle signing. Audit txs in Backpack before approve. Users see sim too.
| xNFT | Regular dApp | |
|---|---|---|
| Where it runs | In wallet | Browser |
| User ownership | NFT gated | Open |
| Fees | ~0.000005 SOL | Same, but extra hops |
| Build stack | React + hooks | Full Solana SDK |
| Discovery | Wallet apps tab | DEXs/sites |
There. That's your ticket to Solana xNFT apps. Go build.