← Protocols
Irys
Storage·Irys · Ethereum · Solana · Multi-chain

Irys

01Description

Programmable datachain (formerly Bundlr) — an L1 that combines a low-cost storage layer with an EVM-compatible execution layer (IrysVM). Funds in any of 20+ supported tokens (ETH, SOL, MATIC, etc.); writes get a permanent, verifiable on-chain receipt.

02Best for
  • 01permanent NFT metadata + media
  • 02AI dataset / model weight provenance
  • 03onchain content with multi-token payment
  • 04verifiable mutable apps via tagged data + manifests
  • 05permanent audit logs and historical records
03Install
  • pnpm add @irys/upload @irys/upload-ethereum
04Environment variables
VariableScopeDescription
IRYS_PRIVATE_KEYServerFunded private key (Ethereum / Solana / etc.) used by the Irys uploader to pay for storage. Server-side only.
NEXT_PUBLIC_IRYS_GATEWAYClientIrys gateway base URL for reads (e.g. `https://gateway.irys.xyz`).
05Prompt snippet
Use the modern `@irys/upload` package (the older `@irys/sdk` and `@bundlr-network/client` are legacy). On the server: `const irysUploader = await Uploader(Ethereum).withWallet(process.env.IRYS_PRIVATE_KEY)`, then upload with `const receipt = await irysUploader.upload(data, { tags: [{ name: 'Content-Type', value: 'application/json' }] })` or `irysUploader.uploadFile(path)` — the returned `receipt.id` is the permanent transaction ID and is fetched via `${NEXT_PUBLIC_IRYS_GATEWAY}/${id}`. Fund once with `irysUploader.fund(irysUploader.utils.toAtomic(0.1))`; check pricing first via `irysUploader.getPrice(bytes)`. For browser flows use `@irys/web-upload` and connect a user wallet — the user pays for their own uploads. Always set descriptive tags (`App-Name`, `Content-Type`, `Type`) so data is discoverable via Irys' GraphQL endpoint later.
06Gotchas
  • Bundlr was renamed to Irys in 2023 and the package layout changed again in 2024–2025 — `@bundlr-network/client` and the older `@irys/sdk` are deprecated. Use `@irys/upload` (server) and `@irys/web-upload` (browser).
  • Uploads are permanent and immutable — you cannot delete or update. Re-uploading creates a new id; plan versioning via tags or a manifest object.
  • Pricing is paid up front per byte and depends on the funded token's price — small files (<100 KiB at time of writing) are free, but bulk uploads need a positive funded balance. Always call `getPrice` first.
  • Funding withdrawals take ~30 minutes to clear back to your wallet (`withdrawBalance`) — design batch flows around this.
  • Irys is launching its own L1 datachain (IrysVM) — the legacy 'Irys on Arweave' write path and the new native datachain have different gateways and transaction-id semantics. Match the SDK version to the network you're targeting.
  • Anything uploaded is public, permanent, and impossible to redact — never upload PII, copyrighted material, or anything that could be subject to legal removal requests.
07Alternatives