ENSNode is the multichain indexer for ENSv2.
Full Documentation ➡︎ ensnode.io
ENSNode is the new multichain indexer for ENS and ENSv2. It provides enhanced ENS indexing capabilities beyond the ENS Subgraph, including faster indexing and simpler deployments. Initial multichain capabilities include indexing mainnet, Basenames, and Linea, providing a unified multichain namespace in a subgraph-compatible GraphQL api. When indexing just mainnet, it has full data equivalency with the ENS Subgraph.
- Multichain ENS Namespace
- flattened, unified, multichain and multiregistrar namespace via optional plugins
- ✅ Mainnet ENS Names
- ✅ Basenames (
.base.eth
) - ✅ Linea Names (
.linea.eth
) - 🚧 + more
- Built on Ponder
- ✅ Rapid Indexing & Backfill
- 10x faster than ENS Subgraph
- Mainnet Backfill: 7 hours on M1 Macbook
- ✅ More efficient than ENS Subgraph
- 35x less disk space and 35% fewer RPC credits [source]
- ✅ End-to-end type safety
- ✅ Automatically reconciles chain reorganizations
- ✅ Deploy anywhere with Node.js & Docker
- ✅ Rapid Indexing & Backfill
- Designed for web developers
- ✅ use ENSNode with ENSjs
- ✅ GraphQL APIs
- ✅ Live Queries & React Hooks
- ✅ Custom APIs for your app
- 1:1 Subgraph Compatibility
- ✅ 100% data equivalency as compared to Subgraph
- ✅ 100% ensjs test suites passing via ens-test-env
- 🚧 100% ens-app-v3 test suites passing via ens-test-env
- Own your ENSNode index
- ✅ Deploy ENSNode to your own cloud for controlling your own uptime guarantees and private queries
The ENS protocol enables resolution of names across multiple chains and even off-chain data sources. ENS smart contracts optimize for some operations, but not others. For example, if you wanted to list all of a user's owned names, there's no practical way to do this through ENS contracts.
An indexer aggregates and reorganizes the representation of ENS's state to make many important queries like that possible, efficient, and convenient:
# get all of a user's domains by address
query Domains($adress: String!) {
domains(where: { owner: $address }) {
id
name
...
}
}
Historically the ENS Subgraph has served this purpose, but the Subgraph's limitations are increasingly severe as the ENS protocol grows. For example: The ENS Subgraph can only index a single chain at a time (ex: mainnet). Given how the majority of ENS names are now issued off of mainnet, only a small percentage of ENS names can be indexed by the ENS Subgraph. This issue will only grow more severe with the launch of ENSv2 and Namechain.
ENSNode is a modern, multichain indexer for ENS. It supports backwards-compatible Subgraph queries and sets the stage for supporting ENSv2, in particular Namechain and the growing set of off-chain ENS names (like .uni.eth
and .cb.id
).
Documentation for the ENSNode suite of apps is available at ensnode.io.
We welcome community contributions and feedback—please see CONTRIBUTING.md for more information.
NameHash has received generous support from the ENS DAO and Gitcoin.
Visit our website to get in contact.
Licensed under the MIT License, Copyright © 2025-present NameHash Labs.
See LICENSE for more information.
The ENSNode monorepo contains multiple modules in the following subdirectories:
apps
executable applications.packages
for libraries that can be embedded into apps.docs
documentation sites.
The main ENSNode indexer application enabling multichain indexing for ENS.
A sidecar service for healing ENS labels. It provides a simple API to recover labels from their hashes. This optimizes a number of ENS use cases, including indexing of ENS data. See the ENSRainbow documentation for more details.
Convenient catalog of ENS deployments including chain, contract addresses, start blocks, and event filters.
TypeScript library for interacting with the ENSRainbow API.
Common utilities used across ENSNode applications
Shared Ponder schema definitions
Subgraph API compatibility layer
Shared configuration files
Astro/Starlight documentation app for ENSNode and ENSRainbow.
Landing page for ENSRainbow.