Skip to content
🤷

Forgive us! These docs are a work in progress. Some pages may be incomplete or describe features that aren't quite finished yet. Farkitect is in early development and we don't recommend using it for real work just yet. Feel free to explore — just be aware that things are still being built.

Relationships and Constraints

In many drawing tools, a line between two boxes is just a line — a visual connector with no meaning. In Farkitect, relationships are first-class model elements with their own types, properties, and rules.

A relationship in Farkitect is a model element, just like any other. It has:

  • A name — descriptive label (e.g., “FQ Vessels serves Fleet Dashboard”)
  • A classifier — the M2 relationship type it’s an instance of (e.g., “Serving”)
  • A source and target — the two elements it connects
  • Properties — typed fields defined by the M2 relationship type (e.g., “Service Level”)
  • A presence in the Explorer — relationships appear in the tree as children of their parent package

This means relationships are:

  • Queryable — you can filter, catalog, and export them
  • Persistent — they exist in the model independently of any diagram
  • Typed — the M2 type determines their notation, constraints, and properties

On a diagram, relationships render as edges connecting two nodes. But the edge is a visual representation — the relationship itself lives in the model.

At the M2 level, relationship types define:

AspectWhat it controls
NotationLine style (solid/dashed/dotted), markers (arrows), colour
VerbsSource-to-target and target-to-source descriptions (“serves” / “is served by”)
ConstraintsWhich element type combinations are valid
PropertiesTyped fields that instances carry
MultiplicitiesWhether to show cardinality labels on diagram edges

Some metamodels define many relationship types (ArchiMate has 11), others just a few. The number and specificity of relationship types depends on how precisely the metamodel wants to model connections.

Constraints are the mechanism that gives relationships structural meaning. A pair-wise constraint says: “This relationship type is only valid between these specific source and target element types.”

For example, in the ArchiMate metamodel:

  • A Serving relationship is valid from an Application Component to an Application Service — but not between two Business Actors
  • A Flow relationship is valid between Application Components — but not from a Business Actor to a Technology Node

Constraints are defined as valid pairs: a list of (source type, target type) combinations. When a user tries to draw a relationship on the Canvas, Farkitect checks the constraints and only allows valid combinations.

Without constraints, any relationship type could connect anything to anything. This leads to models that look structured but are actually meaningless — like a sentence with correct grammar but no sense.

Constraints enforce the structural rules of your modelling language. They prevent:

  • Nonsensical connections (a person doesn’t “serve” another person in an ArchiMate sense)
  • Accidental misuse (selecting the wrong relationship type from the picker)
  • Inconsistency (different modellers using different conventions)

Not all relationship types need constraints. A general-purpose Association relationship might intentionally allow any source/target combination — it’s a way of saying “these two things are related” without specifying how. The metamodel designer decides.

Every relationship has a source and a target — a directionality that gives the connection meaning:

  • The source is where you start drawing on the Canvas
  • The target is where you end
  • The source-to-target verb describes the forward direction (“serves”, “manages”, “belongs to”)
  • The target-to-source verb describes the reverse (“is served by”, “is managed by”, “has member”)

Some relationship types are visually directed (arrow at the target end). Others are undirected (no markers on either end). The directionality is semantic — it affects which end the constraint checks apply to — regardless of whether there’s a visual arrow.

A relationship can appear on multiple diagrams — just like an element. If FQ Vessels serves Fleet Dashboard, that relationship might appear on:

  • An Application Cooperation diagram
  • A detailed FQ Vessels internal view
  • A dashboard architecture diagram

It’s the same model relationship rendered in three different visual contexts. Removing the edge from one diagram doesn’t delete the relationship — it just removes it from that view.

To delete a relationship from the model entirely, delete it from the Explorer or use Ctrl+Delete / Cmd+Delete on the Canvas.