Version 1.2 — April 2026  ·  Apache-2.0 Open Source

NDN IPFS Chain
White Paper

Enterprise IPFS for the AI Era

The NDN Data Protocol (NDP) v1.0 collapses three separate protocol stacks into one. One canonical envelope spans three database workloads — Blobs, Models, and Structured Records — under a single auth surface, billing meter, and audit trail.

3
Data Planes
1
Protocol Envelope
Live
Cloud Run API
$50k
Grant Milestones
v1.0
NDP Spec
Live API: ndn-api · us-west1 · Dashboard: ndn-dashboard · us-west1 · GitHub: dnkefua/ndn-ipfs-chain · Nkefua Desmond — NDN Analytics Inc. · Dubai / Tulsa, OK
Executive Summary: The IPFS ecosystem has solved blob pinning. Pinata, Web3.Storage, and Filebase all pin bytes reliably. What they do not solve — and what production teams consistently need — is the full data stack: blob pinning plus a content-addressed model registry plus queryable structured records, all under one authentication surface, one billing meter, and one audit trail. NDP v1.0 solves this with one protocol envelope and three data planes, live on Google Cloud Run since April 2026.

Three Unrelated Protocol
Stacks Today

Production IPFS applications today assemble a patchwork from three separate tool families, none of which interoperate at the protocol level.

📦

Blob Pinning

Pinata, Web3.Storage, Filebase, Fleek standardized blob pinning — a genuine success. But it stops at bytes. No query. No schema enforcement. No model semantics. A team needing structured data or model weights on top of blob storage is on their own.

⚠ A dApp developer pinning NFT metadata with Pinata and user records with Postgres has no single content-addressed audit trail.

🤖

AI/ML Model Weights

HuggingFace Hub is centralized. S3 gives no CID. A 70B-parameter model consists of hundreds of weight shards, a shard map, a model card, and eval results — no standard content-addressed format exists for this. Reproducibility fails at the storage layer.

⚠ Teams must write bespoke download-and-pin scripts, manage shard ordering, and construct shard maps by hand.

🗄️

Structured Records

Tableland offers SQL-flavored data with no blob or model handling. Ceramic gives mutable documents with heavy client complexity. OrbitDB is embedded-only. None expose a standard content-addressed envelope that produces the same CID across two independent implementations.

⚠ Compliance teams cannot prove "this exact dataset was in this exact state at this timestamp" with a standard primitive.

The Consequence: Teams either abandon IPFS for the hard cases or build one-off glue layers that lock them into a specific implementation. Neither outcome serves the ecosystem. NDP v1.0 is the standard-layer solution.

One Envelope,
Three Data Planes

The NDN Data Protocol makes one claim: every persistent object a production application needs can be expressed as a canonical JSON envelope, hashed deterministically, and addressed by a CIDv1. Three data planes emerge naturally from this foundation.

Canonicalization Pipeline

INPUT
JSON Object
RFC 8785
JCS Canonical
SHA-256
Hash Digest
OUTPUT
CIDv1 (raw)

The Canonical Envelope

