Xylem
The same frustration that led to Dexplorer — but for EVM chains. When working on EVM development, I wanted a zero-setup way to watch what was happening on a local Anvil node or a custom L2 without spinning up a full block explorer stack. Etherscan doesn't work for local chains. Running a self-hosted explorer means setting up a database, an indexer, and a web server. I wanted to just open a URL and see blocks.
The name comes from a botanical metaphor: xylem tissue transports nutrients from roots to leaves, this tool transports chain data from RPC nodes to the browser. The architecture is a pure React + TypeScript SPA — no backend, no database. It connects directly to any EVM RPC and WebSocket endpoint, streams live blocks and transactions, and lets you inspect details for any block, transaction, wallet, or contract bytecode. Configuration is via environment variable for single-network deployments or a config/config.json for multi-chain setups with multiple networks selectable at runtime.
WebSocket reconnection turned out to be the most subtle engineering problem. EVM nodes drop connections, throttle subscription counts, and return inconsistent error codes across implementations — Anvil, Geth, and Alchemy all behave slightly differently when a subscription expires or the connection drops. Building a reconnection layer that handles all three gracefully, without displaying stale block data while reconnecting, required more edge case handling than the core explorer logic.
Xylem deploys to Vercel with one push, or runs in Docker, Nginx, or Caddy. It works against any EVM chain — Ethereum mainnet, Sepolia, local Anvil instances, or custom L2s — and needs nothing running server-side. Useful during active development for watching transactions land without leaving your editor.