Okay, here's the first thing you gotta know-don't buy AR tokens if you're on Solana. Just use Bundlr. Fund your wallet with like 0.01 SOL, and boom, you're uploading files to Arweave's permaweb forever. Why? Bundlr bundles your tiny Solana tx into their network, pays the AR fee for you. Super cheap, like under $0.0005 for small files. I usually do this for NFT metadata-saves headaches.
The thing is, Arweave itself is this beast for permanent storage. Pay once, store forever. Solana loves it for NFTs cuz Metaplex shoves all metadata there. But direct AR? Kinda clunky without Bundlr. Sound familiar if you've messed with IPFS pinning?
Solana's fast as hell, but it sucks for big files or permanence. Transactions? Cheap, like 0.000005 SOL. But storing images, videos, dApp frontends? Nah, chain bloats. Arweave fixes that-decentralized, immutable, one time fee around 0.5 cents per MB.
During the NFT boom, 60-70% of Solana mints used it. Projects like Metaplex, Nosana, even Shadow Drive (SHDW) build on top. You get 45+ replicas across nodes, economic incentives keep it alive for 200+ years. Why does this matter? Your NFT art won't vanish if some AWS bucket dies.
But honestly, without Bundlr, you'd need AR tokens and deal with their network. Solana integration? Bundlr makes it feel native.
Small file under 200KB? Bundlr bundles it cheap-pays full 256KB chunk but splits cost. Say 100KB image: ~$0.0002 via Solana. Big video? Straight Arweave, calculate upfront: fee = data size * ~$0.005/MB, but endowment covers forever storage. No subs.
| Arweave Direct | Bundlr + Solana | |
|---|---|---|
| Small File (<200KB) | $0.0013 (full chunk) | $0.0002-0.0005 |
| 1MB | $0.005 | $0.006 (bundled) |
| Permanence | Forever | Forever |
| Tokens Needed | AR only | SOL/USDC/etc |
Fees fluctuate with AR price, but predictable. I check bundlr.network/pricing first.
Pro tip: Use Solana devnet first? Nah, mainnet's fine-fees tiny. But if you're paranoid, Bundlr has testnet.
Look, we'll build a simple Next.js app like in those tutorials. Copy paste ready. Why Next.js? Handles wallets easy, React context for state. But you can do vanilla JS too.
Create project: npx create next app@latest arweave solana fun. cd in, yarn add @bundlr network/client bignumber ethers react qr code or whatever. Wait, ethers for ETH but we want Solana-grab @solana/web3.js @solana/wallet adapter react.
In pages/_app.js, set up context. I usually copy this boilerplate:
import { createContext, useContext, useState, useRef } from 'react';
export const MainContext = createContext();
export function useMain() { return useContext(MainContext); }
function MyApp({ Component, pageProps }) { const [bundlr, setBundlr] = useState(); const [balance, setBalance] = useState(); // more state here return ( <MainContext.Provider value={{bundlr, balance / etc /}}> <Component {..pageProps} /> </MainContext.Provider> );
}Now, init Bundlr in a hook. Hardcode Solana for now:
import { Bundlr } from '@bundlr network/client';
import { SolanaWeb3Provider } from './solana provider'; // your wallet connect async function initBundlr() { const solana = await SolanaWeb3Provider(); // connect Phantom const bundlr = new Bundlr('https://node2.bundlr.network', 'solana', solana, { / opts / }); await bundlr.ready(); setBundlr(bundlr);
}
Click button, sign tx. Done. Shows "Bundlr connected".
Stuck? Provider error? Make sure Phantom's on Solana mainnet. Refresh after connect.
Okay, next. Check balance first:
const fetchBalance = async () => { const bal = await bundlr.getLoadedBalance(); setBalance(bal.div(bundlr.currencyConfig.base).toString());
};
No balance? Fund form: Input amount, like 0.01. Button calls:
const fund = async (amount) => { const parsed = bundlr.utils.parseUnits(amount.toString(), 9); // lamports if (parsed.lt(1e9)) return; // too small await bundlr.fund(parsed); fetchBalance();
};
Transacts via Solana-feels instant. I usually fund 0.05 SOL, covers gigs of storage.
Issue: "Insufficient funds"? SOL balance low, not Bundlr. Top up Phantom.
pages/index.js: File input, preview img.
const [file, setFile] = useState();
const [uri, setUri] = useState(); const onFileChange = (e) => { const f = e.target.files; if (!f) return; setImage(URL.createObjectURL(f)); // preview const reader = new FileReader(); reader.onload = () => setFile(Buffer.from(reader.result)); reader.readAsArrayBuffer(f);
};Upload button:
const upload = async () => { if (!file) return; const tx = bundlr.createTransaction(file, { tags: [{ name: 'Content Type', value: 'image/png' }] }); await tx.sign(); const res = await tx.upload(); setUri(https://arweave.net/${res.id});
};
Sign, upload. Link appears. Click-your file lives forever. Try it with a cat pic.
What's next? View on permaweb. arweave.net/{txid}. Gateways like viewblock.io too.
Bundlr not ready? Call await bundlr.ready() again. Solana tx fails? Network congestion-wait 10s, retry. File too big? Bundlr caps at MB easy, split if needed.
In my experience, preview image breaks on mobile? Use FileReader for blob URL. And tags? Add 'em for metadata, like App Name: MySolanaDapp.
Want direct Arweave? Grab arweave npm, but fund AR wallet first. Skip unless hardcore.
NFTs, duh. Metaplex Candy Machine? Metadata JSON to Arweave. Cost: ~$0.01 per NFT. dApps? Host frontend static-pay once, no Vercel bills.
Nosana stores compute results there. Shadow Drive? Solana specific, bundles to Arweave under hood. Easier UI, but you pay SHDW tokens.
Question: Big data? Archive wars like community did-70M Ukraine docs in weeks. Scale with bundles.
If Bundlr feels dev y, try SHDW. Connect Solana wallet, upload via their site. Fees in SOL ish, auto to Arweave. But less control.
Expand that Next.js. Add React Context for multi page state-balance persists. QR code for mobile funding? Use react qr code.
Server side? Bundlr with private. No wallet popups.
// context.js full
const value = { initializeBundlr: initBundlr, fetchBalance, balance, uploadFile: / fn /
};
Style it? Tailwind, padding 100px top/bottom. Center 900px container. Looks pro.
Potential issue: State lost on refresh? useRef for bundlr instance. Persist with localStorage? Nah, re init fast.
| Feature | Arweave/Bundlr | IPFS | Filecoin |
|---|---|---|---|
| Permanence | Forever | Pins expire | Time limited |
| Pay Model | One time | Recurring pins | Recurring |
| Solana Ease | Native via Bundlr | Bridges | Bridges |
| Cost 1MB | $0.005 | $0.01/mo | $0.02/mo |
| NFT Fit | Perfect | Okay | Meh |
Arweave wins for "set it and forget". IPFS? Free but flakes.
And yeah, roadmap's lit-better Solana SDKs coming. Scalability bumps, cross chain easier.
Now grab your wallet, spin up that app. Upload a file. Link it in a Solana program. Feels godlike, right? Hit snags? Docs first, then Discord. You've got this.
(