Skip to content

Understanding Relationships

Relationships are directed edges in the knowledge graph that connect entities. Every relationship has a type, a direction, and optional temporal, spatial, and extended property context.

All relationships are directed — they go from a source entity to a target entity. Each relationship type defines two labels:

  • Forward label: “Parent of” (source → target)
  • Reverse label: “Child of” (target ← source)

When you view an entity’s relationships, you see both outgoing relationships (where this entity is the source) and incoming relationships (where this entity is the target), each displayed with the appropriate label.

Each relationship type defines rules about which entities it can connect:

Constraint Description Example
Allowed source types Which entity types can be the source Character, Organization
Allowed target types Which entity types can be the target Location, Organization
Max concurrent Maximum active relationships of this type per entity 1 for “Lives in” (only one home), null for unlimited

These constraints are enforced when creating relationships — the UI only offers valid relationship types for the entity pair you’re connecting.

Relationships can optionally have a temporal dimension:

  • valid_from — when the relationship started (absolute timestamp)
  • valid_to — when the relationship ended (null if still active)

This is controlled by the has_temporal_context flag on the relationship type. When enabled, the graph’s temporal controls can filter relationships by time period — showing you the state of your world at any point in its history.

For example, a “Member of” relationship between a character and a guild might be valid from Year 100 to Year 115, indicating 15 years of membership.

Relationships can also carry spatial context when the has_spatial_context flag is enabled:

  • Location — a primary location associated with the relationship
  • Marker override — a custom map position
  • Additional locations — multi-point references (e.g. for trade routes)

Relationship types can define custom fields beyond the standard attributes. These use the same field definition system as entity types — text, numbers, selects, and more.

For example, a “Parent of” relationship type might have an extended property for the subtype of parenthood (biological, adoptive, step, foster, guardian).

Relationship types can have subtypes for finer categorisation. Each subtype has:

  • Value — internal identifier (e.g. “biological”)
  • Label — display name (e.g. “Biological”)
  • Description — explanation (e.g. “Birth parent sharing genetic material”)
  • Icon — visual indicator

For instance, the “Parent of” system type includes subtypes: biological, adoptive, step, foster, guardian, divine birth, surrogate, and mentor.

MythTapestry seeds a set of default relationship types that cover common patterns:

Type Direction Category Notes
Parent of / Child of Directed Kinship Temporal, has subtypes
Spouse of Symmetric Kinship Temporal, has subtypes
Member of / Has member Directed Social Organization membership
Controls / Controlled by Directed Political Territorial/political control
Allied with Symmetric Political Organization alliances
Hostile to Symmetric Political Antagonistic relationships
Located in / Contains Directed Spatial Physical containment
Owns / Owned by Directed Ownership Possession
Worships / Worshipped by Directed Religious Devotion
Created / Created by Directed Origin Crafting, founding

You can create additional relationship types in Management > Relationship Types.