diff --git a/dev/defs/artboard.json b/dev/defs/artboard.json
index 05782ba..935d8d0 100644
--- a/dev/defs/artboard.json
+++ b/dev/defs/artboard.json
@@ -79,6 +79,17 @@
       "description": "Id of the last open animation.",
       "runtime": false,
       "coop": false
+    },
+    "defaultStateMachineId": {
+      "type": "Id",
+      "typeRuntime": "uint",
+      "initialValue": "Core.missingId",
+      "initialValueRuntime": "-1",
+      "key": {
+        "int": 236,
+        "string": "defaultStateMachineId"
+      },
+      "description": "The default StateMachine attached to this artboard automatically when it is initialized."
     }
   }
 }
\ No newline at end of file
diff --git a/include/rive/artboard.hpp b/include/rive/artboard.hpp
index 68effa7..3c52a68 100644
--- a/include/rive/artboard.hpp
+++ b/include/rive/artboard.hpp
@@ -68,7 +68,6 @@
 
         Core* resolve(uint32_t id) const override;
 
-
         /// Find the id of a component in the artboard the object in the artboard. The artboard
         /// itself has id 0 so we use that as a flag for not found.
         uint32_t idOf(Core* object) const;
@@ -129,6 +128,10 @@
         StateMachine* stateMachine(const std::string& name) const;
         StateMachine* stateMachine(size_t index) const;
 
+        /// When provided, the designer has specified that this artboard should
+        /// always autoplay this StateMachine.
+        StateMachine* defaultStateMachine() const;
+
         /// Make an instance of this artboard, must be explictly deleted when no
         /// longer needed.
         // Deprecated...
diff --git a/include/rive/generated/artboard_base.hpp b/include/rive/generated/artboard_base.hpp
index 786b5df..f548975 100644
--- a/include/rive/generated/artboard_base.hpp
+++ b/include/rive/generated/artboard_base.hpp
@@ -2,6 +2,7 @@
 #define _RIVE_ARTBOARD_BASE_HPP_
 #include "rive/core/field_types/core_bool_type.hpp"
 #include "rive/core/field_types/core_double_type.hpp"
+#include "rive/core/field_types/core_uint_type.hpp"
 #include "rive/world_transform_component.hpp"
 namespace rive {
     class ArtboardBase : public WorldTransformComponent {
@@ -34,6 +35,7 @@
         static const uint16_t yPropertyKey = 10;
         static const uint16_t originXPropertyKey = 11;
         static const uint16_t originYPropertyKey = 12;
+        static const uint16_t defaultStateMachineIdPropertyKey = 236;
 
     private:
         bool m_Clip = true;
@@ -43,6 +45,7 @@
         float m_Y = 0.0f;
         float m_OriginX = 0.0f;
         float m_OriginY = 0.0f;
+        uint32_t m_DefaultStateMachineId = -1;
 
     public:
         inline bool clip() const { return m_Clip; }
@@ -108,6 +111,15 @@
             originYChanged();
         }
 
+        inline uint32_t defaultStateMachineId() const { return m_DefaultStateMachineId; }
+        void defaultStateMachineId(uint32_t value) {
+            if (m_DefaultStateMachineId == value) {
+                return;
+            }
+            m_DefaultStateMachineId = value;
+            defaultStateMachineIdChanged();
+        }
+
         Core* clone() const override;
         void copy(const ArtboardBase& object) {
             m_Clip = object.m_Clip;
@@ -117,6 +129,7 @@
             m_Y = object.m_Y;
             m_OriginX = object.m_OriginX;
             m_OriginY = object.m_OriginY;
+            m_DefaultStateMachineId = object.m_DefaultStateMachineId;
             WorldTransformComponent::copy(object);
         }
 
@@ -143,6 +156,9 @@
                 case originYPropertyKey:
                     m_OriginY = CoreDoubleType::deserialize(reader);
                     return true;
+                case defaultStateMachineIdPropertyKey:
+                    m_DefaultStateMachineId = CoreUintType::deserialize(reader);
+                    return true;
             }
             return WorldTransformComponent::deserialize(propertyKey, reader);
         }
@@ -155,6 +171,7 @@
         virtual void yChanged() {}
         virtual void originXChanged() {}
         virtual void originYChanged() {}
+        virtual void defaultStateMachineIdChanged() {}
     };
 } // namespace rive
 
diff --git a/include/rive/generated/core_registry.hpp b/include/rive/generated/core_registry.hpp
index 918498f..bf06626 100644
--- a/include/rive/generated/core_registry.hpp
+++ b/include/rive/generated/core_registry.hpp
@@ -439,6 +439,9 @@
                 case DrawRulesBase::drawTargetIdPropertyKey:
                     object->as<DrawRulesBase>()->drawTargetId(value);
                     break;
+                case ArtboardBase::defaultStateMachineIdPropertyKey:
+                    object->as<ArtboardBase>()->defaultStateMachineId(value);
+                    break;
                 case WeightBase::valuesPropertyKey:
                     object->as<WeightBase>()->values(value);
                     break;
@@ -905,6 +908,8 @@
                     return object->as<ImageBase>()->assetId();
                 case DrawRulesBase::drawTargetIdPropertyKey:
                     return object->as<DrawRulesBase>()->drawTargetId();
+                case ArtboardBase::defaultStateMachineIdPropertyKey:
+                    return object->as<ArtboardBase>()->defaultStateMachineId();
                 case WeightBase::valuesPropertyKey:
                     return object->as<WeightBase>()->values();
                 case WeightBase::indicesPropertyKey:
@@ -1205,6 +1210,7 @@
                 case PolygonBase::pointsPropertyKey:
                 case ImageBase::assetIdPropertyKey:
                 case DrawRulesBase::drawTargetIdPropertyKey:
+                case ArtboardBase::defaultStateMachineIdPropertyKey:
                 case WeightBase::valuesPropertyKey:
                 case WeightBase::indicesPropertyKey:
                 case TendonBase::boneIdPropertyKey:
diff --git a/src/artboard.cpp b/src/artboard.cpp
index 56f1e6d..1d862b7 100644
--- a/src/artboard.cpp
+++ b/src/artboard.cpp
@@ -527,6 +527,13 @@
     return m_StateMachines[index];
 }
 
+StateMachine* Artboard::defaultStateMachine() const {
+    if (defaultStateMachineId() > m_StateMachines.size()) {
+        return nullptr;
+    }
+    return m_StateMachines[defaultStateMachineId()];
+}
+
 std::unique_ptr<ArtboardInstance> Artboard::instance() const {
     std::unique_ptr<ArtboardInstance> artboardClone(new ArtboardInstance);
     artboardClone->copy(*this);
