Diagrams

Diagrams

  • Docs
  • Guides
  • Nodes
  • GitHub
  • Sponsoring

›Nodes

Getting Started

  • Installation
  • Examples

Guides

  • Diagrams
  • Nodes
  • Clusters
  • Edges

Nodes

  • OnPrem
  • AWS
  • Azure
  • GCP
  • IBM
  • K8S
  • AlibabaCloud
  • OCI
  • OpenStack
  • Firebase
  • DigitalOcean
  • Elastic
  • Outscale
  • Generic
  • Programming
  • Saas
  • C4
  • Custom

C4

C4 Diagrams

C4 is a standardized model to visualize software architecture. You can generate C4 diagrams by using the node and edge classes from the diagrams.c4 package:

from diagrams import Diagram
from diagrams.c4 import Person, Container, Database, System, SystemBoundary, Relationship

graph_attr = {
    "splines": "spline",
}

with Diagram("Container diagram for Internet Banking System", direction="TB", graph_attr=graph_attr):
    customer = Person(
        name="Personal Banking Customer", description="A customer of the bank, with personal bank accounts."
    )

    with SystemBoundary("Internet Banking System"):
        webapp = Container(
            name="Web Application",
            technology="Java and Spring MVC",
            description="Delivers the static content and the Internet banking single page application.",
        )

        spa = Container(
            name="Single-Page Application",
            technology="Javascript and Angular",
            description="Provides all of the Internet banking functionality to customers via their web browser.",
        )

        mobileapp = Container(
            name="Mobile App",
            technology="Xamarin",
            description="Provides a limited subset of the Internet banking functionality to customers via their mobile device.",
        )

        api = Container(
            name="API Application",
            technology="Java and Spring MVC",
            description="Provides Internet banking functionality via a JSON/HTTPS API.",
        )

        database = Database(
            name="Database",
            technology="Oracle Database Schema",
            description="Stores user registration information, hashed authentication credentials, access logs, etc.",
        )

    email = System(name="E-mail System", description="The internal Microsoft Exchange e-mail system.", external=True)

    mainframe = System(
        name="Mainframe Banking System",
        description="Stores all of the core banking information about customers, accounts, transactions, etc.",
        external=True,
    )

    customer >> Relationship("Visits bigbank.com/ib using [HTTPS]") >> webapp
    customer >> Relationship("Views account balances, and makes payments using") >> [spa, mobileapp]
    webapp >> Relationship("Delivers to the customer's web browser") >> spa
    spa >> Relationship("Make API calls to [JSON/HTTPS]") >> api
    mobileapp >> Relationship("Make API calls to [JSON/HTTPS]") >> api

    api >> Relationship("reads from and writes to") >> database
    api >> Relationship("Sends email using [SMTP]") >> email
    api >> Relationship("Makes API calls to [XML/HTTPS]") >> mainframe
    customer << Relationship("Sends e-mails to") << email

It will produce the following diagram:

c4

Last updated on 9/5/2022
← SaasCustom →
  • C4 Diagrams
Diagrams
Docs
Getting StartedGuidesNodes
More
Copyright © 2023 mingrammer