An open protocol for defining, versioning, and sharing semantic ontologies across distributed publishers.
Knowledge lives in the heads of domain experts, but there is no standard way to turn that knowledge into durable, machine-readable definitions that others can build on. Kanonak Protocol changes that.
Every class, property, and instance gets a persistent, globally unique identifier tied to a publisher domain. These identifiers don't break when systems change — they give people and machines a consistent way to refer to the same concepts.
Anyone with a domain can publish ontologies. There is no central authority deciding what types are valid. Domain experts — biologists, engineers, legal scholars — can develop their knowledge into formal schemas and share them directly from their own infrastructure.
Ontologies evolve. Kanonak Protocol uses semantic versioning so publishers can improve their schemas without breaking consumers on earlier versions. Import what you need, pin to a version range, and upgrade on your own schedule.
When AI agents work with Kanonak ontologies, they are grounded in a shared vocabulary with formally defined types and relationships. The Kanonak CLI validates that data conforms to its schema — giving you guarantees about the shape of information rather than hoping the model got it right. Structured, validated data reduces ambiguity and gives agents less room to hallucinate.
A Kanonak package defines classes and properties. This one describes people with addresses:
contacts:
type: Package
publisher: mycompany.com
version: 1.0.0
imports:
- publisher: kanonak.org
packages:
- package: core-rdf
match: ^
version: 1.0.0
alias: rdfs
- package: core-owl
match: ^
version: 2.0.0
alias: owl
- package: core-xsd
match: ^
version: 1.0.0
alias: xsd
Person:
type: rdfs.Class
label: Person
comment: A person in the contacts directory
Address:
type: rdfs.Class
label: Address
fullName:
type: owl.DatatypeProperty
domain: Person
range: xsd.string
email:
type: owl.DatatypeProperty
domain: Person
range: xsd.string
hasAddress:
type: owl.ObjectProperty
domain: Person
range: Address
street:
type: owl.DatatypeProperty
domain: Address
range: xsd.string
city:
type: owl.DatatypeProperty
domain: Address
range: xsd.string
A separate package imports the ontology and creates typed instances with embedded resources:
company-directory:
type: Package
publisher: mycompany.com
version: 1.0.0
imports:
- publisher: mycompany.com
packages:
- package: contacts
match: ^
version: 1.0.0
alice-smith:
type: Person
fullName: Alice Smith
email: alice@mycompany.com
hasAddress:
street: 742 Evergreen Terrace
city: Springfield
bob-jones:
type: Person
fullName: Bob Jones
email: bob@mycompany.com
hasAddress:
street: 221B Baker Street
city: London
Install the CLI to validate, install packages, and inspect dependencies:
npm install -g @kanonak-protocol/cli
kanonak install kanonak.org/core-rdf
kanonak validate contacts.kan.yml
kanonak deps contacts.kan.yml
The protocol was originally called "Canon", short for canonical — the idea that something only needs to be defined once to become the globally referenceable, authoritative form of the thing it describes. The name was changed to Kanonak to avoid overlap with existing brand names. Kanonak is a new word that preserves the canonical roots while being entirely its own.
Kanonak Protocol was created by Paul Fryer in 2024. When existing schema formats like JSON Schema and RDF fell short on distributed publishing, versioning, and readability — he built the protocol from scratch.