You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: apps/fallback-ensapi/README.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,11 +10,11 @@ This Fallback ENSApi proxies ENS Subgraph GraphQL API requests originally sent t
10
10
11
11
When run in production, it also requires configuration of the `CLOUDFLARE_SECRET` environment variable to avoid exposing our `/subgraph` proxy to the public net.
12
12
13
-
For data consistency, this fallback is exclusively enabled for NameHash's ENSNode deployments that use a [Subgraph Compatible](https://ensnode.io/docs/reference/subgraph-compatibility/) configuration. More specifically:
13
+
For data consistency, this fallback is exclusively enabled for NameHash's ENSNode deployments that use a [Subgraph Compatible](https://ensnode.io/docs/concepts/what-is-the-ens-subgraph/) configuration. More specifically:
14
14
- Mainnet: https://api.mainnet.ensnode.io/
15
15
- Sepolia: https://api.sepolia.ensnode.io/
16
16
17
-
The following NameHash ENSNode deployments are _not_ fully [Subgraph Compatible](https://ensnode.io/docs/reference/subgraph-compatibility/), as they produce a _superset_ of the data indexed by TheGraph. Fallback ENSApi will return an HTTP 503 (Service Unavailable) in response to any Subgraph API requests for these deployments:
17
+
The following NameHash ENSNode deployments are _not_ fully [Subgraph Compatible](https://ensnode.io/docs/concepts/what-is-the-ens-subgraph/), as they produce a _superset_ of the data indexed by TheGraph. Fallback ENSApi will return an HTTP 503 (Service Unavailable) in response to any Subgraph API requests for these deployments:
Copy file name to clipboardExpand all lines: docs/ensnode.io/src/content/docs/docs/concepts/what-is-ensnode.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -30,7 +30,7 @@ ENSNode version 1 (`V1`), discussed here, prioritizes equivalency with the [ENS
30
30
31
31
- Full support for existing ENS Subgraph queries used by [`ensjs`](https://github.com/ensdomains/ensjs/) and [`ens-app-v3`](https://github.com/ensdomains/ens-app-v3)
32
32
- Drop-in replacement for applications using the ENS Subgraph
33
-
- Verified compatibility through extensive testing with [`ens-test-env`](https://github.com/namehash/ens-test-env/) and [ens-subgraph-transition-tools](https://github.com/namehash/ens-subgraph-transition-tools) (see [Subgraph Compatibility](/reference/subgraph-compatibility))
33
+
- Verified compatibility through extensive testing with [`ens-test-env`](https://github.com/namehash/ens-test-env/) and [ens-subgraph-transition-tools](https://github.com/namehash/ens-subgraph-transition-tools) (see [Subgraph Compatibility](/docs/concepts/what-is-the-ens-subgraph/))
Copy file name to clipboardExpand all lines: docs/ensnode.io/src/content/docs/docs/concepts/what-is-the-ens-subgraph.mdx
+95-17Lines changed: 95 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -29,37 +29,115 @@ Each Graph Node server can run any number of "subgraphs". Each subgraph is essen
29
29
30
30
## ENS Subgraph
31
31
32
-
[ENS Labs](https://www.enslabs.org/) has led development of the [ENS Subgraph](https://github.com/ensdomains/ens-subgraph). So far this has been the "official" strategy for indexing ENS data. Additional background info is available in [official ENS docs](https://docs.ens.domains/web/subgraph).
32
+
[ENS Labs](https://www.enslabs.org/) has led development of the [ENS Subgraph](https://github.com/ensdomains/ens-subgraph). In the past, this was the "official" strategy for indexing ENS data. Additional background info is available in [official ENS docs](https://docs.ens.domains/web/subgraph).
33
33
34
34
## Graph Network
35
35
36
36
Operating your own Graph Node server instance can be complex, expensive, and time consuming. An alternative is to use The Graph's semi-decentralized network of indexers operating Graph Node instances.
37
37
38
38
This network provides access to a [semi-decentralized ENS Subgraph](https://thegraph.com/explorer/subgraphs/5XqPmWe6gjyrJtFn9cLy237i4cWw2j9HcUJEXsP5qGtH?view=Query&chain=arbitrum-one). Developers are welcome to use this rate limited API endpoint above for testing, but are highly encouraged to sign up for an account with The Graph to get their own (paid) API key.
39
39
40
-
## NameHash Labs Hosted Graph Node Instance
40
+
## ENSNode's Backwards Compatibility with the ENS Subgraph
41
41
42
-
As an alternative to the Graph Network, [NameHash Labs](https://namehashlabs.org/) operates an independent Graph Node instance. This is currently being freely offered to the ENS community without need for API keys or rate limiting. It can be found at https://graphnode.namehashlabs.org:8030. An [interactive GraphQL Playground](https://graphnode.namehashlabs.org:8030/graphql/playground) is also available.
42
+
To support the ENS ecosystem's transition away from legacy ENS indexing strategies to ENSNode, ENSNode provides a verified backwards compatible ENS Subgraph GraphQL endpoint. This therefore also provides backwards compatibility with `ensjs`.
43
43
44
-
This server is running [Graph Node version 0.39.1](https://github.com/graphprotocol/graph-node/releases/tag/v0.39.1) which is the [latest Graph Node release](https://github.com/graphprotocol/graph-node/releases) (as of July 15, 2025).
44
+
1. For those that wish to host their own ENS indexer, it is faster and easier to deploy ENSNode than to run an ENS Subgraph instance.
45
+
2. For those building an app that simply want to query the legacy ENS Subgraph API in the easiest way possible, we make this freely available through [our hosted ENSNode instances](/docs/usage/hosted-ensnode-instances/).
45
46
46
-
## NameHash Labs Hosted ENS Subgraphs
47
+
## Self-hosted ENSNode instance configuration for ENS Subgraph compatibility
47
48
48
-
Our Graph Node instance indexes the ENS Subgraph on mainnet and sepolia. The live indexing status of each can be monitored with [the indexing status API endpoint](https://graphnode.namehashlabs.org:8030/graphql/playground?query=%7B%0A%20%20indexingStatuses%20%7B%0A%20%20%20%20subgraph%0A%20%20%20%20health%0A%20%20%20%20historyBlocks%0A%20%20%20%20paused%0A%20%20%20%20synced%0A%20%20%20%20chains%20%7B%0A%20%20%20%20%20%20network%0A%20%20%20%20%20%20chainHeadBlock%20%7B%0A%20%20%20%20%20%20%20%20number%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20latestBlock%20%7B%0A%20%20%20%20%20%20%20%20number%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D).
49
+
To enable full ENS Subgraph compatibility on a self-hosted ENSNode instance, configure ENSIndexer with `SUBGRAPH_COMPAT=true`. This single flag:
49
50
50
-
As of the latest update to this page on July 15, 2025:
51
+
1.**Applies Subgraph Indexing Behavior**: Uses Subgraph Interpreted Labels and Names, allowing unnormalized labels to be returned as they appear in the original ENS Subgraph
52
+
2.**Sets Default Plugins & Label Set**: Defaults to `PLUGINS=subgraph`, `LABEL_SET_ID=subgraph` and `LABEL_SET_VERSION=0` to match subgraph indexing logic and label healing behavior
51
53
52
-
- The ["old" version](https://github.com/ensdomains/ens-subgraph/commit/c8447914e8743671fb4b20cffe5a0a97020b3cee) of the ENS Subgraph ([the version currently served by the semi-decentralized Graph Network](https://thegraph.com/explorer/subgraphs/5XqPmWe6gjyrJtFn9cLy237i4cWw2j9HcUJEXsP5qGtH?view=Query&chain=arbitrum-one)) is no longer being indexed by our Graph Node server.
53
-
- The ["new" version](https://github.com/ensdomains/ens-subgraph/pull/90) (as of commit `310bdb2`) is now being indexed across the following chains:
54
+
When `SUBGRAPH_COMPAT=false` (default), ENSIndexer operates in enhanced mode with:
54
55
55
-
**Mainnet**
56
+
-**Enhanced Indexing Behavior**: Uses Interpreted Labels and Names with improved security by encoding unnormalized labels as labelhashes
57
+
-**Expanded Plugin Support**: Defaults to `PLUGINS=subgraph,basenames,lineanames,threedns,protocol-acceleration,registrars,tokenscope` for multichain ENS indexing
58
+
-**Reverse Address Healing**: Attempts to heal subnames of addr.reverse for enhanced reverse resolution support
If you'd like to discuss these features, please [open an Issue on GitHub](https://github.com/namehash/ensnode/issues).
104
+
:::
105
+
106
+
### Well-Known Queries
107
+
108
+
These are some of the popular queries we've seen in the wild (namely via ENSjs and ens-app-v3)—the Subgraph-compatible GraphQL API includes full compatibility with these use-cases (and all other possible queries with the exceptions listed above).
109
+
110
+
:::note[Contributions]
111
+
If you'd like to highlight additional query patterns of the ENS Subgraph GraphQL, please [contribute to this documentation](https://github.com/namehash/ensnode/issues).
112
+
:::
113
+
114
+
#### from ensjs
115
+
116
+
-[`getDecodedName`](https://github.com/ensdomains/ensjs/blob/17ab314/packages/ensjs/src/functions/subgraph/getDecodedName.ts) — Gets the full name for a name with unknown labels from the subgraph
- Gets all names related to an address via registrant, owner, wrappedOwner, resolvedAddress
126
+
- Supports searchString
127
+
- Supports filtering by expiry, reverse records, empty domains
128
+
- Supports ordering by expiry date, name, labelName, createdAt
129
+
- Supports pagination by excluding previous results
130
+
-[`getSubgraphRecords`](https://github.com/ensdomains/ensjs/blob/17ab314/packages/ensjs/src/functions/subgraph/getSubgraphRecords.ts) — Gets the records for a name from the subgraph
131
+
- Allows querying by specific resolver id
132
+
-[`getSubgraphRegistrant`](https://github.com/ensdomains/ensjs/blob/17ab314/packages/ensjs/src/functions/subgraph/getSubgraphRegistrant.ts) — Gets the name registrant from the subgraph
133
+
- Supports .eth second-level domains only
134
+
-[`getSubnames`](https://github.com/ensdomains/ensjs/blob/17ab314/packages/ensjs/src/functions/subgraph/getSubnames.ts) — Gets the subnames for a name
135
+
- Supports searchString
136
+
- Supports filtering by expiry, empty domains
137
+
- Supports ordering by expiry date, name, labelName, createdAt
138
+
- Supports pagination by excluding previous results
139
+
140
+
#### from ens-app-v3
141
+
142
+
-[`useResolverExists`](https://github.com/ensdomains/ens-app-v3/blob/328692ae832618f8143916c143b7e4cb9e520811/src/hooks/useResolverExists.ts#L27) — Checks if a resolver exists
143
+
-[`useRegistrationData`](https://github.com/ensdomains/ens-app-v3/blob/328692ae832618f8143916c143b7e4cb9e520811/src/hooks/useRegistrationData.ts#L31) — Gets registration by id and nameRegistered events
0 commit comments