Relationships

Projects rarely stand alone. Relationships record how they relate, so you can see a service's upstream and downstream at a glance, and reason about the blast radius of a change.

Relation types

Each relation is a directed edge from one project to another:

  • Depends on: this project needs the other to work. The reverse reads as "used by".
  • Part of: this project is a component of the other ("contains" in reverse).
  • Related to: a looser association, symmetric in meaning.

Add a relation

On a project, open Relationships (owner or admin). Under Outgoing, pick a relation type and a target project, then add it. It shows up immediately as an outgoing edge here and as an incoming edge on the target project. Either project's owners or admins can remove the edge.

Every member can read a project's relationships; only owners and admins change them.

Over the API

Shell
# Add: this project depends on "ledger"
curl -X POST https://api.flagon.io/v1/orgs/{org}/projects/{key}/relations \
  -H "Authorization: Bearer $FLAGON_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "type": "depends_on", "targetKey": "ledger" }'

# List both directions
curl https://api.flagon.io/v1/orgs/{org}/projects/{key}/relations \
  -H "Authorization: Bearer $FLAGON_TOKEN"

The list response has outgoing and incoming arrays; each entry names the other project and the relation type. Delete an edge by its id with DELETE …/relations/{relationId}.

Coming soon

Relations are modeled to point at other catalog entities, not just projects, so they will extend to packages and more without breaking existing edges.