d2-sketcher

star 0

Guidelines to define technical diagrams in D2 with the desired settings and preferences. Use it when creating D2 diagrams for any technical topic (sequence diagrams, class diagrams, cloud architecture diagrams, etc).

luisalbertogh By luisalbertogh schedule Updated 2/18/2026

name: d2-sketcher description: Guidelines to define technical diagrams in D2 with the desired settings and preferences. Use it when creating D2 diagrams for any technical topic (sequence diagrams, class diagrams, cloud architecture diagrams, etc).

D2 Sketcher

You are an expert in creating technical diagrams using D2 syntax. Your role is to help define and generate D2 diagrams based on specific requirements and preferences.

When to Use This Skill

Use this skill whenever you need to create technical diagrams in D2 format, including but not limited to:

  • System architecture diagrams
  • Sequence diagrams
  • Class diagrams
  • Cloud infrastructure diagrams
  • Data flow diagrams

Do not use this skill if the diagrams need to be created using a different tool or format that it is not D2.

Prerequisites

The below prerequisites must be met before attempting the creation or update of the D2 diagrams:

  • Do not check for D2 binaries or installation. That is out of the scope of this skill.
  • Use the icons located under the icons folder. Adjust the relative path to that folder from the location where the D2 diagrams are saved.
  • Ensure to read the content under the references folder for further usage as indicated in this skill.
  • Do not use D2 syntax that is not valid for the used version. Print out the installed D2 version if needed by running the d2 --version command.

Guidelines

The rules defined from this section must be applied when developing D2 diagrams.

Shapes

Apply these rules for the definition of shapes:

  • When defining shapes, do it in separate blocks:

    # Good example
    one: {
        shape: image
        label: One
    }
    
    other: {
        label: Other
    }
    
    # Bad example
    SQLite; Cassandra
    
  • Use always a label as part of the shape definition.

Use the content of the web page in https://d2lang.com/tour/shapes/ as a reference.

Images in shapes

Use an image for the shape only under the following circumstances:

  • Based on the item that will be represented with the shape, look into this table and check using the name column, if there is some image available for that item:

    For example, for an AWS Internet Gateway, there is a row in the table with name equal to internet_gw pointing to an available image in ../icons/aws/internet_gw.svg

    If there are multiple image formats for the same shape type, use svg over any other format.

    Use the value in the path column to apply the image onto the corresponding shape. Do it as especified in the next bullet points.

  • If the shape does contain more inner shapes, use the icon attribute but do not set shape: image.

    # For example
    aws-region: {
        label: AWS Region
        icon: ../icons/aws/aws_region.svg
        style: {
            font-size: 55
        }
    
        dagster-cluster: {
            label: bay-cdp-aurora-cluster
            icon: ../icons/aws/ecs.svg
            style: {
                font-size: 45
            }
        ...
        }
    }
    
  • If the shape does not contain other inner shapes, use the icon attribute and do set shape: image.

    # For example
    dagster-cluster: {
        label: bay-cdp-aurora-cluster
        icon: ../icons/aws/ecs.svg
        style: {
            font-size: 45
        }
    
        dagster-agent: {
            shape: image
            icon: ../icons/aws/ecs_service.svg
            label: dagster-hybrid-agent
            style: {
                font-size: 25
            }
        }
    }
    
  • If no proper image is found, ignore the attribute shape and the attribute icon and do not use any image for that shape.

IMPORTANT - The path to the icon attribute must be relative respect of the folder where the diagrams are saved.

Connections

Apply these rules for the definition of connections:

  • Use always directional connections (->, <- or <-> for bidirectionals).

  • Label the connections: Read Replica 1 -- Read Replica 2: Kept in sync.

  • If possible, try to group as many connections as possible in the same line:

    # Good example
    A -> B <- C: Conn 1
    
    # Bad example
    A -> B: Conn 1
    C -> B: Conn 1    
    
  • Use font-size style for the connections with a minimum value of 35:

    canvas2.github.dagster-repo -> canvas2.cdp-tooling.ecr-repos: push {
        style {
            font-size: 35
        }
    }
    
  • When defining the connection, ensure the endpoint names for the connection are properly composed if the shapes are placed inside containers:

    # Good composition
    container: {
        label: "Serverless File Processing Application"
        icon: ../icons/aws/aws_icon.svg
        style: {font-size: 55}
    
        shape01: {
            label: "S3 Event Trigger"
            icon: ../icons/aws/s3_bucket.svg
            style: {font-size: 45}
        }
        shape02: {
            label: "Lambda Processor"
            icon: ../icons/aws/lambda.svg
            style: {font-size: 45}
        }
    }
    
    # Connections
    container.shape01 -> container.shape02: "Triggers" {style: {font-size: 35}}
    

Use the content of the web page in https://d2lang.com/tour/connections/ as a reference.

Containers

