diff --git a/rocolib/builders/ESP32StackBoatBuilder.py b/rocolib/builders/ESP32StackBoatBuilder.py
new file mode 100644
index 0000000000000000000000000000000000000000..4d0671696063f4b668ad4ad24449083c5113cd1e
--- /dev/null
+++ b/rocolib/builders/ESP32StackBoatBuilder.py
@@ -0,0 +1,28 @@
+from rocolib.api.components.Component import Component
+
+#ESP3 STACK WITH PWM SERVO FEATHERWING
+c = Component()
+
+c.addSubcomponent("stack", "SubESP32Stack")
+
+c.addParameter("brains", "esp32stack", paramType="dimension")
+c.addParameter("boat.depth", 20, paramType="length")
+
+for i in range(4):
+    c.addSubcomponent("support%d" %i, "Rectangle")
+    c.addConstraint(("support%d" %i, "w"), "brains", "getDim(x, 'width')/2.")
+    c.addConstraint(("support%d" %i, "l"), "boat.depth")
+
+for i in range(2):
+    c.addSubcomponent("split%d" %i, "SplitEdge")
+    c.addConstraint(("split%d" %i, "toplength"), "brains", '(getDim(x, "width"),)')
+    c.addConstraint(("split%d" % i, "botlength"), "brains", '(getDim(x, "width")/2.,getDim(x, "width")/2.)')
+
+c.addConnection(("stack", "topedge2"), ("split0", "topedge0"))
+c.addConnection(("stack", "botedge2"), ("split1", "topedge0"))
+c.addConnection(("split0", "botedge0"), ("support0", "l"), angle=90)
+c.addConnection(("split0", "botedge1"), ("support1", "l"), angle=90)
+c.addConnection(("split1", "botedge0"), ("support2", "l"), angle=90)
+c.addConnection(("split1", "botedge1"), ("support3", "l"), angle=90)
+
+c.toLibrary("ESP32StackBoat")
\ No newline at end of file
diff --git a/rocolib/builders/SubESP32StackBuilder.py b/rocolib/builders/SubESP32StackBuilder.py
new file mode 100644
index 0000000000000000000000000000000000000000..ad23ad15607a864ed40843fb2993704f2bf854e6
--- /dev/null
+++ b/rocolib/builders/SubESP32StackBuilder.py
@@ -0,0 +1,80 @@
+from rocolib.api.components.Component import Component
+from rocolib.api.Function import Function
+
+#ESP3 STACK WITH PWM SERVO FEATHERWING
+c = Component()
+
+c.addSubcomponent("holder", "SimpleRectBeam")
+
+#Dimensions of the ESP32 Stack
+c.addParameter("length", 51, paramType="length")
+
+c.addParameter("brains", "esp32stack", paramType="dimension")
+c.addConstraint(("holder", "length"), "length")
+c.addConstraint(("holder", "depth"), "brains", "getDim(x, 'height')")
+c.addConstraint(("holder", "width"), "brains", "getDim(x, 'width')")
+
+#This parameter will change when the dimensions of the car or vehicle is changed
+#so that it would not affect the ESP32 stack holder
+c.addSubcomponent("header", "Header")
+
+def getBrainParameter(p):
+  return "brain", "getDim(x, '%s')" % p
+
+#OLED at the top
+c.addConstraint(("header", "nrows"), "brains", "getDim(x, 'nrows')")
+c.addConstraint(("header", "ncols"), "brains", "getDim(x, 'ncols')")
+c.addConstraint(("header", "rowsep"), "brains", "getDim(x, 'rowsep')")
+c.addConstraint(("header", "colsep"), "brains", "getDim(x, 'colsep')")
+
+#Holes for servo and powersupply
+c.addParameter("dy1", 18, parameterType="length")
+for i in range(2):
+    c.addSubcomponent("servohole%d" %i, "Cutout")
+    c.addConstraint(("servohole%d" %i, "dy"), "dy1", "x+2")
+    c.addConstraint(("servohole%d" %i, "dx"), "dy1", "7")
+
+for i in range(4):
+    c.addSubcomponent("pinhole%d" % i, "Cutout")
+
+c.addConstraint(("pinhole0", "dy"), "dy1", "41")
+c.addConstraint(("pinhole0", "dx"), "dy1", "1.2")
+c.addConstraint(("pinhole1", "dy"), "dy1", "30")
+c.addConstraint(("pinhole1", "dx"), "dy1", "1.2")
+
+c.addConstraint(("pinhole2", "dy"), "dy1", "41")
+c.addConstraint(("pinhole2", "dx"), "dy1", "1.2")
+c.addConstraint(("pinhole3", "dy"), "dy1", "30")
+c.addConstraint(("pinhole3", "dx"), "dy1", "1.2")
+
+c.addConnection(("holder", "face0"),
+                   ("pinhole0", "decoration"),
+                   mode="hole", offset=Function(params=("length"), fnstring="(-10, 0)"))
+
+c.addConnection(("holder", "face0"),
+                   ("pinhole1", "decoration"),
+                   mode="hole", offset=Function(params=("length"), fnstring="(10, -5)"))
+
+c.addConnection(("holder", "face2"),
+                   ("pinhole2", "decoration"),
+                   mode="hole", offset=Function(params=("length"), fnstring="(10, 0)"))
+
+c.addConnection(("holder", "face2"),
+                   ("pinhole3", "decoration"),
+                   mode="hole", offset=Function(params=("length"), fnstring="(-10, -5)"))
+
+c.addConnection(("holder", "face3"),
+                   ("servohole1", "decoration"),
+                   mode="hole", rotate=True, offset=Function(params=("length"), fnstring="(-5, -20)"))
+
+c.addSubcomponent("powerhole", "Cutout")
+c.addConstraint(("powerhole", "dy"), "dy1", "x+12")
+c.addConstraint(("powerhole", "dx"), "dy1", "x")
+
+c.addConnection(("holder", "face1"),
+                   ("powerhole", "decoration"),
+                   mode="hole", rotate=True, offset=Function(params=("length"), fnstring="(-7, 12)"))
+
+c.inheritAllInterfaces("holder", prefix=None)
+
+c.toLibrary("SubESP32Stack")
\ No newline at end of file
diff --git a/rocolib/library/ESP32StackBoat.yaml b/rocolib/library/ESP32StackBoat.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..34de9b3d2446c5b514f8d4584ab5f6f2b9983b3e
--- /dev/null
+++ b/rocolib/library/ESP32StackBoat.yaml
@@ -0,0 +1,111 @@
+connections:
+  connection0:
+  - - stack
+    - topedge2
+  - - split0
+    - topedge0
+  - {}
+  connection1:
+  - - stack
+    - botedge2
+  - - split1
+    - topedge0
+  - {}
+  connection2:
+  - - split0
+    - botedge0
+  - - support0
+    - l
+  - angle: 90
+  connection3:
+  - - split0
+    - botedge1
+  - - support1
+    - l
+  - angle: 90
+  connection4:
+  - - split1
+    - botedge0
+  - - support2
+    - l
+  - angle: 90
+  connection5:
+  - - split1
+    - botedge1
+  - - support3
+    - l
+  - angle: 90
+interfaces: {}
+parameters:
+  boat.depth:
+    defaultValue: 20
+    spec:
+      minValue: 0
+      units: mm
+      valueType: (float, int)
+  brains:
+    defaultValue: esp32stack
+    spec:
+      valueType: str
+source: ..\builders\ESP32StackBoatBuilder.py
+subcomponents:
+  split0:
+    classname: SplitEdge
+    kwargs: {}
+    parameters:
+      botlength:
+        function: (getDim(x, "width")/2.,getDim(x, "width")/2.)
+        parameter: brains
+      toplength:
+        function: (getDim(x, "width"),)
+        parameter: brains
+  split1:
+    classname: SplitEdge
+    kwargs: {}
+    parameters:
+      botlength:
+        function: (getDim(x, "width")/2.,getDim(x, "width")/2.)
+        parameter: brains
+      toplength:
+        function: (getDim(x, "width"),)
+        parameter: brains
+  stack:
+    classname: SubESP32Stack
+    kwargs: {}
+    parameters: {}
+  support0:
+    classname: Rectangle
+    kwargs: {}
+    parameters:
+      l:
+        parameter: boat.depth
+      w:
+        function: getDim(x, 'width')/2.
+        parameter: brains
+  support1:
+    classname: Rectangle
+    kwargs: {}
+    parameters:
+      l:
+        parameter: boat.depth
+      w:
+        function: getDim(x, 'width')/2.
+        parameter: brains
+  support2:
+    classname: Rectangle
+    kwargs: {}
+    parameters:
+      l:
+        parameter: boat.depth
+      w:
+        function: getDim(x, 'width')/2.
+        parameter: brains
+  support3:
+    classname: Rectangle
+    kwargs: {}
+    parameters:
+      l:
+        parameter: boat.depth
+      w:
+        function: getDim(x, 'width')/2.
+        parameter: brains
diff --git a/rocolib/library/RegularNGon.py b/rocolib/library/RegularNGon.py
index 6970987ca230c29a02af07eb7dad208e81ea57d8..4185181c38f2faf127e80ec0d6fdd18a1308d23a 100644
--- a/rocolib/library/RegularNGon.py
+++ b/rocolib/library/RegularNGon.py
@@ -24,3 +24,4 @@ class RegularNGon(FoldedComponent):
 
 if __name__ == "__main__":
     RegularNGon.test()
