diff --git a/docs/internal-model.md b/docs/internal-model.md
index 08094a50de..1c4fd4a659 100644
--- a/docs/internal-model.md
+++ b/docs/internal-model.md
@@ -19,9 +19,125 @@ These are the meta models and their meaning:
- **StringModel** represent string values.
- **AnyModel** represent generic values that cannot otherwise be represented by one of the other models.
-
-
-
+
+```mermaid
+---
+title: Meta Model
+---
+classDiagram
+ direction BT
+ class MetaModel {
+ <>
+ String name
+ Any originalInput
+ }
+
+ class TupleValueModel{
+ <>
+ Number index
+ MetaModel value
+ }
+
+ class TupleModel{
+ <>
+ TupleValueModel[] tupleModels
+ }
+
+ class ObjectModel{
+ <>
+ <String, ObjectPropertyModel> properties
+ }
+
+ class ObjectPropertyModel{
+ <>
+ String propertyName
+ Boolean required
+ MetaModel property
+ }
+
+ class ArrayModel{
+ <>
+ MetaModel valueModel
+ }
+
+ class UnionModel{
+ <>
+ MetaModel[] unionModels
+ }
+
+ class EnumValueModel{
+ <>
+ String key
+ Any value
+ }
+
+ class EnumModel{
+ <>
+ EnumValueModel[] values
+ }
+
+ class BooleanModel{
+ <>
+ }
+
+ class StringModel{
+ <>
+ }
+
+ class IntegerModel{
+ <>
+ }
+
+ class FloatModel{
+ <>
+ }
+
+ class AnyModel{
+ <>
+ }
+
+ class ReferencedModel{
+ <>
+ MetaModel referencedModel
+ }
+
+ class DictionaryModel{
+ <>
+ MetaModel keyModel
+ MetaModel valueModel
+ 'unwrap' | 'normanl' serializationType
+ }
+
+
+
+
+
+ TupleValueModel:value --> MetaModel
+ ObjectPropertyModel:property --> MetaModel
+ ArrayModel:valueModel --> MetaModel
+ DictionaryModel:valueModel --> MetaModel
+ DictionaryModel:keyModel --> MetaModel
+
+ TupleModel "1 ... n" *-- TupleValueModel
+ ObjectModel "1 ... n" *-- ObjectPropertyModel
+ UnionModel "1 ... n" *-- "1 ... n" MetaModel
+
+ EnumModel o-- EnumValueModel
+
+ TupleModel --|> MetaModel
+ ObjectModel --|> MetaModel
+ ArrayModel --|> MetaModel
+ UnionModel --|> MetaModel
+ EnumModel --|> MetaModel
+ BooleanModel --|> MetaModel
+ IntegerModel --|> MetaModel
+ StringModel --|> MetaModel
+ FloatModel --|> MetaModel
+ AnyModel --|> MetaModel
+ ReferencedModel --|> MetaModel
+ DictionaryModel --|> MetaModel
+
+```
## The Constrained Meta Model
@@ -35,6 +151,128 @@ How and what are constrained?
The answer to this question is not straightforward, cause each output has unique constraints that the meta models must adhere to. You can read more about [the constraint behavior here](./constraints.md).
-
-
-
+```mermaid
+---
+title: Constrained Meta Model
+---
+classDiagram
+ direction RL
+ class MetaModel {
+ <>
+ String name
+ Any originalInput
+ }
+
+ class ConstrainedMetaModel {
+ <>
+ String type
+ }
+
+ class ConstrainedTupleValueModel{
+ <>
+ Number index
+ ConstrainedMetaModel value
+ }
+
+ class ConstrainedTupleModel{
+ <>
+ ConstrainedTupleValueModel[] tupleModels
+ }
+
+ class ConstrainedObjectModel{
+ <>
+ <String, ObjectPropertyModel> properties
+ }
+
+ class ConstrainedObjectPropertyModel{
+ <>
+ String propertyName
+ Boolean required
+ ConstrainedMetaModel property
+ }
+
+ class ConstrainedArrayModel{
+ <>
+ ConstrainedMetaModel valueModel
+ }
+
+ class ConstrainedUnionModel{
+ <>
+ ConstrainedMetaModel[] unionModels
+ }
+
+ class ConstrainedEnumValueModel{
+ <>
+ String key
+ Any value
+ }
+
+ class ConstrainedEnumModel{
+ <>
+ EnumValueModel[] values
+ }
+
+ class ConstrainedBooleanModel{
+ <>
+ }
+
+ class ConstrainedStringModel{
+ <>
+ }
+
+ class ConstrainedIntegerModel{
+ <>
+ }
+
+ class ConstrainedFloatModel{
+ <>
+ }
+
+ class ConstrainedAnyModel{
+ <>
+ }
+
+ class ConstrainedReferencedModel{
+ <>
+ ConstrainedMetaModel referencedModel
+ }
+
+ class ConstrainedDictionaryModel{
+ <>
+ ConstrainedMetaModel keyModel
+ ConstrainedMetaModel valueModel
+ 'unwrap' | 'normanl' serializationType
+ }
+
+
+
+
+
+ ConstrainedTupleValueModel:value --> ConstrainedMetaModel
+ ConstrainedObjectPropertyModel:property --> ConstrainedMetaModel
+ ConstrainedArrayModel:valueModel --> ConstrainedMetaModel
+ ConstrainedDictionaryModel:valueModel --> ConstrainedMetaModel
+ ConstrainedDictionaryModel:keyModel --> ConstrainedMetaModel
+
+ ConstrainedTupleModel "1 ... n" *-- ConstrainedTupleValueModel
+ ConstrainedObjectModel "1 ... n" *-- ConstrainedObjectPropertyModel
+ ConstrainedUnionModel "1 ... n" *-- "1 ... n" ConstrainedMetaModel
+
+ ConstrainedEnumModel o-- ConstrainedEnumValueModel
+
+ ConstrainedTupleModel --|> ConstrainedMetaModel
+ ConstrainedObjectModel --|> ConstrainedMetaModel
+ ConstrainedArrayModel --|> ConstrainedMetaModel
+ ConstrainedUnionModel --|> ConstrainedMetaModel
+ ConstrainedEnumModel --|> ConstrainedMetaModel
+ ConstrainedBooleanModel --|> ConstrainedMetaModel
+ ConstrainedIntegerModel --|> ConstrainedMetaModel
+ ConstrainedStringModel --|> ConstrainedMetaModel
+ ConstrainedFloatModel --|> ConstrainedMetaModel
+ ConstrainedAnyModel --|> ConstrainedMetaModel
+ ConstrainedReferencedModel --|> ConstrainedMetaModel
+ ConstrainedDictionaryModel --|> ConstrainedMetaModel
+ ConstrainedMetaModel --|> MetaModel
+
+
+```
\ No newline at end of file