Kanonak Protocol

An open protocol for defining, versioning, and sharing semantic ontologies across distributed publishers.

View on GitHub

Why Kanonak Protocol?

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.

Stable resource identifiers

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.

Distributed publishing

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.

Versioned ontologies

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.

Built for AI agents

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.

Example

Define an ontology

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

Create instances

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

Kanonak CLI

Install the CLI to validate, install packages, and inspect dependencies:

npm install -g @kanonak-protocol/cli

Install packages

kanonak install kanonak.org/core-rdf

Validate

kanonak validate contacts.kan.yml

Inspect dependencies

kanonak deps contacts.kan.yml

About

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.