diff --git a/tier4_system_msgs/README.md b/tier4_system_msgs/README.md
new file mode 100644
index 0000000..87a5947
--- /dev/null
+++ b/tier4_system_msgs/README.md
@@ -0,0 +1,14 @@
+# tier4_system_msgs
+
+## Diagnostic graph messages
+
+See [this page](./doc/diagnostic-graph.md) for the following diagnostic graph messages.
+
+- DiagGraphStatus
+- DiagGraphStruct
+- DiagLeafStatus
+- DiagLeafStruct
+- DiagLinkStatus
+- DiagLinkStruct
+- DiagNodeStatus
+- DiagNodeStruct
diff --git a/tier4_system_msgs/doc/diagnostic-graph-data.drawio.svg b/tier4_system_msgs/doc/diagnostic-graph-data.drawio.svg
new file mode 100644
index 0000000..736c929
--- /dev/null
+++ b/tier4_system_msgs/doc/diagnostic-graph-data.drawio.svg
@@ -0,0 +1,1465 @@
+
\ No newline at end of file
diff --git a/tier4_system_msgs/doc/diagnostic-graph-tree.drawio.svg b/tier4_system_msgs/doc/diagnostic-graph-tree.drawio.svg
new file mode 100644
index 0000000..973c52e
--- /dev/null
+++ b/tier4_system_msgs/doc/diagnostic-graph-tree.drawio.svg
@@ -0,0 +1,625 @@
+
\ No newline at end of file
diff --git a/tier4_system_msgs/doc/diagnostic-graph.md b/tier4_system_msgs/doc/diagnostic-graph.md
new file mode 100644
index 0000000..9deadca
--- /dev/null
+++ b/tier4_system_msgs/doc/diagnostic-graph.md
@@ -0,0 +1,14 @@
+# Diagnostic graph messages
+
+These are messages that represent aggregated diagnostic graphs.
+Diagnostic graph structure is static, so it is published only once as the DiagGraphStruct.
+And diagnostic status that changes dynamically is periodically published as the DiagGraphStatus.
+The DiagGraphStruct and DiagGraphStatus have the list of nodes and links, and their indices correspond.
+
+## Sample graph
+
+![diagnostic-graph-tree](./diagnostic-graph-tree.drawio.svg)
+
+## Sample message
+
+![diagnostic-graph-data](./diagnostic-graph-data.drawio.svg)