NDP Envelope · JSON
{ "ndp": "1", "kind": "record | blob-meta | model-version | schema | view-snapshot | collection-head", "tenant": "<uuid>", "created": "<RFC-3339 timestamp>", "parent": "<CID | null>", // links to predecessor → version chain "body": { /* data-plane specific payload */ } }

The parent field forms a content-addressed version chain. The tenant field is part of the canonical form — two tenants storing identical content produce different CIDs, ensuring multi-tenant isolation by design.

Single Control Plane,
Unified Auth Surface

All three data planes share one tenant-scoped authentication model, one billing meter, one audit trail, and AES-256-GCM envelope encryption with KMS-managed keys. A single GET /v1/_discovery endpoint advertises which data planes a deployment exposes.

System Architecture — NDP v1.0

Clients
Web App
CLI
JS/TS SDK
Python SDK
REST API
Auth Layer
POST /v1/auth
API Keys
JWT
SIWE (Web3)
API Gateway · Fastify · Cloud Run us-west1
Blob Plane
/v1/blobs
/v1/pins (alias)
/v1/upload (Tus)
Model Plane
/v1/models
/v1/models/stream
/v1/models/import/hf
Records Plane
/v1/records
/v1/collections
/v1/views · /v1/schemas
Storage Layer
🗂 IPFS Cluster
Hot NVMe Tier
🧊 Filecoin
Cold Archival
🐘 Postgres 16
Cloud SQL
🔑 KMS
Envelope Keys
🔐
Tenant Isolation
Row-level SQL isolation + application-layer tenant clause enforcement on every query.
📋
Unified Audit Log
All writes stored as NDP records in the reserved _audit collection. Tamper-evident.
🛡️
AES-256-GCM
Envelope encryption with KMS-managed keys. Crypto-shredding satisfies GDPR Article 17.
📡
Discovery Endpoint
GET /v1/_discovery advertises which data planes are live on any given deployment.

Three Planes,
One Protocol

Each data plane has its own API surface and semantics. A deployment MAY implement all three or declare partial support via GET /v1/_discovery.

Data Plane 01
📦
Blobs
/v1/blobs · /v1/pins (PSA v1.0 alias)

Arbitrary-byte payloads. A strict superset of IPFS Pinning Services API v1.0 — every existing tool works without modification.

  • Tiered storage: hot / cold / filecoin lifecycle policies
  • Per-pin replication factor (default 3, enterprise 5–9)
  • AES-256-GCM envelope encryption before upload
  • Resumable upload via Tus protocol
  • Versioned blob-meta envelope per upload
Data Plane 02
🤖
Models
/v1/models · UnixFS DAG bundles

Content-addressed AI/ML model registry. Each version is a UnixFS DAG: weight shards + shard map + model card + version envelope.

  • CIDv1 for every weight shard independently
  • UnixFS DAG-walkable with standard IPFS tools
  • (name, version) → immutable root CID versioning
  • Range-addressable streaming via HTTP Range
  • HuggingFace one-command import
  • Tensor-level retrieval (experimental)
Data Plane 03
📚
Structured Records
/v1/records · /v1/collections · /v1/views

Queryable JSON documents with schemas, immutable version chains, collections, and content-addressed views.

  • Immutable write → new CID, parent links preserved
  • Mongo-ish query DSL ($gt, $in, $and, dot-path)
  • JSON Schema Draft 2020-12 enforcement
  • Content-addressed views (on_write / interval / manual)
  • SSE stream of head CID changes
  • Full GET /history version chain retrieval

Complete API Surface

📦

Blob API

/v1/blobs · /v1/pins · /v1/upload

MethodPathPurpose
POST/v1/blobsUpload raw bytes. Returns { cid, size, meta_cid }.
GET/v1/blobs/:cidRetrieve raw bytes. Supports Range headers.
GET/v1/blobs/:cid/metaRetrieve metadata envelope.
DELETE/v1/blobs/:cidUnpin and crypto-shred if encrypted.
POST/v1/uploadTus resumable upload endpoint.
GET/v1/pinsPinning Services API v1.0 alias.
🤖

Models API

/v1/models · HuggingFace import · Range streaming

MethodPathPurpose
POST/v1/modelsCreate a model referencing already-pinned shard CIDs.
GET/v1/models/:nameList all versions of a model.
GET/v1/models/:name/:versionRetrieve version envelope + shard map + model card.
POST/v1/models/:name/versionsCreate a new version (immutable, new CID).
GET/v1/models/:name/:version/shards/:shardRetrieve a shard by logical name.
GET/v1/models/:name/:version/streamRange-addressable weight streaming.
POST/v1/models/import/huggingfaceImport from HuggingFace by repo ID. Async for large models.
DELETE/v1/models/:name/:versionRemove the registry pointer (CID content remains).
📚

Records API

/v1/records · /v1/collections · /v1/views · /v1/schemas

MethodPathPurpose
POST/v1/recordsWrite a record. Body: { collection, id?, body, schema_cid? }.
GET/v1/records/:cidRetrieve any envelope by CID.
GET/v1/records/:collection/:idLatest version by logical ID.
GET/v1/records/:collection/:id?at=<cid>Specific historical version by CID.
GET/v1/records/:collection/:id/historyFull version chain (most recent first).
DELETE/v1/records/:collection/:idRemove collection-head entry. CID remains.
POST/v1/collections/:name/queryMongo-ish filter query with projections and sorting.
POST/v1/viewsCreate a named saved query with refresh mode.
GET/v1/views/:name/streamSSE stream of head CID changes.
POST/v1/schemasRegister a JSON Schema Draft 2020-12 schema.
Example: Mongo-ish Query DSL
POST /v1/collections/users/query Content-Type: application/json Authorization: Bearer ndk_... { "filter": { "$and": [ { "age": { "$gte": 18 } }, { "plan": { "$in": ["pro", "enterprise"] } }, { "address.city": "Lagos" } ] }, "projection": ["id", "email", "plan"], "sort": { "created_at": -1 }, "limit": 50 }

NDN vs. The Field
April 2026

The table reflects what each provider actually offers as of April 2026. Only checked entries reflect documented or publicly announced features.

Capability NDN IPFS Chain Pinata Web3.Storage Filebase Fleek
Blob pinning (PSA v1.0)
AI/ML model registry
Structured records + query
AES-256-GCM encryption (default)
Filecoin cold archival
Crypto-shredding (GDPR erasure)
Resumable upload (Tus)
Open conformance test suite Planned M1
Apache-2.0 reference implementation

The Window Is
Open

Three things are now true that were not true three years ago. The protocol-level standard window is open — the ecosystem has not yet fragmented around incompatible structured-data and model-registry approaches.

1

PSA v1.0 Solved Blob Pinning

The Pinning Services API v1.0 standardized blob pinning across providers. The battle for blob interoperability is mostly won. The next layer — models and structured data — has no equivalent standard. The ecosystem is ready for the application-layer protocol stack.

2

AI/ML Teams Generate Content-Addressed Data — They Just Don't Know It

Model weights are deterministic byte sequences. The same model checkpoint, trained identically, produces the same bytes. The missing piece is a standard that makes content addressing first-class at the model-registry layer. Without it, teams keep workunits in centralized silos — HuggingFace, S3 — with no CID.

3

GDPR Created Demand for Cryptographic Deletion on Immutable Storage

IPFS's immutability is a feature, not a bug — but it creates a real compliance problem for data that may need erasure. Crypto-shredding (delete the encryption key → all affected CIDs become permanently unreadable) is the correct solution. NDP's envelope encryption makes this a first-class primitive rather than an afterthought.

Live on Google Cloud Run
As of April 2026

The API is live, the Structured DB migration is deployed, and the full three-plane API surface is accepting traffic. Health check and dashboard URLs are publicly reachable and return in under 500 ms from us-west1.

Fastify REST API (NDP Reference)

ndn-api-1037328355027.us-west1.run.app

Live

Next.js Dashboard (14 routes)

ndn-dashboard-1037328355027.us-west1.run.app

Live

Postgres 16 on Cloud SQL

Migrated — multi-tenant schema deployed

Live

/v1/pins · /v1/models · /v1/records

All three data planes accepting traffic

Live

NDP v1.0 Spec

Published — specs/ndp_protocol.md

Published

Reference Implementation (Apache-2.0)

github.com/dnkefua/ndn-ipfs-chain

Public
SDK Development in Progress: The JS/TS (@ndnanalytics/ipfs), Python (ndn-ipfs), and CLI (ndn) SDKs are the primary deliverable of Grant Milestone M1. They are in active development and will publish to npm and PyPI at M1 completion.

Four Grant Milestones
12-Month Plan

Roadmap tied to the IPFS Foundation grant milestones. Total gate payments: $50,000. All targets from grants/MILESTONES.md.

M1
SDK Foundation + Pinning Services Conformance
Month 3
💰 $15,000
  • @ndnanalytics/ipfs (JS/TypeScript) v1.0 on npm — ESM + CJS + browser bundles, WebCrypto AES-256-GCM, tus streaming
  • ndn-ipfs (Python) v1.0 on PyPI — sync + async (httpx), Pydantic v2 models
  • ndn CLI — static binary, pin add / list / get / keys rotate, works against any PSA v1.0 backend
  • Open-source Pinning Services API v1.0 conformance suite — NDN passes ≥ 80%
  • NDP v1.0 spec posted for community review
M2
Public Gateway Live in 3 Regions
Month 6
💰 $15,000
  • gateway.ndnipfs.com in us-west, eu-west, ap-southeast — anycast DNS, Cloudflare Workers + R2 fronting Cloud Run
  • Subdomain gateway at <cid>.ipfs.ndnipfs.com with origin isolation
  • ?verify=true trustless retrieval — re-hashes content at edge, returns X-Ipfs-Verified header
  • Listed on the IPFS public gateway checker
  • Third-party security audit complete — findings remediated and published
M3
Filecoin Integration + Proofs Dashboard
Month 9
💰 $10,000
  • Filecoin broker integrated — tier=filecoin pins trigger CAR packing + Boost deal submission across ≥ 3 Storage Provider partners
  • Proofs dashboard — per-CID deal list, PoSt verification status, weekly retrieval test results (public scorecard)
  • Automated deal renewal for deals within 30 days of expiry
  • SP scorecard published monthly
M4
Year-1 Scale + Full Conformance
Month 12
💰 $10,000
  • Full Pinning Services API v1.0 conformance (100% of public test suite)
  • 5 published tutorials at docs.ndnipfs.com
  • One conference talk delivered and recorded (IPFS Thing or Devcon)
  • Public Year-1 report — actual vs. target KPIs, lessons learned, sustainability plan

Year-1 End-State Targets

Calibrated to first-year reality for a solo developer with a free tier. Stated explicitly in the grant application.

15,000
SDK Monthly Downloads (npm + PyPI)
5M
Unique CIDs Pinned via NDN
100K
Public Gateway Unique Clients / Month
<250ms
Gateway p95 TTFB
99.95%
Gateway Uptime (rolling 90d)
500 GiB
Stored on Filecoin via NDN
2,500
Verified Filecoin Deals
10,000
Tracked Tutorial Completions

Defense in Depth
From Protocol to KMS

Security is layered at the protocol level, not bolted on. Every primitive — tenant isolation, encryption, CID integrity, reserved namespaces — is normative in the NDP v1.0 spec.

🔒

Tenant Isolation

Every persistent row and every cache key includes the tenant UUID. Enforcement is layered: application-layer query builder AND Postgres row-level security policies. A bug in application code cannot leak data between tenants without bypassing the SQL layer. Tested as commit b603edf9.

🔑

Envelope Encryption + Crypto-Shredding

Client-side AES-256-GCM with per-tenant keys managed by KMS. Deleting the envelope key renders all affected CIDs permanently unreadable. Satisfies GDPR Article 17 on immutable storage. Key deletion event is recorded on-chain as tamper-evident proof of destruction.

🔗

CID Integrity

SHA-256 provides 128-bit collision resistance. JCS canonicalization is deterministic — any deviation from RFC 8785 causes CID divergence. The NDP conformance suite includes canonical-form test vectors that any implementation must pass. Implementations storing >2^64 objects SHOULD migrate to SHA-512.

🚧

Reserved Collections

_schemas, _views, _audit, _meta are privileged namespaces. Direct writes via POST /v1/records are rejected — mutations MUST go through privileged endpoints. This prevents audit log tampering.

🛡️

Rate Limiting & Abuse Prevention

Free-tier gateway: 500 req/min/IP, 50 GB/month per anonymous account. CID blocklist integration via Cloudflare and Badbits feeds. Public abuse contact (abuse@ndnipfs.com) and DMCA process in place. Reference implementation's abuse policy published in repository.

Open Protocol,
No Open-Core Split

The specification is CC-BY 4.0. The reference implementation is Apache-2.0. The commercial product runs on the same open primitives, differentiated by operational features — not by source-code locks.

License Structure

📄 CC-BY 4.0 NDP v1.0 Specification (specs/ndp_protocol.md) — Any party may implement NDP v1.0 without royalties, restrictions, or attribution requirements beyond the license terms.
⚖️ Apache-2.0 Reference implementation (github.com/dnkefua/ndn-ipfs-chain) — No open-core split. The commercial product runs on the same open primitives.

Open Conformance Suite

@ndnanalytics/ndp-conformance and @ndnanalytics/pinning-services-conformance will be published in M1. Any provider can run the suite to claim conformance. Conformance is self-declared against published test vectors — no central certification body required.

IPIP-Style Community Review

Within the grant period, NDP v1.0 will be submitted for IPFS community review via the working-group process, targeting a status equivalent to an IPFS Improvement Proposal. The spec is deliberately storage-backend agnostic — an NDP provider using Arweave instead of Filecoin is a conforming implementation.

Reserved collection names (_schemas, _views, _audit, _meta) and query extensions ($regex, $text, $near) require spec revision — not an implementation decision.

Specifications &
External Links