Skip to content

C4 — Containers

A container is something you can deploy or run: an application, a datastore, a queue. Replace every TBD once an ADR chooses the technology. Do not invent containers here before that decision.

C4Container
  title Containers for [System Name]

  Person(user, "User")

  System_Boundary(system, "[System Name]") {
    Container(client, "Client", "TBD", "UI used by the user")
    Container(api, "Application", "TBD", "Domain behavior and APIs")
    ContainerDb(db, "Database", "TBD", "Persistent state")
  }

  System_Ext(external, "External system")

  Rel(user, client, "Uses")
  Rel(client, api, "Calls")
  Rel(api, db, "Reads and writes")
  Rel(api, external, "Integrates with")
---
config:
  layout: elk
---
flowchart TB
  user["User"]

  subgraph system["[System Name]"]
    client["Client (TBD)"]
    api["Application (TBD)"]
    db[("Database (TBD)")]
  end

  external["External system"]

  user --> client --> api
  api --> db
  api --> external