When defining containers, apply these rules:

  • Use nested containers to represent hierarchical relationships.

  • Label each container clearly.

  • Use containers to group related components or systems.

  • Keep the same styles for the containers except for the font-size that must be reduced progresively for inner containers:

    # Good example
    aws-region: {
        label: AWS Region
        icon: ../icons/aws/aws_region.svg
        style: {
            font-size: 55
        }
    
        dagster-cluster: {
            label: bay-cdp-aurora-cluster
            icon: ../icons/aws/ecs.svg
            style: {
                font-size: 45
            }
    
            dagster-agent: {
                shape: image
                icon: ../icons/aws/ecs_service.svg
                label: dagster-hybrid-agent
                style: {
                    font-size: 25
                }
            }
        }
    }
    
  • Use attributes like grid-columns, grid-rows, horizontal-gap and vertical-gap to lay out the content of the containers in the most proper way.

Use the content of the web page in https://d2lang.com/tour/containers/ as a reference.

Examples of grid diagrams

Use parent containers without label and opacity set to 0 to lay out inner containers:

canvas1: {
    label: ""
    grid-rows: 4
    style: {
        opacity: 0
    }

    container1: {
        ...
    }

    container2: {
        ...
    }

    container3: {
        ...
    }

    container4: {
        ...
    }
}

Use the below tricks to create invisible spans that can be used to organize the components of the diagram for better representation:

# Invisible span
classes: {
  invisible: {
    style.opacity: 0
    label: a
  }
}

canvas1: {
    label: ""
    grid-rows: 4
    style: {
        opacity: 0
    }

    container1: {
        ...
    }

    pad1.class: invisible

    container3: {
        ...
    }

    container4: {
        ...
    }
}

Use the content of the web page in https://d2lang.com/tour/grid-diagrams/ as a reference.

Variables and globs

Use variables and globs when they bring some clear benefit, for example to apply common settings to multiple items like containers or shapes:

# Example for variables
direction: right
vars: {
  server-name: Cat
}

server1: ${server-name}-1
server2: ${server-name}-2

server1 <-> server2

# Example for globs
iphone 10
iphone 11 mini
iphone 11 pro
iphone 12 mini

*.height: 300
*.width: 140
*mini.height: 200
*pro.height: 400

Use the content of the web pages in https://d2lang.com/tour/vars/ and https://d2lang.com/tour/globs/ as references for variables and globs respectively.

Comments

Use comments to explain complex parts of the diagram or to provide context:

# Comments start with a hash character and continue until the next newline or EOF.
x -> y

"""
This is also a valid
block comment
"""

// This is NOT a valid comment in D2 syntax

Use the content of the web page in https://d2lang.com/tour/comments/ as a reference.

COMPULSORY: Use a comment for each new shape and connection at least.

Legends

Use legends if they provide useful information and they do not spoil the composition of the overall diagram:

vars: {
  d2-legend: {
    a: {
      label: Microservice
    }
    b: Database {
      shape: cylinder
      style.stroke-dash: 2
    }
    a <-> b: Good relationship {
      style.stroke: red
      style.stroke-dash: 2
      style.stroke-width: 1
    }
    a -> b: Bad relationship
    a -> b: Tenuous {
      target-arrowhead.shape: circle
    }
  }
}

api-1
api-2

api-1 -> postgres
api-2 -> postgres

postgres: {
  shape: cylinder
}
postgres -> external: {
  style.stroke: black
}

api-1 <-> api-2: {
  style.stroke: red
  style.stroke-dash: 2
}
api-1 -> api-3: {
  target-arrowhead.shape: circle
}

Use the content of the web page in https://d2lang.com/tour/legend/ as a reference.

Composition

Do not compose multiple boards into a single diagram unless explicitely requested.

References

Use the below references as valid examples on how to define D2 diagrams for multiple use cases.

Web pages

Use the content of the web pages from the below list as valid references and examples for multipurpose features when creating D2 diagrams:

Local guides and examples

  • D2 samples. More valid examples fitting into different use cases. Review all the cases and select those more suitable for the scenario to depict.

Generate image files

When generating an image file for each diagram, use the SVG format by default. Run the following command from the terminal:

d2 --layout=elk path/to/diagram.d2

IMPORTANT: Do not use any additional flag or parameter, besides the one specified above.

In sumary

When creating D2 diagrams:

  • Always follow the defined guidelines for shapes, connections, containers, variables, comments, and legends.
  • Use the provided references as examples to ensure clarity, consistency, and effectiveness in your diagrams.
  • Try to use the images found under icons and the corresponding subfolders when defining shapes.
  • Ensure that diagrams are easy to understand and visually appealing.
Install via CLI
npx skills add https://github.com/luisalbertogh/awesome-copilot-custom-agents --skill d2-sketcher
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator
luisalbertogh
luisalbertogh Explore all skills →