Docs
Relationships

Relationships

Relationships describe the connections and interactions of the elements,
and created with the -> operator:

model {
  customer = actor 'Customer'
  cloud = service 'Cloud'
 
  customer -> cloud
}

Relationship kinds

Relationships can be "kinded":

specification {
  // Define a relationship kind in specifications
  relationship async
}
 
model {
  system1 = system 'System 1'
  system2 = system 'System 2'
 
  system1 -[async]-> system2
}

This allows us to express and add more semantics to the interactions between the elements, for instance, from a technology perspective (REST, GRPC, GraphQL, Sync/Async, etc.) or from a business perspective (delegation, inform, accountability, etc.).
It's up to you to define the relationship kinds that make sense for your context.

Tip:
The relationship kinds allow to customize the styling of the relationships, see styling

Definition examples

Relationships may be nested

model {
  actor customer
  service cloud {
    component backend
    component frontend
 
    frontend -> backend
    customer -> frontend
  }
}

Relationships may have a label (and better to have one)

model {
  actor customer
  service cloud {
    component backend
    component frontend
 
    frontend -> backend 'requests data'
  }
 
  customer -> frontend 'opens in browser'
}

Nested relationships may be "sourceless", then the source is the parent element

specification {
  relationship graphql
}
model {
  customer = actor {    
    -> frontend 'opens in browser' // same as customer -> frontend
  }
  service cloud {
    component backend
    component frontend {
      -[graphql]-> backend 'requests data'  // same as frontend -[graphql]-> backend
    }
  }
 
  // or use 'it' or 'this'
  customer = actor {
    it -> frontend 'opens in browser'
    this -> frontend 'opens in browser'
  }   
 
  -> backend 'requests data' // ⛔️ Error: model can't be a source
}