Open Standard Β· Built on JSON Schema

Give your protocol's data
a permanent home

Denna Spec is an open standard for storing protocol configuration, parameters, and governance documents as structured, validated, and publicly versioned JSON files.

Critical data living in the wrong places

Every DeFi protocol manages data that is too important to live in a spreadsheet β€” wallet addresses, rate spreads, eligibility rules, governance articles. Yet that is exactly where most of it ends up.

πŸ“‹

No audit trail

When a rate changes, who changed it? When? Why? Spreadsheets and Notion pages don't answer these questions. Git does.

⚠️

No validation

A typo in a wallet address or an out-of-range rate can go unnoticed for weeks. Without a schema, there is no automated check.

πŸ”Œ

No interoperability

Every team that wants to consume your parameters builds a custom integration. There is no standard format to build tools against.

πŸ”’

Data you don't own

Notion, Google Sheets, and Confluence store your data on their servers. Your protocol's parameters shouldn't depend on a SaaS vendor.

Four ways to think about Denna

Not a developer? Here are four analogies that capture what Denna does and why it matters for protocols and financial systems.

Like IBAN for bank accounts

A universal standard for protocol data

Before IBAN, every bank had its own account number format. After IBAN, any bank software anywhere in the world could validate an account number and understand its structure without needing custom logic per country or institution. Denna does the same for protocol data: any tool that understands Denna can read and validate any Denna file, regardless of which protocol created it.

Like Git for your parameters

Every change is reviewed, approved, and permanent

When a developer changes code, it goes through a pull request: a description of what changed, a review by a teammate, and a permanent record of who approved it and when. Denna brings this same discipline to data. When a rate changes or a wallet address is updated, it goes through a pull request β€” reviewed, automatically validated, and recorded forever in a public history that anyone can audit.

Inspired by the AT Protocol

Plug and play β€” build once, use everywhere

AT Protocol powers Bluesky. Its core insight: standardize how data is structured, and any app built on that standard gains interoperability for free. Denna applies this idea to protocol configuration. Build a governance UI once and it works with any protocol that publishes Denna files. Build a risk dashboard once and it connects to any Denna-powered parameter store β€” no custom integration per protocol.

The constitution stored as code

Governance documents that tools can read

Sky's Atlas is a constitutional document for a DeFi protocol. Today it is a website β€” readable by humans but invisible to software. With Denna, each article and clause becomes a structured data point that governance tools can query, reference, and validate against. The constitution becomes machine-readable without losing human readability. Any change to any article goes through a pull request with full review history.

Three pieces, working together

Denna Spec is built on GitHub and JSON Schema β€” two technologies already trusted by millions of developers and organizations worldwide.

1

Write a .denna-spec.json file

Your data β€” wallet addresses, rates, governance articles β€” goes into a structured JSON file. It includes a metadata block that identifies what it is and a $schema pointer that says what rules it must follow.

2

A schema defines the rules

A JSON Schema file defines exactly what your data must look like: which fields are required, what format addresses must use, what range a rate must fall within. Use official Denna schemas or write your own.

3

GitHub validates every change

A GitHub Action runs on every pull request and checks every .denna-spec.json file against its schema automatically. Invalid changes are rejected. Valid ones go through your normal review and approval process, creating a permanent audit trail.

From a markdown table to structured data

The same rate parameters β€” before Denna and after.

Before — rates.md
## SSR Spread

| Parameter        | Value | Description     |
|------------------|-------|-----------------|
| SUSDS_SPREAD_BPS | 30    | sUSDS spread    |
| Fallback SSR     | 4.5%  | used when...    |
| BASE_RATE        | 4.66% | fallback rate   |

No validation. No history.
No tool can parse this reliably.
After — rates.denna-spec.json
{
  "$schema": "../schemas/rates.schema.json",
  "metadata": {
    "id": "shared-rates",
    "kind": "io.denna.defi.rates",
    "lastUpdated": "2026-02-21"
  },
  "rates": {
    "ssrSpread": { "value": 30, "unit": "bps" },
    "fallbackSsr": { "value": 4.5, "unit": "percent" }
  }
}

Official schemas and your own

Denna Spec's schema ecosystem is open. Use official schemas from Denna as a starting point, extend them, or build entirely custom ones for your protocol β€” no central registry required.

Official — Denna

Maintained at schemas.denna.io. Uses the io.denna.* namespace.

  • io.denna.defi.prime-config
  • io.denna.defi.rates
  • io.denna.defi.address-registry
  • io.denna.governance.document

Custom — Your Protocol

Your own schemas using your reverse-domain namespace. Host them anywhere accessible by URL.

  • io.sky.prime.config
  • io.sky.atlas.article
  • com.spark.pnl.params
  • org.myprotocol.governance.vote
Kind identifiers use a reverse-domain convention. The first two segments identify the schema publisher (io.denna, io.sky, com.spark). This makes kinds globally unique without a central registry β€” the same approach used by AT Protocol.

Denna Specification 1.0.0

The complete technical specification. Uses RFC 2119 keywords (MUST, SHOULD, MAY).

