dev.idiolect.dialect

A community's bundle of idiolect references and preferred translations. Dialects are declared, not imposed: downstream consumers may adopt, adapt, or ignore them.

Source: lexicons/dev/idiolect/dialect.json · Rust: idiolect_records::Dialect · TS: @idiolect-dev/schema/dialect · Fixture: idiolect_records::examples::dialect

Shape

FieldTypeRequiredNotes
owningCommunityat-uriyesThe community that owns this dialect.
namestring (≤128)yesHuman-readable dialect name.
descriptionstring (≤4000 graphemes)noPurpose and scope.
idiolectsarray of schemaRefnoSchemas that constitute the dialect's idiolect set.
preferredLensesarray of lensRefnoTranslations the community prefers.
deprecationsarray of DeprecationnoDeprecated entries with replacement pointers.
versionstringnoDialect version (semver when applicable).
previousVersionat-urinoPredecessor revision in a version chain.
createdAtdatetimeyesPublication timestamp.

Deprecation

SubfieldTypeRequiredNotes
refat-uriyesThe deprecated idiolect or lens.
replacementat-urinoOptional successor.
deprecatedAtdatetimeyesWhen the deprecation took effect.
reasonstring (≤1000 graphemes)yesWhy it was deprecated.

Field details

What a dialect is

A dialect is a bundle. It does not introduce new lexicons; it collects existing ones into a coherent set the community treats as canonical. A consumer that adopts the dialect routes translations through preferredLenses, validates incoming records against the schemas in idiolects, and treats the deprecation list as a redirect table.

The dialect record is data, not configuration. Adding an entry is a record edit; deprecating one is another record edit on the same dialect with a Deprecation entry. Two dialects from different communities can list the same NSID with different preferred lenses; consumers pick a dialect (or a quorum of dialects) and follow it.

previousVersion and the version chain

A dialect revision points at its predecessor via previousVersion. A consumer reading the head dialect can walk the chain back through prior versions, confirm that deprecations were announced at the right time, and audit the change history without trusting the orchestrator's catalog.

The chain is not enforced: a community can publish a dialect with no previousVersion (a fresh start) or skip versions (publishing v3 with previousVersion = v1). The substrate records what was done; consumers decide whether to trust it.

deprecations

Each entry records an idiolect or lens that was once part of the dialect and is now superseded. The ref field points at the deprecated artifact; replacement optionally points at the successor. Consumers reading a record at the deprecated ref can follow replacement to the new one, with the reason field explaining why.

The lexicon-evolution policy generates deprecation entries automatically when a non-Iso lens revision ships. See Lexicon evolution policy.

Example

{
  "$type": "dev.idiolect.dialect",
  "owningCommunity": "at://did:plc:community/dev.idiolect.community/canonical",
  "name": "tutorial canonical",
  "description": "The canonical dialect for the tutorial community.",
  "idiolects": [
    { "uri": "at://did:plc:community/dev.panproto.schema.schema/post-v1" }
  ],
  "preferredLenses": [
    { "uri": "at://did:plc:community/dev.panproto.schema.lens/post-v1-to-v2" }
  ],
  "deprecations": [
    {
      "ref": "at://did:plc:community/dev.panproto.schema.schema/post-v0",
      "replacement": "at://did:plc:community/dev.panproto.schema.schema/post-v1",
      "deprecatedAt": "2026-04-01T00:00:00.000Z",
      "reason": "Replaced by v1 with structured `body` field; lens preserves all v0 records."
    }
  ],
  "version": "1.2.0",
  "previousVersion": "at://did:plc:community/dev.idiolect.dialect/1.1.0",
  "createdAt": "2026-04-19T00:00:00.000Z"
}

Multiple dialects

Two communities can publish disjoint, overlapping, or contradictory dialects. The substrate treats them as opinions; nothing in the protocol prefers one over another. Consumers pick a resolution policy:

  • first-match — pick the first dialect listed in the consumer's config.
  • quorum — accept a translation when of trusted dialects endorse the same lens path.
  • merge — union the entries; on collision, fall back to a configured tie-breaker.

See Bundle records into a dialect.

Concept references