-
Notifications
You must be signed in to change notification settings - Fork 16
[WIP] Initial docs for ENSDb #1942
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,80 @@ | ||
| ```mermaid | ||
| mindmap | ||
| root((ENSDb)) | ||
| Vision | ||
| Bi-directional ENS integration | ||
| Writers provide data about ENS | ||
| ENSIndexer indexes onchain data for ENS | ||
| Readers query data about ENS | ||
| ENSAwards queries ENS referrals to build dashboards | ||
| ENSApi queries data about resolver records to enable Protocol Acceleration | ||
|
|
||
| Foundations | ||
| ENSDb instance | ||
| Database Schema | ||
| Ponder Schema | ||
| Exactly one per ENSDb instance | ||
| Schema Lifecycle managed by Ponder runtime | ||
| Shared | ||
| Among apps writing to the ENSDb instances | ||
| ENSIndexer instances | ||
| Among apps reading from the ENSDb instance | ||
| ENSApi instances | ||
| ENSNode Schema | ||
| Exactly one per ENSDb instance | ||
| Schema Lifecycle managed by ENSIndexer runtime | ||
| Shared | ||
| Among apps writing to the ENSDb instances | ||
| ENSIndexer instances | ||
| Among apps reading from the ENSDb instance | ||
| ENSApi instances | ||
| ENSIndexer Schema | ||
| At least one per ENSDb instance | ||
| Schema Lifecycle managed by Ponder runtime | ||
| Isolated writer | ||
| A single ENSIndexer can write data | ||
| Shared readers | ||
| Any number of readers can read data | ||
|
|
||
| Operations | ||
| Infrastructure | ||
| Database Server | ||
| Serves at least one ENSDb instance | ||
| Writers | ||
| ENSIndexer instance | ||
| Writes into the ENSDb instance | ||
| Cached RPC requests | ||
| Ponder Schema | ||
| Indexed ENS onchain data | ||
| ENSIndexer Schema | ||
| ENSNode Metadata | ||
| ENSNode Schema | ||
| Readers | ||
| ENSApi instance | ||
| Reads from the ENSDb instance | ||
| Indexed ENS onchain data | ||
| ENSNode Metadata | ||
| Provides powerful APIs for querying data about ENS | ||
| Possible future ENS primitives | ||
| Event notifications | ||
| Cache invalidations | ||
| Advanced Dashboards | ||
|
|
||
| Tools | ||
| Snapshot tool | ||
| Capabilities | ||
| Takes a snapshot of a selected ENSDb instance | ||
| Restores the ENSDb instance from the snapshot | ||
| Goals | ||
| Cut the cost of RPC requests | ||
| Cut the time needed to complete indexing from scratch | ||
|
|
||
| Integrations | ||
| TypeScript | ||
| ENSDb SDK | ||
| ENSDb Reader | ||
| Drizzle client | ||
| ENSDb Writer | ||
| Any tech-stack | ||
| PostgreSQL client | ||
| ``` | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| --- | ||
| title: Architecture | ||
| description: Understanding the architecture of ENSDb, including its modular design and data flow. | ||
| sidebar: | ||
| label: Architecture | ||
| order: 3 | ||
| keywords: [ensdb, architecture, design, data flow] | ||
| --- | ||
|
|
||
| This section explains the architecture of ENSDb, including its modular design and how data flows through the system. Understanding this architecture will help you work effectively with ENSDb. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| --- | ||
| title: Database Schemas | ||
| description: Detailed explanation of all database schemas that make up ENSDb. | ||
| sidebar: | ||
| label: Database Schemas | ||
| order: 4 | ||
| keywords: [ensdb, database schemas, ponder schema, ensnode schema, ensindexer schema] | ||
| --- | ||
|
|
||
| This section explains the different database schemas used in ENSDb, including the Ponder Schema, ENSNode Schema, and the modular ENSIndexer Schema. |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,219 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| title: Glossary | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| description: Core terminology used throughout ENSDb documentation. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| sidebar: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| label: Glossary | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| order: 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| keywords: [ensdb, glossary, terminology, definitions] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| --- | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import { Aside } from '@astrojs/starlight/components'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| This page defines the **core terminology** used throughout ENSDb documentation. If you encounter an unfamiliar term elsewhere, check here for its definition. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## PostgreSQL Concepts | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### PostgreSQL Server | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| A running PostgreSQL server process that manages one or more [databases](#postgresql-database). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### PostgreSQL Database | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| A PostgreSQL database is an isolated collection of [database objects](#database-objects) managed by a [PostgreSQL server](#postgresql-server). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Database Schema | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| A container that groups related [database objects](#database-objects). There can be multiple database schemas within a single [PostgreSQL database](#postgresql-database). Each database schema has a unique name within the [PostgreSQL database](#postgresql-database). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| <Aside type="note" title="Database Schema vs. Schema Definition"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Database Schema is a PostgreSQL concept referring to a namespace for database objects. Schema Definition is a concept referring to a code-based object that defines the structure of [database objects](#database-objects) within a [database schema](#database-schema). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| </Aside> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Database Objects | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Objects contained within a [database schema](#database-schema), including: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Tables | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Enums | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Indexes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Constraints | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Relations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## ENSDb Standard | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| An open standard for bi-directional ENS integration. The ENSDb Standard defines: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Schema designs for storing ENS data in a [PostgreSQL database](#postgresql-database) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Rules and constraints for writers and readers | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - A modular architecture enabling interoperability | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Any [PostgreSQL database](#postgresql-database) following the ENSDb Standard is an [ENSDb instance](#ensdb-instance). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ## ENSDb Concepts | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Schema Definition | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| For ENSDb, a Drizzle ORM object that defines the structure of [database objects](#database-objects) within a [database schema](#database-schema). Schema Definitions specify: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Tables and their columns | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Column types | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Enums | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Indexes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Constraints | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Relations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### Schema Checksum | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| A deterministic checksum computed from a [Schema Definition](#schema-definition). Used to detect when the schema structure and/or semantics change. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ### ENSDb Instance | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| A [PostgreSQL database](#postgresql-database) that follows the [ENSDb Standard](#ensdb-standard). An ENSDb instance stores indexed ENS data and is composed of three types of database schemas: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Exactly one [Ponder Schema](#ponder-schema) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Exactly one [ENSNode Schema](#ensnode-schema) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - One or more [ENSIndexer Schemas](#ensindexer-schema) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Multiple [ENSDb instances](#ensdb-instance) can be hosted on the same [PostgreSQL server](#postgresql-server). For example: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - One ENSDb instance could be used for production workloads and include data for the "mainnet" ENS Namespace. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - At the same time, another ENSDb instance could be used for testing workloads and include data for the "sepolia" ENS Namespace. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - At the same time, another ENSDb instance could be used for local development workloads and include data for the "ens-test-env" ENS Namespace. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #### Multi-Tenant ENSDb instance | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| An [ENSDb instance](#ensdb-instance) is multi-tenant because it can store data from multiple [ENSIndexer instances](#ensindexer-instance) (tenants) in isolated [ENSIndexer Schemas](#ensindexer-schema). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Within a single [ENSDb instance](#ensdb-instance): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Each [ENSIndexer instance](#ensindexer-instance) gets its own [ENSIndexer Schema](#ensindexer-schema) — fully isolated data following the [ENSIndexer Schema Definition](#schema-definition) that was current when the ENSIndexer instance started. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - All [ENSIndexer instances](#ensindexer-instance) share the [Ponder Schema](#ponder-schema), including the RPC cache. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Metadata of all [ENSIndexer instances](#ensindexer-instance) is tracked in the [ENSNode Schema](#ensnode-schema) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| This enables separate indexing by multiple [ENSIndexer instance](#ensindexer-instance) with different configs. The configs may require indexing just certain chains. For example, one [ENSIndexer instance](#ensindexer-instance) is configured to index data just from the Ethereum Mainnet, while another [ENSIndexer instance](#ensindexer-instance) is configured to index data from both, Ethereum Mainnet, and Base Mainnet. Each of these [ENSIndexer instances](#ensindexer-instance) would have its own [ENSIndexer Schema](#ensindexer-schema) in the same [ENSDb instance](#ensdb-instance). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| This enables separate indexing by multiple [ENSIndexer instance](#ensindexer-instance) with different configs. The configs may require indexing just certain chains. For example, one [ENSIndexer instance](#ensindexer-instance) is configured to index data just from the Ethereum Mainnet, while another [ENSIndexer instance](#ensindexer-instance) is configured to index data from both, Ethereum Mainnet, and Base Mainnet. Each of these [ENSIndexer instances](#ensindexer-instance) would have its own [ENSIndexer Schema](#ensindexer-schema) in the same [ENSDb instance](#ensdb-instance). | |
| This enables separate indexing by multiple [ENSIndexer instances](#ensindexer-instance) with different configs. The configs may require indexing just certain chains. For example, one [ENSIndexer instance](#ensindexer-instance) is configured to index data just from the Ethereum Mainnet, while another [ENSIndexer instance](#ensindexer-instance) is configured to index data from both, Ethereum Mainnet, and Base Mainnet. Each of these [ENSIndexer instances](#ensindexer-instance) would have its own [ENSIndexer Schema](#ensindexer-schema) in the same [ENSDb instance](#ensdb-instance). |
Copilot
AI
Apr 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Grammar: “It's lifecycle” should be “Its lifecycle” (possessive, not “it is”).
| A [database schema](#database-schema) in the [ENSDb instance](#ensdb-instance) following the [Ponder Schema Definition](#ponder-schema-definition). It has a fixed `ponder_sync` name, and it serves as a shared RPC cache for all [ENSIndexer instances](#ensindexer-instance) connected to the [ENSDb instance](#ensdb-instance). It's lifecycle is managed by Ponder runtime. | |
| A [database schema](#database-schema) in the [ENSDb instance](#ensdb-instance) following the [Ponder Schema Definition](#ponder-schema-definition). It has a fixed `ponder_sync` name, and it serves as a shared RPC cache for all [ENSIndexer instances](#ensindexer-instance) connected to the [ENSDb instance](#ensdb-instance). Its lifecycle is managed by Ponder runtime. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copilot
AI
Apr 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typo: “treat is as” should be “treat it as”.
| A [Schema Definition](#schema-definition) that defines the structure of the [Ponder Schema](#ponder-schema) in the [ENSDb instance](#ensdb-instance). This Schema Definition is an implementation detail of Ponder, so we treat is as an opaque black box in ENSDb documentation. | |
| A [Schema Definition](#schema-definition) that defines the structure of the [Ponder Schema](#ponder-schema) in the [ENSDb instance](#ensdb-instance). This Schema Definition is an implementation detail of Ponder, so we treat it as an opaque black box in ENSDb documentation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copilot
AI
Apr 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The ENSNode metadata table definition here omits the value_version column, but other docs in this PR describe ensnode.metadata as having value_version (e.g. in Database Schemas / Writer docs). Please add value_version to this glossary table (or clarify if the glossary is describing a different/older schema).
| | `value` | `jsonb` | The context object (configuration, status, etc.) | | |
| | `value` | `jsonb` | The context object (configuration, status, etc.) | | |
| | `value_version` | `integer` | Version of the structure stored in `value` | |
Copilot
AI
Apr 17, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This claims the value column always stores a JSON object with a guaranteed version field. In the current SDK, ensdb_version is stored as a JSON string, and other records (e.g. indexing status snapshot) serialize without a {version, data} wrapper. Consider revising this to describe the actual per-key value shapes rather than guaranteeing an object with version.
Copilot
AI
Apr 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The glossary lists indexing_metadata_context as the only ENSNode metadata key, but the rest of these docs use keys like ensdb_version, ensindexer_public_config, and ensindexer_indexing_status. Please reconcile this section with the keys used elsewhere (either update the list, or explain how indexing_metadata_context relates to those keys).
| The `key` column identifies the type of metadata: | |
| | Key | Description | | |
| |-----|-------------| | |
| | `indexing_metadata_context` | [Indexing metadata context](#indexing-metadata-context) of the [ENSIndexer instance](#ensindexer-instance) | | |
| #### Indexing Metadata Context | |
| A JSON object that provides context about the ENSNode stack the Indexing Status. It includes: | |
| - `version`: The version of the Indexing Metadata Context structure | |
| - `data`: The actual context data, whose structure may evolve over time as the needs of the ENSNode stack evolve. The `data` object may include fields such as: | |
| - `indexingStatus`: the current Indexing Status of the [ENSIndexer instance](#ensindexer-instance). | |
| - `ensDbPublicConfig`: the public config of the [ENSDb instance](#ensdb-instance) that this [ENSIndexer instance](#ensindexer-instance) is connected to. | |
| - `ensIndexerPublicConfig`: the public config of the [ENSIndexer instance](#ensindexer-instance) that this metadata record belongs to. | |
| The `key` column identifies the type of metadata record stored in the table. In the current model documented here, the metadata is stored under a single top-level key: | |
| | Key | Description | | |
| |-----|-------------| | |
| | `indexing_metadata_context` | [Indexing metadata context](#indexing-metadata-context) of the [ENSIndexer instance](#ensindexer-instance) | | |
| Other names used elsewhere in the documentation, such as `ensdb_version`, `ensindexer_public_config`, and `ensindexer_indexing_status`, should be understood as versioned fields or logical sections within the JSON `value` of this metadata record, rather than additional values of the `key` column. | |
| #### Indexing Metadata Context | |
| A JSON object that provides context about the ENSNode stack and the Indexing Status. It includes: | |
| - `version`: The version of the Indexing Metadata Context structure | |
| - `data`: The actual context data, whose structure may evolve over time as the needs of the ENSNode stack evolve. The `data` object may include fields such as: | |
| - `indexingStatus`: the current Indexing Status of the [ENSIndexer instance](#ensindexer-instance). Elsewhere this may be referred to as `ensindexer_indexing_status`. | |
| - `ensDbPublicConfig`: the public config of the [ENSDb instance](#ensdb-instance) that this [ENSIndexer instance](#ensindexer-instance) is connected to. Elsewhere this may be referred to as `ensdb_public_config`, with version information represented by values such as `ensdb_version`. | |
| - `ensIndexerPublicConfig`: the public config of the [ENSIndexer instance](#ensindexer-instance) that this metadata record belongs to. Elsewhere this may be referred to as `ensindexer_public_config`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n "ensdb_version|ensindexer_public_config|ensindexer_indexing_status|indexing_metadata_context" \
docs/ensnode.io/src/content/docs/ensdb/concepts/glossary.mdx \
docs/ensnode.io/src/content/docs/ensdb/usage/ensdb-sdk/writer.mdx -C2
rg -n "EnsNodeMetadataKeys\\.(EnsDbVersion|EnsIndexerPublicConfig|EnsIndexerIndexingStatus)" \
packages/ensdb-sdk/src/client/ensdb-writer.ts -C2Repository: namehash/ensnode
Length of output: 3709
🏁 Script executed:
# Search for indexing_metadata_context in the entire codebase
rg -r "indexing_metadata_context" --type typescript --type mdx --type json
# Check the EnsNodeMetadataKeys enum definition
rg -n "enum EnsNodeMetadataKeys|EnsNodeMetadataKeys\s*=" packages/ensdb-sdk/src -A5
# Look at the type definitions for metadata keys
fd -e ts -e tsx packages/ensdb-sdk/src | xargs rg -l "EnsNodeMetadataKeys" | head -5Repository: namehash/ensnode
Length of output: 1632
🏁 Script executed:
# Read the ensnode-metadata.ts file to understand the metadata structure
cat -n packages/ensdb-sdk/src/client/ensnode-metadata.ts
# Check the serialize functions to understand what the values look like
cat -n packages/ensdb-sdk/src/client/serialize/ensnode-metadata.tsRepository: namehash/ensnode
Length of output: 3056
Update the glossary to document the actual metadata keys.
The glossary documents indexing_metadata_context as a metadata key, but it doesn't exist in the implementation. The actual EnsNodeMetadataKeys enum in packages/ensdb-sdk/src/client/ensnode-metadata.ts defines three separate keys: ensdb_version, ensindexer_public_config, and ensindexer_indexing_status—which correctly align with the writer documentation. Replace the single indexing_metadata_context row with entries for these three actual keys, and update the "Indexing Metadata Context" section accordingly to match the implementation.
🧰 Tools
🪛 LanguageTool
[style] ~154-~154: This phrase is redundant. Consider writing “evolve”.
Context: ...ctual context data, whose structure may evolve over time as the needs of the ENSNode stack evolv...
(EVOLVE_OVER_TIME)
[style] ~158-~158: To form a complete sentence, be sure to include a subject.
Context: ...(#ensindexer-instance) is connected to. Might be null during the ENSNode stack cold...
(MISSING_IT_THERE)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@docs/ensnode.io/src/content/docs/ensdb/concepts/glossary.mdx` around lines
146 - 158, The glossary currently lists a non-existent key
`indexing_metadata_context`; update the table and section to match the actual
implementation in the EnsNodeMetadataKeys enum by replacing that single row with
three rows for the real keys: `ensdb_version`, `ensindexer_public_config`, and
`ensindexer_indexing_status`. Adjust the "Indexing Metadata Context" section
(rename if appropriate) to document each of those three keys individually,
describing their JSON/value shape and how they map to the ENSNode stack (e.g.,
`ensdb_version` = version string for the metadata structure,
`ensindexer_public_config` = public config for the ENSIndexer instance,
`ensindexer_indexing_status` = current indexing status object), and ensure
references to ENSIndexer/ENSDb/ENSRainbow match the writer docs and the
EnsNodeMetadataKeys enum in packages/ensdb-sdk/src/client/ensnode-metadata.ts.
Copilot
AI
Apr 17, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The metadata key list here doesn’t match the keys used by the ENSDb SDK (ensdb_version, ensindexer_public_config, ensindexer_indexing_status). Using a different key name (indexing_metadata_context) will mislead readers and conflicts with the SQL example in /ensdb/usage/sql.
| | `indexing_metadata_context` | [Indexing metadata context](#indexing-metadata-context) of the [ENSIndexer instance](#ensindexer-instance) | | |
| #### Indexing Metadata Context | |
| A JSON object that provides context about the ENSNode stack the Indexing Status. It includes: | |
| - `version`: The version of the Indexing Metadata Context structure | |
| - `data`: The actual context data, whose structure may evolve over time as the needs of the ENSNode stack evolve. The `data` object may include fields such as: | |
| - `indexingStatus`: the current Indexing Status of the [ENSIndexer instance](#ensindexer-instance). | |
| - `ensDbPublicConfig`: the public config of the [ENSDb instance](#ensdb-instance) that this [ENSIndexer instance](#ensindexer-instance) is connected to. | |
| - `ensIndexerPublicConfig`: the public config of the [ENSIndexer instance](#ensindexer-instance) that this metadata record belongs to. | |
| - `ensRainbowPublicConfig`: the public config of the ENSRainbow instance that this [ENSIndexer instance](#ensindexer-instance) is connected to. Might be `null` during the ENSNode stack cold start, when the ENSIndexer instance starts before the ENSRainbow instance. | |
| | `ensdb_version` | Version metadata for the connected [ENSDb instance](#ensdb-instance) | | |
| | `ensindexer_public_config` | Public configuration metadata for the [ENSIndexer instance](#ensindexer-instance) | | |
| | `ensindexer_indexing_status` | Current indexing status metadata for the [ENSIndexer instance](#ensindexer-instance) | | |
| #### ENSDb Version | |
| A JSON object describing the version information for the connected [ENSDb instance](#ensdb-instance). As with other metadata records, the object is versioned and includes a top-level `version` field so its structure can evolve safely over time. | |
| #### ENSIndexer Public Config | |
| A JSON object containing the public configuration of the [ENSIndexer instance](#ensindexer-instance) that owns the metadata record. The object is versioned and includes a top-level `version` field. | |
| #### ENSIndexer Indexing Status | |
| A JSON object containing the current indexing status of the [ENSIndexer instance](#ensindexer-instance). The object is versioned and includes a top-level `version` field. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| --- | ||
| title: Overview | ||
| description: Understanding the fundamentals of ENSDb architecture, schemas, and data flow. | ||
| sidebar: | ||
| label: Overview | ||
| order: 1 | ||
| --- | ||
|
|
||
| import { LinkCard } from '@astrojs/starlight/components'; | ||
|
|
||
| ## Who Should Read This | ||
|
|
||
| - **Developers integrating with ENSDb** — Understand the schema structure to write effective queries | ||
| - **DevOps operators running ENSNode** — Understand how ENSDb behaves during different indexing phases | ||
| - **Anyone building custom writers or readers** — Learn the architecture for implementing the standard | ||
|
|
||
| ## Core Concepts | ||
|
|
||
| Understanding these fundamentals will help you work effectively with ENSDb, whether you're querying data, integrating with third-party services, or operating an ENSNode instance. | ||
|
|
||
| <LinkCard | ||
| title="Glossary" | ||
| description="Terminology and definitions used throughout ENSDb documentation." | ||
| href="/ensdb/concepts/glossary" | ||
| /> | ||
|
|
||
| <LinkCard | ||
| title="Architecture" | ||
| description="How ENSDb works as a bi-directional open standard, including the writer/reader pattern and data flow." | ||
| href="/ensdb/concepts/architecture" | ||
| /> | ||
|
|
||
| <LinkCard | ||
| title="Database Schemas" | ||
| description="Detailed explanation of database schemas: Ponder Schema, ENSNode Schema, and the ENSIndexer Schema." | ||
| href="/ensdb/concepts/database-schemas" | ||
| /> | ||
|
|
||
| ## Next Steps | ||
|
|
||
| After understanding these concepts: | ||
|
|
||
| 1. **[Query ENSDb with SQL](/ensdb/usage/sql)** — Language-agnostic SQL examples | ||
| 2. **[Use the TypeScript SDK](/ensdb/usage/sdk)** — Type-safe database access |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add a top-level heading to satisfy markdownlint MD041.
The file starts with a code fence instead of an H1.
Suggested patch
📝 Committable suggestion
🧰 Tools
🪛 markdownlint-cli2 (0.22.0)
[warning] 1-1: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
🤖 Prompt for AI Agents