Skip to main content
EnsRecordsForm edits the records of a name the user already controls: addresses, text records, contenthash, avatar, and header image. It compares the user’s edits with the records you pass in and writes only what changed, in one transaction. SelectRecordsForm is the same records editor without a wallet or transaction. Use it when your own screen saves the records.

Edit records on a name

Fetch the name’s current records before you render the form, and pass them as existingRecords. An empty placeholder for a name that has records hides those records from the user.
This example reads a few records with viem. Any source works, such as Resolvio, as long as you pass the result in the EnsRecords shape.

Resolvers

By default the form finds the name’s resolver through the ENSv2 Universal Resolver. It writes to standard ENS resolvers, ENSv2 PermissionedResolvers, and Namespace’s SimplifiedResolver, and encodes records to match each one. Pass resolverAddress or resolverChainId only to override the lookup.

Props

Collect records without a transaction

Use SelectRecordsForm when the surrounding screen owns the records, such as a records step inside a larger flow or a custom save button. It doesn’t need a connected wallet and sends no transactions.

Avatar and header images

Every form with a records step can upload images. The user signs a Sign-In with Ethereum message for avatarUploadDomain, or avatarUpload.siweDomain on SelectRecordsForm. EOAs and deployed smart contract wallets can both sign.
  • Avatar: square crop, up to 2 MB.
  • Header: rectangular crop, up to 5 MB.
  • Formats: JPEG, PNG, GIF, WebP, and SVG. GIF and SVG files skip the crop step.
To upload images from your own UI, use the Avatar SDK or the useAvatarClient hook.

Record types

Address records use SLIP-44 coin types, for example 60 for Ethereum. convertEVMChainIdToCoinType(chainId) returns the ENSIP-11 coin type for an EVM chain.