Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Domains

A domain is a namespace for grouping related relations. Domains use reverse-DNS notation, similar to Java package names or Android app identifiers.

Naming Convention

com.myapp.person
diy.cook
xyz.tonk.carry

Each relation is qualified by its domain:

com.app.person/name     -- the "name" relation in the "com.app.person" domain
com.app.person/age      -- the "age" relation in the same domain
diy.cook/quantity       -- the "quantity" relation in the "diy.cook" domain

Reserved Domains

Domains starting with dialog. are reserved for Dialog DB internals:

DomainPurpose
dialog.attributeStores attribute identity fields (/id, /type, /cardinality)
dialog.concept.withStores required concept membership by field name
dialog.concept.maybeStores optional concept membership by field name
dialog.metaUniversal metadata: /name and /description for any entity

Do not assert claims into dialog.* domains directly. Carry manages these when you use carry assert attribute, carry assert concept, etc.

The xyz.tonk.carry domain is used by Carry itself for repository-level metadata like labels and settings.

Using Domains

In Commands

When a target in carry assert or carry query contains a ., it’s treated as a domain:

# Assert into a domain
carry assert com.app.person name=Alice age=28

# Query from a domain
carry query com.app.person name age

In YAML Files

Domains appear as the second level in asserted notation:

did:key:zAlice:
  com.app.person:
    name: Alice
    age: 28

Choosing Domain Names

Pick a domain name that represents your use case or organization:

  • com.mycompany.project – for company or project data
  • me.myname.notes – for personal data
  • diy.recipes – for hobby projects

The domain name itself has no special meaning to Carry beyond namespacing. Two claims with the same field name but different domains are completely independent.