⚠️ Alpha · testnets only. ChainRender is in active alpha and deployed on testnets only — Ethereum Sepolia, the Robinhood Chain Testnet, and the Circle Arc Testnet — not on any mainnet. Contracts, addresses, and APIs may change. Do not use with real funds or production assets.
Guides

Guide: Deploying an App

Once you've built, graded, and styled your app locally (see Build, Grade & Style Before You Deploy), deploying is registering your app's bytes on-chain — a one-time cost, after which anyone renders it for free forever.

The steps

  1. Compile your composition to get its bytes and hash.
  2. Register the bytes to the ComponentRegistry (one transaction). The hash is now a live, renderable app.
  3. (Optional) Name it — register a subname (myapp.chainrender.eth) so it's resolvable by name. See ENS Names & Integration.
  4. (Optional) Seed a theme — if you tuned a custom theme, seed its CSS on-chain and point your app at it.
  5. Verify — render the deployed hash against multiple RPCs and confirm byte-identical output. See Contracts → Verifying.

What you pay for

  • Registering bytes: gas, once, proportional to app size (stored via SSTORE2 — cheap and permanent).
  • Rendering: nothing, ever. It's a view call.
  • Naming: a refundable stake (spam cost, not a fee).
  • Theme changes: nothing at render time; a one-time seed only if you commit a new default theme.

Multichain

Because rendering is deterministic and content-addressed, the same app has the same hash and output on any EVM chain. To deploy across chains, register the same bytes on each; a chain-id-aware viewer resolves the right deployment. (Portability, not bridging — each chain holds its own immutable copy.)

Updating later

You don't mutate a deployed app — you publish a new version through the versioned-name registry (timelocked, observable). See Update a Deployed App.

Related