Multiple URIs for any smart contract. Keep links alive on Ethereum.
Built to solve a simple problem: links die. URLs break, IPFS pins expire, storage nodes go offline. MURI lets you store multiple URIs per token and switch between them when one fails. Originally built for artwork permanency, but it works for any smart contract that needs resilient link storage.
First explored in the artwork Off-Chain Art by Yigit Duman.
Store multiple URIs per token. Manage them with granular permissions. Keep things alive when links rot.
- Multiple URI storage per token
- Granular permission system for collaborative management
- Automatic URI switching when primary fails
- On-chain metadata and file hashes
- On-chain thumbnails (optional)
- x402 integration for decentralized storage uploads
- Manifold extension for ERC721/ERC1155 contracts
| Contract | Address |
|---|---|
| MURIProtocol (Mainnet, Base, Sepolia) | 0x0000000000C2A0B63ab4aA971B08B905E5875b01 |
| MURIProtocolManifoldExtension (Mainnet, Base, Sepolia) | 0x0FFc4A1906157248ae64F28fD259bB7a2790606C |
MURIProtocol: Main contract handling token data, permissions, and URI resolutionMURIProtocolManifoldExtension: Manifold integration for seamless mintingIMURIProtocolCreator: Interface for ownership verification
Visit muri.yigitduman.com to mint and manage tokens through the UI.
Integrate MURI into your contract:
- Implement
IMURIProtocolCreator - Register:
MURIProtocol.registerContract() - Initialize:
initializeTokenData() - Manage:
addArtworkUris(),removeArtworkUris(),setSelectedUri()
Or use the Manifold extension if you're already on ERC721/ERC1155.
# Contracts
cd contract && pnpm install && pnpm run build
# Frontend
cd frontend && pnpm install && pnpm run devStack:
- Contracts: Solidity 0.8.30+, Foundry, Solady
- Frontend: React 19, TypeScript, Vite, Tailwind, Wagmi
PRs welcome. Audits appreciated. Looking for maintainers.
Built with support from the Pushers community.
MIT - See LICENSE.md
- Off-Chain Art — original inspiration
- Pushers Community
- Manifold Creator Core