diff --git a/docs/Project.toml b/docs/Project.toml
index d6f96202655a1d65458191247d77a46cd050f2ae..a54a4e2a33429ae2a93879163cfdf41be74a59fb 100644
--- a/docs/Project.toml
+++ b/docs/Project.toml
@@ -1,4 +1,5 @@
 [deps]
+AbstractTrees = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
 CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
 Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
 MRIBuilder = "691e6122-0b62-4932-92e7-e4ff0ddaf3a0"
diff --git a/docs/src/api.md b/docs/src/api.md
index e8c124c8c85f7b4ee5796a6a0df612c36b5d5fa1..04074880ed4cf10e0d60fb16bfafb752442108ad 100644
--- a/docs/src/api.md
+++ b/docs/src/api.md
@@ -3,6 +3,19 @@ CollapsedDocStrings = true
 ```
 
 # MRIBuilder.jl internal API
+## Type diagram
+```@eval
+import MRIBuilder.Variables: AbstractBlock
+import InteractiveUtils: subtypes
+using AbstractTrees
+import Markdown
+AbstractTrees.children(x::Type) = subtypes(x)
+io = IOBuffer()
+print_tree(io, AbstractBlock)
+seek(io, 0)
+Markdown.parse("```\n" * read(io, String) * "```")
+```
+
 ## Sequence components
 ```@autodocs
 Modules = [