Summary

Denna Spec is a convention for expressing any structured data as self-describing JSON files validated by JSON Schema. A Denna file (.denna-spec.json) is a JSON document containing a metadata block that identifies what it is, and any number of domain-defined fields containing the actual data. Its structure is validated by a standard JSON Schema referenced via the $schema field.

Denna does not replace JSON Schema β€” it is a thin orchestration layer on top of it. JSON Schema handles all structural validation. Denna defines the conventions JSON Schema alone cannot express: file naming, a standard metadata block, semantic value types, a schema namespace convention, and organizational guidance.

1. File Naming

  1. A Denna file MUST use the extension .denna-spec.json.
  2. The file name SHOULD be descriptive and use kebab-case. Examples: config.denna-spec.json, pnl-params.denna-spec.json, stablecoin-addresses.denna-spec.json.
  3. Files intended to be validated by automated tooling MUST use the .denna-spec.json extension to be discovered by validators and CI pipelines.

2. File Structure

A Denna file MUST be a valid JSON object containing the following top-level fields:

{
  "$schema": "path/or/uri/to/schema.json",
  "metadata": { }
}

Beyond $schema and metadata, all other fields are defined by the domain schema referenced in $schema. The domain schema MAY define any additional fields using any names.

2.1. $schema REQUIRED

A string containing a relative path or absolute URI to a JSON Schema file that validates the entire Denna file. This is standard JSON Schema behavior β€” it enables IDE auto-completion, inline validation, and tells validators which schema to use. The referenced schema MUST validate the complete file including metadata and all domain content fields.

2.2. metadata REQUIRED

An object describing the file's identity and provenance.

FieldTypeRequiredDescription
idstringREQUIREDUnique kebab-case identifier within the repository. Pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
namestringREQUIREDHuman-readable display name.
kindstringREQUIREDReverse-domain kind identifier. See Section 3.
descriptionstringOPTIONALBrief description of the file contents.
versionstringOPTIONALSemantic Version of the data (e.g., 1.0.0). SHOULD be incremented when data changes.
lastUpdateddateOPTIONALISO 8601 date when data was last verified (YYYY-MM-DD).
tagsstring[]OPTIONALFreeform tags for categorization and filtering.
sourceobjectOPTIONALProvenance. MAY contain repository (string) and references (array; use file:line format, e.g., src/lib/constants.ts:17).

2.3. Domain Content Fields

Any fields beyond $schema and metadata are defined by the domain schema. Common naming conventions:

Field NameTypical Use
parametersNumeric configuration values, rates, flags
addressesContract or token address registries
chainsBlockchain network configuration
allocationsAsset positions or fund deployments
contentDocument body or article text
sectionsGovernance document sections or clauses

3. Kind Identifiers

The metadata.kind field is a reverse-domain identifier that uniquely classifies the type of data. It follows a naming convention inspired by AT Protocol NSIDs.

3.1. Format

A kind MUST consist of at least three dot-separated segments. The first two SHOULD identify the schema publisher in reverse-domain order.

io.denna.defi.prime-config
^^ ^^^^^ ^^^^ ^^^^^^^^^^^^
|  |      |    name
|  |      namespace
|  domain
TLD

Pattern: ^[a-z][a-z0-9]*(\.[a-z][a-z0-9-]*){2,}$

3.2. Namespace Conventions

NamespaceUsage
io.denna.*Official schemas published by Denna
io.denna.defi.*DeFi protocol schemas (prime config, rates, allocations)
io.denna.governance.*Governance and document schemas
io.denna.finance.*Financial parameter schemas
{org-domain}.*Custom schemas by an organization

4. Semantic Value Types

Reusable type definitions are available at spec.denna.io/schemas/v1/denna-types.schema.json. Import via $ref in domain schemas.

4.1. Address

{ "value": "0x1601843c5e9bc251a3272907010afa41fa18347e", "format": "evm" }
{ "value": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "format": "solana" }
FormatDescription
evmEthereum and all EVM-compatible chains (Base, Arbitrum, Optimism, Avalanche…)
solanaSolana. Base58-encoded public key.
cosmosCosmos SDK chains. Bech32 with human-readable prefix.
bitcoinBitcoin P2PKH, P2SH, or Bech32.
aptosAptos. 32-byte hex with 0x prefix.
suiSui. 32-byte hex with 0x prefix.
tronTron. Base58Check starting with T.

4.2. Rate

{ "value": 30, "unit": "bps" }      // basis points
{ "value": 4.5, "unit": "percent" }  // percentage

4.3. Amount

{ "value": 1000000000, "currency": "USD" }

4.4. Duration

{ "value": 24, "unit": "months" }
{ "value": 7, "unit": "days" }

4.5. Date

"2026-01-01"  // ISO 8601 β€” YYYY-MM-DD

4.6. Chain Identifier

"ethereum"  // lowercase: base, arbitrum, optimism, solana, avalanche…

5. Domain Schemas

