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:

ConstraintDescriptionExample
Allowed source typesWhich entity types can be the sourceCharacter, Organization
Allowed target typesWhich entity types can be the targetLocation, Organization
Max concurrentMaximum active relationships of this type per entity1 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:

TypeDirectionCategoryNotes
Parent of / Child ofDirectedKinshipTemporal, has subtypes
Spouse ofSymmetricKinshipTemporal, has subtypes
Member of / Has memberDirectedSocialOrganization membership
Controls / Controlled byDirectedPoliticalTerritorial/political control
Allied withSymmetricPoliticalOrganization alliances
Hostile toSymmetricPoliticalAntagonistic relationships
Located in / ContainsDirectedSpatialPhysical containment
Owns / Owned byDirectedOwnershipPossession
Worships / Worshipped byDirectedReligiousDevotion
Created / Created byDirectedOriginCrafting, founding

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