Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ export const integrateSidebarTopic = {
link: "/docs/integrate/integration-options/omnigraph-graphql-api",
},
{
label: "ENSDb Integration Quickstart",
label: "ENSDb (SQL)",
link: "/docs/integrate/integration-options/ensdb",
},
{
Expand All @@ -228,7 +228,7 @@ export const integrateSidebarTopic = {
link: "/docs/integrate/integration-options/ensskills",
},
{
label: "ensdb-cli (Snapshots)",
label: "ensdb-cli (ENSDb Snapshots)",
link: "/docs/integrate/integration-options/ensdb-cli",
},
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
---
import ENSAdminLogoDark from "@components/atoms/logos/astro/ENSAdminLogoDark.astro";
import { ACTIVE_OMNIGRAPH_VERSION } from "@data/omnigraph-examples/active";

const { instanceURL, connectWithENSAdminURL, namespace, plugins, purpose } = Astro.props;
const { instanceURL, connectWithENSAdminURL, namespace, ensVersions, plugins } = Astro.props;
const hostedEnsNodeVersion = ACTIVE_OMNIGRAPH_VERSION;
---
<table style={{marginTop: "0"}}>
Comment thread
tk-o marked this conversation as resolved.
<tbody>
Expand All @@ -16,18 +18,33 @@ const { instanceURL, connectWithENSAdminURL, namespace, plugins, purpose } = Ast
</a>
</td>
</tr>
<tr>
<td style={{verticalAlign: "middle"}}>ENSNode Version</td>
<td>{hostedEnsNodeVersion}</td>
</tr>
<tr>
<td style={{verticalAlign: "middle"}}>ENS Namespace</td>
<td>{namespace}</td>
</tr>
<tr>
<td>Active Plugins</td>
<td>{plugins}</td>
<td style={{verticalAlign: "middle"}}>ENS Versions</td>
<td>{ensVersions}</td>
</tr>
<tr>
<td>ENSNode Plugins</td>
<td set:html={plugins} />
</tr>
<tr>
<td>Purpose</td>
<td>ENS APIs</td>
<td>
{purpose}
<dl>
<dt>ENS Omnigraph API</dt>
<dd class="pl-0"><slot name="ens-omnigraph-api" /></dd>
<dt>ENS Protocol Acceleration</dt>
<dd class="pl-0"><slot name="ens-protocol-acceleration" /></dd>
<dt>ENS Subgraph API</dt>
<dd class="pl-0"><slot name="ens-subgraph-api" /></dd>
</dl>
</td>
</tr>
</tbody>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ const VERSION = ACTIVE_OMNIGRAPH_VERSION.replace(/^v/, "");
---

<Aside type="caution" title="Version compatibility with hosted instances">
Our hosted ENSNode instances currently run ENSNode <code>{VERSION}</code>. The Omnigraph GraphQL schema is bundled inside the SDK and consumed by the <code>gql.tada</code> TypeScript plugin to type your queries, so pin an <strong>exact</strong> version (no <code>^</code> or <code>~</code>) of <code>enssdk@{VERSION}</code> (and <code>enskit@{VERSION}</code> when using React) to keep your generated types matched to the deployed schema. Use these exact install commands:

<a href="/docs/hosted-instances">Our hosted ENSNode instances</a> currently run ENSNode <code>{VERSION}</code>. The Omnigraph GraphQL schema is bundled inside the SDK and consumed by the <code>gql.tada</code> TypeScript plugin to type your queries, so pin an <strong>exact</strong> version (no <code>^</code> or <code>~</code>) of <code>enssdk@{VERSION}</code> (and <code>enskit@{VERSION}</code> when using React) to keep your generated types matched to the deployed schema. Use these exact install commands:
<pre>{`npm install enssdk@${VERSION}
# or, for React apps:
npm install enskit@${VERSION} enssdk@${VERSION}`}</pre>
Expand Down
119 changes: 82 additions & 37 deletions docs/ensnode.io/src/content/docs/docs/hosted-instances.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,98 +6,143 @@ sidebar:
---

import { LinkCard } from "@astrojs/starlight/components";
import HostedEnsNodeInstances from "@components/molecules/HostedEnsNodeInstances.astro";
import HostedEnsNodeInstance from "@components/molecules/HostedEnsNodeInstance.astro";
import HostedInstanceSdkVersionWarning from "@components/molecules/HostedInstanceSdkVersionWarning.astro";

## Hosted Instances
export const subgraphCompatibilityApiLevel = `<em>API-level Subgraph Compatibility.</em> This ENSNode instance has a fully backwards compatible ENS Subgraph GraphQL API. However, additional plugins have been activated which index a superset of data into the subgraph data model in ENSDb (including Basenames, Lineanames, and 3DNS). This superset of indexed data means that the data returned for some ENS Subgraph API queries may be different. **NOTE:** As soon as ENSv2 launches the ENS Subgraph will no longer return correct data. Transition your apps now to the new ENS Omnigraph API to be ENSv2 ready.`;
export const subgraphCompatibilityFull = `<em>Full Subgraph Compatibility.</em> This ENSNode instance has a fully backwards compatible ENS Subgraph GraphQL API at both the API-level and the data-level. We have exhaustively tested and verified that every data record returned by this ENSNode instance's ENS Subgraph API is byte-for-byte identical with The Graph's ENS Subgraph API. **NOTE:** As soon as ENSv2 launches the ENS Subgraph will no longer return correct data. Transition your apps now to the new ENS Omnigraph API to be ENSv2 ready.`;
Comment on lines +12 to +13
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

In Astro, when content is inserted via set:html, is Markdown syntax like NOTE: parsed, or is it rendered as literal text unless converted to HTML tags?

💡 Result:

In Astro, set:html does not parse Markdown. It injects the provided string as HTML (similar to el.innerHTML), so Markdown syntax like NOTE: will be treated as literal text unless you first convert it to actual HTML (e.g., <strong>NOTE:</strong>). Astro’s set:html directive is explicitly documented as “inject[ing] an HTML string … similar to setting el.innerHTML” and that the value is “not automatically escaped by Astro” [1]. Therefore, if you pass Markdown content to set:html, Astro will not run remark/Markdown parsing on it; it will just output that text into the HTML context. Astro’s Markdown parsing happens via its Markdown pipeline for Markdown files/content collections, not via set:html itself [2].

Citations:


Fix Markdown bold in set:html payloads (hosted-instances.mdx lines 12-13)

Astro set:html injects the string as raw HTML (no Markdown parsing), so **NOTE:** will render literally. Use real HTML instead.

💡 Proposed fix
-export const subgraphCompatibilityApiLevel = `<em>API-level Subgraph Compatibility.</em> This ENSNode instance has a fully backwards compatible ENS Subgraph GraphQL API. However, additional plugins have been activated which index a superset of data into the subgraph data model in ENSDb (including Basenames, Lineanames, and 3DNS). This superset of indexed data means that the data returned for some ENS Subgraph API queries may be different. **NOTE:** As soon as ENSv2 launches the ENS Subgraph will no longer return correct data. Transition your apps now to the new ENS Omnigraph API to be ENSv2 ready.`;
+export const subgraphCompatibilityApiLevel = `<em>API-level Subgraph Compatibility.</em> This ENSNode instance has a fully backwards compatible ENS Subgraph GraphQL API. However, additional plugins have been activated which index a superset of data into the subgraph data model in ENSDb (including Basenames, Lineanames, and 3DNS). This superset of indexed data means that the data returned for some ENS Subgraph API queries may be different. <strong>NOTE:</strong> As soon as ENSv2 launches the ENS Subgraph will no longer return correct data. Transition your apps now to the new ENS Omnigraph API to be ENSv2 ready.`;
-export const subgraphCompatibilityFull = `<em>Full Subgraph Compatibility.</em> This ENSNode instance has a fully backwards compatible ENS Subgraph GraphQL API at both the API-level and the data-level. We have exhaustively tested and verified that every data record returned by this ENSNode instance's ENS Subgraph API is byte-for-byte identical with The Graph's ENS Subgraph API. **NOTE:** As soon as ENSv2 launches the ENS Subgraph will no longer return correct data. Transition your apps now to the new ENS Omnigraph API to be ENSv2 ready.`;
+export const subgraphCompatibilityFull = `<em>Full Subgraph Compatibility.</em> This ENSNode instance has a fully backwards compatible ENS Subgraph GraphQL API at both the API-level and the data-level. We have exhaustively tested and verified that every data record returned by this ENSNode instance's ENS Subgraph API is byte-for-byte identical with The Graph's ENS Subgraph API. <strong>NOTE:</strong> As soon as ENSv2 launches the ENS Subgraph will no longer return correct data. Transition your apps now to the new ENS Omnigraph API to be ENSv2 ready.`;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
export const subgraphCompatibilityApiLevel = `<em>API-level Subgraph Compatibility.</em> This ENSNode instance has a fully backwards compatible ENS Subgraph GraphQL API. However, additional plugins have been activated which index a superset of data into the subgraph data model in ENSDb (including Basenames, Lineanames, and 3DNS). This superset of indexed data means that the data returned for some ENS Subgraph API queries may be different. **NOTE:** As soon as ENSv2 launches the ENS Subgraph will no longer return correct data. Transition your apps now to the new ENS Omnigraph API to be ENSv2 ready.`;
export const subgraphCompatibilityFull = `<em>Full Subgraph Compatibility.</em> This ENSNode instance has a fully backwards compatible ENS Subgraph GraphQL API at both the API-level and the data-level. We have exhaustively tested and verified that every data record returned by this ENSNode instance's ENS Subgraph API is byte-for-byte identical with The Graph's ENS Subgraph API. **NOTE:** As soon as ENSv2 launches the ENS Subgraph will no longer return correct data. Transition your apps now to the new ENS Omnigraph API to be ENSv2 ready.`;
export const subgraphCompatibilityApiLevel = `<em>API-level Subgraph Compatibility.</em> This ENSNode instance has a fully backwards compatible ENS Subgraph GraphQL API. However, additional plugins have been activated which index a superset of data into the subgraph data model in ENSDb (including Basenames, Lineanames, and 3DNS). This superset of indexed data means that the data returned for some ENS Subgraph API queries may be different. <strong>NOTE:</strong> As soon as ENSv2 launches the ENS Subgraph will no longer return correct data. Transition your apps now to the new ENS Omnigraph API to be ENSv2 ready.`;
export const subgraphCompatibilityFull = `<em>Full Subgraph Compatibility.</em> This ENSNode instance has a fully backwards compatible ENS Subgraph GraphQL API at both the API-level and the data-level. We have exhaustively tested and verified that every data record returned by this ENSNode instance's ENS Subgraph API is byte-for-byte identical with The Graph's ENS Subgraph API. <strong>NOTE:</strong> As soon as ENSv2 launches the ENS Subgraph will no longer return correct data. Transition your apps now to the new ENS Omnigraph API to be ENSv2 ready.`;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/ensnode.io/src/content/docs/docs/hosted-instances.mdx` around lines 12 -
13, The Markdown bold markers are being injected via Astro's set:html (raw
HTML), so the literal "**NOTE:**" is rendered instead of bold; update the string
constants subgraphCompatibilityApiLevel and subgraphCompatibilityFull to use
real HTML tags (e.g., replace "**NOTE:**" with "<strong>NOTE:</strong>" or
"<b>NOTE:</b>") and ensure any other Markdown-style bold in those exported
template strings is converted to equivalent HTML so the injected HTML renders as
intended.

export const omnigraphForEnsV1 = `<em>Activated.</em> Demonstrates the ENS Omnigraph's ability to support ENSv1 only before ENSv2 launches and both ENSv1 and ENSv2 are concurrently active. Until ENSv2 launches on this namespace, only ENSv1 domains will be available. As soon as ENSv2 launches on this namespace both ENSv1 and ENSv2 domains will be available.`;
export const omnigraphForEnsV1AndEnsV2 = `Powered by a polymorphic GraphQL API with native support for both ENSv1 and ENSv2. When ENSv2 launches in Summer 2026, data from two protocol versions coexist — and the ENS Omnigraph API will keep your app working against both, at the same time, with no code changes. Domains from ENSv1 and ENSv2 are indexed concurrently and exposed through a unified schema.`;
export const omnigraphUnactivated = `<em>Not activated.</em> This ENSNode instance optimizes for maximum compatibility with the ENS Subgraph. Therefore it exclusively activates the <em>subgraph</em> plugin and does not activate the <em>unigraph</em> plugin that the ENS Omnigraph API requires.`;
export const ensProtocolAccelerationAvailable = `<em>Available.</em> Accelerate most of your ENS protocol resolution requests while maintaining full compliance with all ENS protocol standards and best practices.`;
export const ensProtocolAccelerationUnavailable = `<em>Unavailable.</em> Your ENS protocol resolution requests will be serviced in full compliance with all ENS protocol standards and best practices. However, this ENSNode instance did not activate the <em>protocol-acceleration</em> plugin and therefore ENS resolution requests will be serviced accurately but without acceleration.`;

NameHash Labs provides freely available hosted instances for ENS developers looking to get started quickly.
## Get Started Quickly

These instances are provided free of charge with no API key required, have no rate limiting, and are maintained and monitored by the NameHash Labs team.
NameHash Labs provides hosted instances of ENSNode for developers building on ENS and looking to get started quickly.

These instances are currently provided free of charge with no API key required, have no rate limiting, and are maintained and monitored by the NameHash Labs team.

<HostedInstanceSdkVersionWarning />

### Available instance configurations
### ENS Namespaces

Each ENSNode instance is configured for a specific **ENS namespace**. An ENS namespace identifies which ENS protocol deployment ENSNode will provide data for (ex: mainnet or sepolia).

Each ENSNode hosted instance is configured for a specific ENS **namespace** and activated ENSNode **plugins**. The ENS namespace identifies which ENS protocol deployment will be indexed by ENSNode (ex: mainnet or sepolia). The activated plugins determine the specific indexed data model ENSIndexer will produce in ENSDb and therefore which APIs ENSApi will make available to query.
Each ENS namespace is associated with a particular ENS Root Registry deployment, which may or may not have completed the transition from ENSv1 (only) to ENSv1 + ENSv2 (both v1 and v2 concurrently activated together).

Each ENS namespace is associated with a particular ENS Root Registry deployment, which may or may not have completed the transition from ENSv1 to ENSv2. Currently, ENSNode supports the following ENS namespaces:
- `mainnet` (ENSv1)
- `sepolia` (ENSv1)
- `sepolia-v2` (ENSv1+ENSv2 — An independent deployment of ENS to Sepolia that is already upgraded to ENSv2)
- `ens-test-env` (ENSv1+ENSv2 — A deployment of ENSv2 to a local Anvil chain for development and testing. For details see https://github.com/ensdomains/ens-test-env and https://github.com/ensdomains/contracts-v2)
ENSNode supports all of the following ENS namespaces:
- `mainnet` (currently ENSv1 only and not also ENSv2 yet)
- `sepolia` (currently ENSv1 only and not also ENSv2 yet)
- `sepolia-v2` (now ENSv1 + ENSv2 — An *all new* deployment of ENS to Sepolia that is already upgraded to ENSv1 + ENSv2 and is independent of the traditional `sepolia` ENS namespace listed above which currently remains ENSv1 only)
- `ens-test-env` (now ENSv1 + ENSv2 — A deployment of ENSv1 + ENSv2 to a local Anvil chain for development and testing. For details see https://github.com/ensdomains/ens-test-env and https://github.com/ensdomains/contracts-v2). Teams working on the core ENS protocol and infrastructure such as ENS Labs and NameHash Labs are using this ENSNode configuration to support ENSv2 development.

More details about ENS namespaces can be found inside [ENSNode's datasources package](https://github.com/namehash/ensnode/tree/main/packages/datasources).

### ENSv2 Instances
### ENSNode Plugins

Each ENSNode instance is also configured for a specific set of activated **ENSNode plugins**.

These instances are associated with an ENS namespace that has upgraded to ENSv2 and demonstrate the latest ENSv2 support in ENSNode.
The activated plugins determine the specific indexed data model and data records ENSIndexer will produce in ENSDb and therefore which APIs and data records ENSApi will make available to query.

### ENSv1 + ENSv2 Instances
These instances are associated with an ENS namespace that has upgraded to ENSv1 + ENSv2 and demonstrate the latest support in ENSNode for ENSv1 and ENSv2 being concurrently activated together.

#### ENSNode 'v2 Sepolia'

:::tip[v2 Sepolia]
The `sepolia-v2` namespace is undergoing active development by the ENS Labs team who is continuing to release updated ENSv2 contracts. It should be considered experimental.
:::

<HostedEnsNodeInstances
<HostedEnsNodeInstance
instanceURL="https://api.v2-sepolia.ensnode.io"
connectWithENSAdminURL="https://admin.ensnode.io/connection?connection=https%3A%2F%2Fapi.v2-sepolia.ensnode.io"
namespace="sepolia-v2"
plugins="unigraph, protocol-acceleration"
purpose="Demonstration of ENSNode's support for an ENS namespace that has already transitioned to ENSv2."
/>
ensVersions="ENSv1 + ENSv2 (concurrently activated together)"
plugins="subgraph, unigraph, protocol-acceleration"
>
<Fragment slot="ens-omnigraph-api" set:html={omnigraphForEnsV1AndEnsV2} />

## ENSv1 Instances
<Fragment slot="ens-subgraph-api" set:html={subgraphCompatibilityApiLevel} />

These instances are associated with an ENS namespace that has **NOT** upgraded to ENSv2 yet and are still operating under ENSv1. These demonstrate how the ENS Omnigraph API, enssdk, enskit, and the full stack of ENSNode services provide support to developers to become ENSv2 ready even before ENSv2 launches.
<Fragment slot="ens-protocol-acceleration" set:html={ensProtocolAccelerationAvailable} />
</HostedEnsNodeInstance>

## ENSv1 Only Instances (not also ENSv2 yet)

Comment thread
tk-o marked this conversation as resolved.
These instances are associated with an ENS namespace that has _NOT_ upgraded to support ENSv1 and ENSv2 concurrently yet and are still operating exclusively under ENSv1. These demonstrate how _the ENS Omnigraph API_, _enssdk_, _enskit_, and the full stack of ENSNode services provide support to developers to become ENSv2 ready even before ENSv2 launches.

### Alpha-style Deployments

These ENSNode instances focus on pushing the boundaries of what's possible with ENSNode.
These ENSNode instances do not constrain themselves to exclusively activating the `subgraph` plugin. They activate additional plugins such as the `unigraph` plugin to demonstrate the latest capabilities of ENSNode including _the new ENS Omnigraph API_.

#### ENSNode 'Alpha'

<HostedEnsNodeInstances
<HostedEnsNodeInstance
instanceURL="https://api.alpha.ensnode.io"
Comment thread
tk-o marked this conversation as resolved.
connectWithENSAdminURL="https://admin.ensnode.io/connection?connection=https%3A%2F%2Fapi.alpha.ensnode.io"
namespace="mainnet"
plugins="subgraph, basenames, lineanames, threedns, unigraph, protocol-acceleration, registrars, tokenscope"
purpose="Demonstration of ENSNode's multichain ENS indexing capability for an ENS namespace (mainnet) that is still operating ENSv1. Experience how the ENS Omnigraph API, enssdk, enskit, and the full stack of ENSNode services provide support to developers to become ENSv2 ready even before ENSv2 launches. Provides a superset of the data indexed by the ENS Subgraph. Offers a preview of ENS Protocol Acceleration."
/>
ensVersions="ENSv1 only (not also ENSv2 yet)"
plugins="<em>unigraph</em>, <em>protocol-acceleration</em>, <em>subgraph</em>, basenames, lineanames, threedns, registrars, tokenscope"
>
<Fragment slot="ens-omnigraph-api" set:html={omnigraphForEnsV1} />

<Fragment slot="ens-subgraph-api" set:html={subgraphCompatibilityApiLevel} />

<Fragment slot="ens-protocol-acceleration" set:html={ensProtocolAccelerationAvailable} />
</HostedEnsNodeInstance>

#### ENSNode 'Alpha-Sepolia'

<HostedEnsNodeInstances
<HostedEnsNodeInstance
instanceURL="https://api.alpha-sepolia.ensnode.io"
connectWithENSAdminURL="https://admin.ensnode.io/connection?connection=https%3A%2F%2Fapi.alpha-sepolia.ensnode.io"
namespace="sepolia"
plugins="subgraph, basenames, lineanames, registrars, unigraph, protocol-acceleration"
purpose="Demonstration of ENSNode's multichain ENS indexing capability for an ENS namespace (sepolia) that is still operating ENSv1. Experience how the ENS Omnigraph API, enssdk, enskit, and the full stack of ENSNode services provide support to developers to become ENSv2 ready even before ENSv2 launches. Provides a superset of the data indexed by the ENS Subgraph. Offers a preview of ENS Protocol Acceleration."
/>
ensVersions="ENSv1 only (not also ENSv2 yet)"
plugins="<em>unigraph</em>, <em>protocol-acceleration</em>, <em>subgraph</em>, basenames, lineanames, registrars"
>
<Fragment slot="ens-omnigraph-api" set:html={omnigraphForEnsV1} />

<Fragment slot="ens-subgraph-api" set:html={subgraphCompatibilityApiLevel} />

<Fragment slot="ens-protocol-acceleration" set:html={ensProtocolAccelerationAvailable} />
</HostedEnsNodeInstance>

### Subgraph-style Deployments

Comment thread
tk-o marked this conversation as resolved.
These ENSNode instances focus on maximizing backwards compatibility with the ENS Subgraph.
These ENSNode instances focus on maximizing backwards compatibility with the ENS Subgraph. Therefore they exclusively activate the `subgraph` plugin and no others.

#### ENSNode 'Mainnet'

<HostedEnsNodeInstances
<HostedEnsNodeInstance
instanceURL="https://api.mainnet.ensnode.io"
connectWithENSAdminURL="https://admin.ensnode.io/connection?connection=https%3A%2F%2Fapi.mainnet.ensnode.io"
namespace="mainnet"
plugins="subgraph"
purpose="Demonstration of ENSNode's backwards compatibility with the ENS Subgraph. Provides 1:1 Subgraph compatible data on mainnet."
/>
ensVersions="ENSv1 only (not also ENSv2 yet)"
plugins="<em>subgraph</em>"
>
<Fragment slot="ens-omnigraph-api" set:html={omnigraphUnactivated} />

<Fragment slot="ens-subgraph-api" set:html={subgraphCompatibilityFull} />

<Fragment slot="ens-protocol-acceleration" set:html={ensProtocolAccelerationUnavailable} />
</HostedEnsNodeInstance>

#### ENSNode 'Sepolia'

<HostedEnsNodeInstances
<HostedEnsNodeInstance
instanceURL="https://api.sepolia.ensnode.io"
connectWithENSAdminURL="https://admin.ensnode.io/connection?connection=https%3A%2F%2Fapi.sepolia.ensnode.io"
namespace="sepolia"
plugins="subgraph"
purpose="Demonstration of ENSNode's backwards compatibility with the ENS Subgraph. Provides 1:1 Subgraph compatible data on Sepolia."
/>
ensVersions="ENSv1 only (not also ENSv2 yet)"
plugins="<em>subgraph</em>"
>
<Fragment slot="ens-omnigraph-api" set:html={omnigraphUnactivated} />

<Fragment slot="ens-subgraph-api" set:html={subgraphCompatibilityFull} />

<Fragment slot="ens-protocol-acceleration" set:html={ensProtocolAccelerationUnavailable} />
</HostedEnsNodeInstance>

## Start building

Expand Down
Loading