A domain schema is a JSON Schema file that defines the complete structure of a Denna file for a specific use case. Domain schemas:

  1. MUST validate the full file including $schema, metadata, and all domain content fields.
  2. SHOULD import shared type definitions via $ref from https://spec.denna.io/schemas/v1/denna-types.schema.json.
  3. SHOULD use JSON Schema draft 2020-12 or later.
  4. SHOULD be versioned at stable paths (e.g., schemas/v1/, schemas/v2/).
  5. MAY be stored in the same repository as data files or published separately at a stable URL.

6. Schema Ecosystem

Denna Spec is designed around an open schema ecosystem. Any organization can publish schemas. No central registry is required.

  • Official Denna schemas β€” maintained at schemas.denna.io, using the io.denna.* namespace.
  • Custom schemas β€” any organization can publish schemas using their reverse-domain namespace, hosted anywhere accessible by URL.
  • Local schemas β€” schemas stored in the same repository as data files, referenced with relative paths.

7. Versioning

  1. The Denna Specification follows Semantic Versioning. Current version: 1.0.0.
  2. Individual data files SHOULD include metadata.version to track data changes over time.
  3. Domain schemas SHOULD be versioned at stable paths (schemas/v1/, schemas/v2/).

8. Validation

  1. A Denna file is valid if and only if it passes JSON Schema validation against the schema in its $schema field.
  2. Validators MUST resolve the $schema field and validate the entire file against the resolved schema.
  3. If $schema is missing or cannot be resolved, the file MUST be treated as invalid.

Complete Example

Prime configuration β€” spark/config.denna-spec.json

{
  "$schema": "https://schemas.denna.io/v1/defi/prime-config.schema.json",
  "metadata": {
    "id": "spark-config",
    "name": "Spark",
    "kind": "io.denna.defi.prime-config",
    "version": "1.0.0",
    "lastUpdated": "2026-02-21",
    "source": { "repository": "primes-parameters", "references": ["src/lib/constants.ts:12"] }
  },
  "chains": [
    {
      "id": "ethereum",
      "almProxy": { "value": "0x1601843c5e9bc251a3272907010afa41fa18347e", "format": "evm" },
      "vaultProxy": { "value": "0x691a6c29e9e96dd897718305427ad5d534db16ba", "format": "evm" },
      "features": { "alm": true, "psm3": false }
    }
  ],
  "allocations": {
    "ethereum": [
      {
        "contract": { "value": "0x4dedf26112b3ec8ec46e7e31ea5e123490b05b8b", "format": "evm" },
        "protocol": "SparkLend",
        "type": "atoken",
        "underlying": "DAI"
      }
    ]
  }
}

Validation workflow β€” .github/workflows/validate.yml

name: Validate Denna Spec Files

on:
  pull_request:
    paths: ['**/*.denna-spec.json', 'schemas/**']

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: daocraft/denna-spec@v1
        with:
          patterns: "**/*.denna-spec.json"
          exclude: "_template/**"

Frequently asked questions

What is the relationship between Denna and JSON Schema?
Denna Spec is built on top of JSON Schema. JSON Schema handles all structural validation β€” types, required fields, patterns, enums, nested objects. Denna Spec adds the conventions JSON Schema cannot express on its own: file naming, a standard metadata block, semantic value types, and a schema ecosystem for interoperability. Think of JSON Schema as the validation engine, and Denna Spec as the convention layer that makes files self-describing and interoperable across tools and protocols.
Can I use Denna for governance documents, not just parameters?
Yes. Denna Spec is not limited to configuration parameters. It is designed for any structured data: governance documents, constitutional articles, asset registries, financial reports, or any information your protocol needs to track and audit. The domain schema defines what fields your file contains β€” use sections for governance documents, rates for financial parameters, chains for protocol configuration.
Do I need to be a developer to use Denna?
The infrastructure β€” schemas and validation β€” is set up by developers once. After that, editing a .denna-spec.json file to change a rate or update an address is straightforward. Tools built on top of Denna (like governance UIs) can provide a no-code editing experience, so non-developers can propose changes through a web interface without ever touching JSON directly.
What happens when someone makes an invalid change?
The GitHub Action runs automatically on every pull request and validates every changed .denna-spec.json file against its schema. If a change is invalid β€” a malformed address, a missing required field, a rate in the wrong format β€” the check fails and the PR cannot be merged until the issue is corrected. This catches errors before they can reach production systems.
Do I need to use official Denna schemas?
No. Official Denna schemas are a convenience β€” a starting point so you do not have to write a schema from scratch for common use cases. You can define your own schemas, reference official Denna types as building blocks, host them at any stable URL, and use them in your files. The only requirement is that your .denna-spec.json files have a $schema field pointing to a valid JSON Schema.
How is this related to AT Protocol?
Denna Spec is inspired by AT Protocol's core design principle: standardize how data is described once, and any application built on that standard gains interoperability for free. AT Protocol standardizes social data (posts, profiles) so any social app can read it. Denna Spec standardizes protocol data (parameters, addresses, governance documents) so any governance or analytics tool can work with it. The key difference is storage: AT Protocol uses specialized servers; Denna Spec uses Git repositories β€” which are already where most protocol teams work.