Keep Core neutral
Place narrative-system and workflow-specific information in declared profiles or extensions.
Developer documentation
Start with narrative-neutral NCP Core, declare every profile and extension, preserve unknown payloads, and name the exact conformance layer you checked.
Identify the document and story. Add provenance, authorship, Storytelling Moments, contributions, and external references only when needed.
{
"ncp_version": "0.0.0-development",
"document": {
"id": "ncp_document_001",
"created_at": "2026-08-15T12:00:00Z"
},
"story": { "id": "story_001" },
"profiles": [],
"extensions": [],
"payloads": {}
}Each profile declaration identifies its namespace, version, and schema. A Core processor can preserve the matching payload without interpreting it.
"profiles": [{
"namespace": "example-profile:",
"profile_version": "1.0.0",
"schema": "https://example.org/ncp/profile-schema.json"
}]Place narrative-system and workflow-specific information in declared profiles or extensions.
Use a separately named namespace and follow the versioning rules published by its owner.
Round-trip supplied payloads even when an application does not interpret their contents.
Report Core schema checks separately from profile-specific checks.
Interactive, production, archival, and tool-specific data can travel under independently governed extension namespaces.
example-interactive:
studio-production:
archive-notes:
tool-vendor:
A binding describes how another standard or workflow embeds a complete NCP document or references one through a resolvable URI.
Keep the other system's native objects in that system. Use NCP for the narrative context that must remain portable across the boundary.
Use the open schema tools for syntax and shape. A successful result covers only the schemas actually evaluated.
$ npm install
$ npm run validate:schema
$ npm run validate:file -- ./document.ncp.jsonSchema-valid does not mean semantically valid.