FDD is to PDF what Git is to a printed code-review. It’s alive, it’s versionable, and it’s secure.
OpenFDD aims to replace “visual-first” static documents (like PDFs) with “data-first” interactive containers that are human-readable, machine-verifiable, and self-persistent.
FDD files treat the browser as an OS, allowing for a zero-infrastructure application experience where the file is the state.
ld+json block for zero-OCR machine parsing. Don’t give AI a hallucination-prone PDF, give it cryptographically verified JSON-LD..fdd as a High-Trust Data Container and maps proper File Handlers./spec: The FDD Standard Definition./docs: Extensive guides on authoring No-JS .fdd UI layouts and integrations./lib/node-fdd: Server-side Node library for batch generation and cryptographic signing of FDD files./lib/fdd-js: Browser-side logic-less parsing, data binding, and Local State file handling./extension: The Chrome extension establishing the .fdd MIME type routing and Security Shield./examples: Prototypes demonstrating dynamic bank statements, 1-file CRMs, and more./site: Project landing page.FDD adoption solves both infrastructure and data consumption bottlenecks. We believe in:
.fdd file to the user.The OpenFDD ecosystem provides a full suite of JavaScript libraries to securely compose, sign, view, verify, and interact with FDD files.
node-fdd)Before issuing documents, generate your institutional Ed25519 keypair and host your public identity:
npm install -g @coreyburns/node-fdd
# Generate your Ed25519 keypair
fdd-identity keygen ./keys
# Generate a W3C DID Document for hosting at https://yourdomain.com/.well-known/did.json
fdd-identity did ./keys/public.pem yourdomain.com
# Combines packing + cryptographic signing with your issuer DID
fdd-sign pack template.html data.json ./keys/private.pem did:web:yourdomain.com output.fdd
Or use the programmatic API:
import { generateIdentity, createDidDocument } from '@coreyburns/node-fdd/identity';
import { signFdd, parse, verify } from '@coreyburns/node-fdd';
const identity = generateIdentity();
const didDoc = createDidDocument(identity.publicKeyBase64, 'bank.com');
// Host didDoc at https://bank.com/.well-known/did.json
// Issue a document
const fddString = signFdd(data, htmlTemplate, identity.privateKeyPem, 'did:web:bank.com');
// Consume on a recipient server
const { valid, issuer } = await verify(fddString); // resolves did:web, checks Ed25519
const { vc, mutable } = parse(fddString); // extracts data, no OCR needed
fdd-js)Render .fdd containers in your web platform. The library now automatically resolves the issuer’s did:web identity and displays a cryptographic trust badge:
<!-- Pinned to v1.2.0 — includes did:web verification & trust badge -->
<script src="https://cdn.jsdelivr.net/gh/Spuds0588/open-fdd@v1.2.0/lib/fdd-js/src/fdd.js"></script>
Chrome Extension)For end-users opening .fdd files from disk. Acts as a Security Shield: sandboxes rendering, enables direct file-system saves, and strips malicious embedding vectors.
The success of OpenFDD relies entirely on community pushback against static PDFs. The best advocacy strategy is loudly sharing and writing about the project publicly! Help spread the word!
Share the Standard on Social Media:
Action Items for Devs and Advocates:
.fdd open-standard..fdd “mini-app” instead.fdd-data layer!Join us in creating the future of standard file formatting.