Skip to content

ENSDb SDK

This page provides an overview of the ENSDb SDK and how to use it in your applications.

For TypeScript projects, the ENSDb SDK provides a convenient and efficient way to interact with your ENSDb instance.

You can install the @ensnode/ensdb-sdk package from the NPM registry, using your preferred package manager:

Terminal window
npm install @ensnode/ensdb-sdk
pnpm install @ensnode/ensdb-sdk
yarn add @ensnode/ensdb-sdk

Canonical fields (canonicalName, canonicalPath, canonicalNode, canonicalDepth) are populated on every Domain reachable from the canonical root, across both ENSv1 and ENSv2 — query them uniformly without branching by type.

import { EnsDbReader, IndexingMetadataContextStatusCodes } from '@ensnode/ensdb-sdk';
import { count, eq } from 'drizzle-orm';
// Connect to a specific ENSDb instance by providing its connection string and
// the ENSIndexer Schema Name you want to query
const ensDbReader = new EnsDbReader(ensDbConnectionString, ensIndexerSchemaName);
const { ensDb, ensIndexerSchema } = ensDbReader;
// Fetch a Domain by its canonical name
const [vitalik] = await ensDb
.select()
.from(ensIndexerSchema.domain)
.where(eq(ensIndexerSchema.domain.canonicalName, "vitalik.eth"));
// Count an address's Domains, grouped by Domain type
const counts = await ensDb
.select({ type: ensIndexerSchema.domain.type, count: count() })
.from(ensIndexerSchema.domain)
.where(eq(ensIndexerSchema.domain.ownerId, "0xd8da6bf26964af9d7eed9e03e53415d37aa96045"))
.groupBy(ensIndexerSchema.domain.type);
// Get indexing status snapshot
const indexingMetadataContext = await ensDbReader.getIndexingMetadataContext();
if (indexingMetadataContext.statusCode === IndexingMetadataContextStatusCodes.Initialized) {
const indexingStatusSnapshot = indexingMetadataContext.indexingStatus;
// Do something with the indexing status snapshot
}