+
diff --git a/rocolib/library/SubESP32Stack.yaml b/rocolib/library/SubESP32Stack.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..2c690e6ffc5998598916a66a3399a987adc25e94
--- /dev/null
+++ b/rocolib/library/SubESP32Stack.yaml
@@ -0,0 +1,215 @@
+connections:
+  connection0:
+  - &id001
+    - holder
+    - face0
+  - - pinhole0
+    - decoration
+  - mode: hole
+    offset:
+      function: (-10, 0)
+      parameter: length
+  connection1:
+  - *id001
+  - - pinhole1
+    - decoration
+  - mode: hole
+    offset:
+      function: (10, -5)
+      parameter: length
+  connection2:
+  - &id002
+    - holder
+    - face2
+  - - pinhole2
+    - decoration
+  - mode: hole
+    offset:
+      function: (10, 0)
+      parameter: length
+  connection3:
+  - *id002
+  - - pinhole3
+    - decoration
+  - mode: hole
+    offset:
+      function: (-10, -5)
+      parameter: length
+  connection4:
+  - - holder
+    - face3
+  - - servohole1
+    - decoration
+  - mode: hole
+    offset:
+      function: (-5, -20)
+      parameter: length
+    rotate: true
+  connection5:
+  - - holder
+    - face1
+  - - powerhole
+    - decoration
+  - mode: hole
+    offset:
+      function: (-7, 12)
+      parameter: length
+    rotate: true
+interfaces:
+  botedge0:
+    interface: botedge0
+    subcomponent: holder
+  botedge1:
+    interface: botedge1
+    subcomponent: holder
+  botedge2:
+    interface: botedge2
+    subcomponent: holder
+  botedge3:
+    interface: botedge3
+    subcomponent: holder
+  face0:
+    interface: face0
+    subcomponent: holder
+  face1:
+    interface: face1
+    subcomponent: holder
+  face2:
+    interface: face2
+    subcomponent: holder
+  face3:
+    interface: face3
+    subcomponent: holder
+  slotedge:
+    interface: slotedge
+    subcomponent: holder
+  tabedge:
+    interface: tabedge
+    subcomponent: holder
+  topedge0:
+    interface: topedge0
+    subcomponent: holder
+  topedge1:
+    interface: topedge1
+    subcomponent: holder
+  topedge2:
+    interface: topedge2
+    subcomponent: holder
+  topedge3:
+    interface: topedge3
+    subcomponent: holder
+parameters:
+  brains:
+    defaultValue: esp32stack
+    spec:
+      valueType: str
+  dy1:
+    defaultValue: 18
+    spec:
+      parameterType: length
+  length:
+    defaultValue: 51
+    spec:
+      minValue: 0
+      units: mm
+      valueType: (float, int)
+source: ..\builders\SubESP32StackBuilder.py
+subcomponents:
+  header:
+    classname: Header
+    kwargs: {}
+    parameters:
+      colsep:
+        function: getDim(x, 'colsep')
+        parameter: brains
+      ncols:
+        function: getDim(x, 'ncols')
+        parameter: brains
+      nrows:
+        function: getDim(x, 'nrows')
+        parameter: brains
+      rowsep:
+        function: getDim(x, 'rowsep')
+        parameter: brains
+  holder:
+    classname: SimpleRectBeam
+    kwargs: {}
+    parameters:
+      depth:
+        function: getDim(x, 'height')
+        parameter: brains
+      length:
+        parameter: length
+      width:
+        function: getDim(x, 'width')
+        parameter: brains
+  pinhole0:
+    classname: Cutout
+    kwargs: {}
+    parameters:
+      dx:
+        function: '1.2'
+        parameter: dy1
+      dy:
+        function: '41'
+        parameter: dy1
+  pinhole1:
+    classname: Cutout
+    kwargs: {}
+    parameters:
+      dx:
+        function: '1.2'
+        parameter: dy1
+      dy:
+        function: '30'
+        parameter: dy1
+  pinhole2:
+    classname: Cutout
+    kwargs: {}
+    parameters:
+      dx:
+        function: '1.2'
+        parameter: dy1
+      dy:
+        function: '41'
+        parameter: dy1
+  pinhole3:
+    classname: Cutout
+    kwargs: {}
+    parameters:
+      dx:
+        function: '1.2'
+        parameter: dy1
+      dy:
+        function: '30'
+        parameter: dy1
+  powerhole:
+    classname: Cutout
+    kwargs: {}
+    parameters:
+      dx:
+        function: x
+        parameter: dy1
+      dy:
+        function: x+12
+        parameter: dy1
+  servohole0:
+    classname: Cutout
+    kwargs: {}
+    parameters:
+      dx:
+        function: '7'
+        parameter: dy1
+      dy:
+        function: x+2
+        parameter: dy1
+  servohole1:
+    classname: Cutout
+    kwargs: {}
+    parameters:
+      dx:
+        function: '7'
+        parameter: dy1
+      dy:
+        function: x+2
+        parameter: dy1