diff --git a/bindings/D/README.md b/bindings/D/README.md
new file mode 100644
index 0000000..8d5c393
--- /dev/null
+++ b/bindings/D/README.md
@@ -0,0 +1,5 @@
+### D Language Example
+
+```
+dmd main.d clay.c
+```
diff --git a/bindings/D/clay.c b/bindings/D/clay.c
new file mode 100644
index 0000000..43e8cb5
--- /dev/null
+++ b/bindings/D/clay.c
@@ -0,0 +1,2 @@
+#define CLAY_IMPLEMENTATION
+#include "../../clay.h"
diff --git a/bindings/D/main.d b/bindings/D/main.d
new file mode 100644
index 0000000..5fe6f10
--- /dev/null
+++ b/bindings/D/main.d
@@ -0,0 +1,88 @@
+import clay;
+
+import core.stdc.stdlib;
+
+__gshared:
+
+Clay_LayoutConfig layoutElement = { padding: {5} };
+
+extern(C) void main()
+{
+    ulong totalMemorySize = Clay_MinMemorySize();
+    Clay_Arena clayMemory = {
+        label: str("Clay Memory Arena"),
+        capacity: totalMemorySize,
+        memory: cast(char*)malloc(totalMemorySize)
+    };
+
+    Clay_Initialize(clayMemory, Clay_Dimensions(1024,768));
+    Clay_BeginLayout();
+    if (ClayBegin( Rectangle(color: Clay_Color(255,255,255,0)), Layout(layoutElement)))
+    {   }
+    ClayEnd();
+}
+
+
+// helper functions
+Clay_String str(string it)
+{
+    return Clay_String(cast(int)it.length, it.ptr);
+}
+
+bool ClayBegin(A...)(A configs)
+{
+    Clay__OpenElement();
+    foreach(config; configs)
+    {
+        alias T = typeof(config);
+        static if (is(T == Clay_ElementId))
+        {
+            Clay__AttachId(config);
+        }
+        else static if(is(T == Clay_LayoutConfig*))
+        {
+            Clay__AttachLayoutConfig(config);
+        }
+        else static if(is(T == Clay_ElementConfig))
+        {
+            Clay__AttachElementConfig(config.config, config.type);
+        }
+        else static assert(0, "unsupported " ~ typeof(config).stringof);
+    }
+
+    Clay__ElementPostConfiguration();
+    return true;
+}
+
+void ClayEnd()
+{
+    Clay__CloseElement();
+}
+
+Clay_ElementId Id(string label)
+{
+     return Clay__HashString(str(label), 0, 0);
+}
+
+Clay_LayoutConfig* Layout(lazy Clay_Sizing sizing = Clay_Sizing.init)
+{
+    Clay_LayoutConfig config;
+    config.sizing = sizing;
+    return Clay__StoreLayoutConfig(config);
+}
+
+Clay_LayoutConfig* Layout(Clay_LayoutConfig config)
+{
+    return Clay__StoreLayoutConfig(config);
+}
+
+Clay_ElementConfig Rectangle(lazy Clay_Color color = Clay_Color.init)
+{
+    Clay_RectangleElementConfig config;
+    config.color = color;
+
+    Clay_ElementConfig ret;
+    ret.type = Clay__ElementConfigType.CLAY__ELEMENT_CONFIG_TYPE_RECTANGLE;
+    ret.config.rectangleElementConfig = Clay__StoreRectangleElementConfig(config);
+    return ret;
+}