diff --git a/include/rive/animation/event_bool_change.hpp b/include/rive/animation/event_bool_change.hpp
new file mode 100644
index 0000000..79d3933
--- /dev/null
+++ b/include/rive/animation/event_bool_change.hpp
@@ -0,0 +1,11 @@
+#ifndef _RIVE_EVENT_BOOL_CHANGE_HPP_
+#define _RIVE_EVENT_BOOL_CHANGE_HPP_
+#include "rive/generated/animation/event_bool_change_base.hpp"
+#include <stdio.h>
+namespace rive {
+    class EventBoolChange : public EventBoolChangeBase {
+    public:
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/animation/event_input_change.hpp b/include/rive/animation/event_input_change.hpp
new file mode 100644
index 0000000..93e3796
--- /dev/null
+++ b/include/rive/animation/event_input_change.hpp
@@ -0,0 +1,11 @@
+#ifndef _RIVE_EVENT_INPUT_CHANGE_HPP_
+#define _RIVE_EVENT_INPUT_CHANGE_HPP_
+#include "rive/generated/animation/event_input_change_base.hpp"
+#include <stdio.h>
+namespace rive {
+    class EventInputChange : public EventInputChangeBase {
+    public:
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/animation/event_number_change.hpp b/include/rive/animation/event_number_change.hpp
new file mode 100644
index 0000000..27ac05f
--- /dev/null
+++ b/include/rive/animation/event_number_change.hpp
@@ -0,0 +1,11 @@
+#ifndef _RIVE_EVENT_NUMBER_CHANGE_HPP_
+#define _RIVE_EVENT_NUMBER_CHANGE_HPP_
+#include "rive/generated/animation/event_number_change_base.hpp"
+#include <stdio.h>
+namespace rive {
+    class EventNumberChange : public EventNumberChangeBase {
+    public:
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/animation/event_trigger_change.hpp b/include/rive/animation/event_trigger_change.hpp
new file mode 100644
index 0000000..b6245af
--- /dev/null
+++ b/include/rive/animation/event_trigger_change.hpp
@@ -0,0 +1,11 @@
+#ifndef _RIVE_EVENT_TRIGGER_CHANGE_HPP_
+#define _RIVE_EVENT_TRIGGER_CHANGE_HPP_
+#include "rive/generated/animation/event_trigger_change_base.hpp"
+#include <stdio.h>
+namespace rive {
+    class EventTriggerChange : public EventTriggerChangeBase {
+    public:
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/animation/state_machine.hpp b/include/rive/animation/state_machine.hpp
index 8f659ea..526dd4c 100644
--- a/include/rive/animation/state_machine.hpp
+++ b/include/rive/animation/state_machine.hpp
@@ -7,6 +7,7 @@
 namespace rive {
     class StateMachineLayer;
     class StateMachineInput;
+    class StateMachineEvent;
     class StateMachineImporter;
     class StateMachine : public StateMachineBase {
         friend class StateMachineImporter;
@@ -14,9 +15,11 @@
     private:
         std::vector<StateMachineLayer*> m_Layers;
         std::vector<StateMachineInput*> m_Inputs;
+        std::vector<StateMachineEvent*> m_Events;
 
         void addLayer(StateMachineLayer* layer);
         void addInput(StateMachineInput* input);
+        void addEvent(StateMachineEvent* event);
 
     public:
         ~StateMachine();
@@ -24,11 +27,13 @@
 
         size_t layerCount() const { return m_Layers.size(); }
         size_t inputCount() const { return m_Inputs.size(); }
+        size_t eventCount() const { return m_Events.size(); }
 
         const StateMachineInput* input(std::string name) const;
         const StateMachineInput* input(size_t index) const;
         const StateMachineLayer* layer(std::string name) const;
         const StateMachineLayer* layer(size_t index) const;
+        const StateMachineEvent* event(size_t index) const;
 
         StatusCode onAddedDirty(CoreContext* context) override;
         StatusCode onAddedClean(CoreContext* context) override;
diff --git a/include/rive/animation/state_machine_event.hpp b/include/rive/animation/state_machine_event.hpp
new file mode 100644
index 0000000..55a2644
--- /dev/null
+++ b/include/rive/animation/state_machine_event.hpp
@@ -0,0 +1,12 @@
+#ifndef _RIVE_STATE_MACHINE_EVENT_HPP_
+#define _RIVE_STATE_MACHINE_EVENT_HPP_
+#include "rive/generated/animation/state_machine_event_base.hpp"
+#include <stdio.h>
+namespace rive {
+    class StateMachineEvent : public StateMachineEventBase {
+    public:
+        StatusCode import(ImportStack& importStack) override;
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/animation/event_bool_change_base.hpp b/include/rive/generated/animation/event_bool_change_base.hpp
new file mode 100644
index 0000000..13d95ad
--- /dev/null
+++ b/include/rive/generated/animation/event_bool_change_base.hpp
@@ -0,0 +1,62 @@
+#ifndef _RIVE_EVENT_BOOL_CHANGE_BASE_HPP_
+#define _RIVE_EVENT_BOOL_CHANGE_BASE_HPP_
+#include "rive/animation/event_input_change.hpp"
+#include "rive/core/field_types/core_bool_type.hpp"
+namespace rive {
+    class EventBoolChangeBase : public EventInputChange {
+    protected:
+        typedef EventInputChange Super;
+
+    public:
+        static const uint16_t typeKey = 117;
+
+        /// Helper to quickly determine if a core object extends another without RTTI
+        /// at runtime.
+        bool isTypeOf(uint16_t typeKey) const override {
+            switch (typeKey) {
+                case EventBoolChangeBase::typeKey:
+                case EventInputChangeBase::typeKey:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        uint16_t coreType() const override { return typeKey; }
+
+        static const uint16_t valuePropertyKey = 228;
+
+    private:
+        bool m_Value = true;
+
+    public:
+        inline bool value() const { return m_Value; }
+        void value(bool value) {
+            if (m_Value == value) {
+                return;
+            }
+            m_Value = value;
+            valueChanged();
+        }
+
+        Core* clone() const override;
+        void copy(const EventBoolChangeBase& object) {
+            m_Value = object.m_Value;
+            EventInputChange::copy(object);
+        }
+
+        bool deserialize(uint16_t propertyKey, BinaryReader& reader) override {
+            switch (propertyKey) {
+                case valuePropertyKey:
+                    m_Value = CoreBoolType::deserialize(reader);
+                    return true;
+            }
+            return EventInputChange::deserialize(propertyKey, reader);
+        }
+
+    protected:
+        virtual void valueChanged() {}
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/animation/event_input_change_base.hpp b/include/rive/generated/animation/event_input_change_base.hpp
new file mode 100644
index 0000000..61f30d1
--- /dev/null
+++ b/include/rive/generated/animation/event_input_change_base.hpp
@@ -0,0 +1,57 @@
+#ifndef _RIVE_EVENT_INPUT_CHANGE_BASE_HPP_
+#define _RIVE_EVENT_INPUT_CHANGE_BASE_HPP_
+#include "rive/core.hpp"
+#include "rive/core/field_types/core_uint_type.hpp"
+namespace rive {
+    class EventInputChangeBase : public Core {
+    protected:
+        typedef Core Super;
+
+    public:
+        static const uint16_t typeKey = 116;
+
+        /// Helper to quickly determine if a core object extends another without RTTI
+        /// at runtime.
+        bool isTypeOf(uint16_t typeKey) const override {
+            switch (typeKey) {
+                case EventInputChangeBase::typeKey:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        uint16_t coreType() const override { return typeKey; }
+
+        static const uint16_t inputIdPropertyKey = 227;
+
+    private:
+        int m_InputId = -1;
+
+    public:
+        inline int inputId() const { return m_InputId; }
+        void inputId(int value) {
+            if (m_InputId == value) {
+                return;
+            }
+            m_InputId = value;
+            inputIdChanged();
+        }
+
+        void copy(const EventInputChangeBase& object) { m_InputId = object.m_InputId; }
+
+        bool deserialize(uint16_t propertyKey, BinaryReader& reader) override {
+            switch (propertyKey) {
+                case inputIdPropertyKey:
+                    m_InputId = CoreUintType::deserialize(reader);
+                    return true;
+            }
+            return false;
+        }
+
+    protected:
+        virtual void inputIdChanged() {}
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/animation/event_number_change_base.hpp b/include/rive/generated/animation/event_number_change_base.hpp
new file mode 100644
index 0000000..4c647ed
--- /dev/null
+++ b/include/rive/generated/animation/event_number_change_base.hpp
@@ -0,0 +1,62 @@
+#ifndef _RIVE_EVENT_NUMBER_CHANGE_BASE_HPP_
+#define _RIVE_EVENT_NUMBER_CHANGE_BASE_HPP_
+#include "rive/animation/event_input_change.hpp"
+#include "rive/core/field_types/core_double_type.hpp"
+namespace rive {
+    class EventNumberChangeBase : public EventInputChange {
+    protected:
+        typedef EventInputChange Super;
+
+    public:
+        static const uint16_t typeKey = 118;
+
+        /// Helper to quickly determine if a core object extends another without RTTI
+        /// at runtime.
+        bool isTypeOf(uint16_t typeKey) const override {
+            switch (typeKey) {
+                case EventNumberChangeBase::typeKey:
+                case EventInputChangeBase::typeKey:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        uint16_t coreType() const override { return typeKey; }
+
+        static const uint16_t valuePropertyKey = 229;
+
+    private:
+        float m_Value = 0.0f;
+
+    public:
+        inline float value() const { return m_Value; }
+        void value(float value) {
+            if (m_Value == value) {
+                return;
+            }
+            m_Value = value;
+            valueChanged();
+        }
+
+        Core* clone() const override;
+        void copy(const EventNumberChangeBase& object) {
+            m_Value = object.m_Value;
+            EventInputChange::copy(object);
+        }
+
+        bool deserialize(uint16_t propertyKey, BinaryReader& reader) override {
+            switch (propertyKey) {
+                case valuePropertyKey:
+                    m_Value = CoreDoubleType::deserialize(reader);
+                    return true;
+            }
+            return EventInputChange::deserialize(propertyKey, reader);
+        }
+
+    protected:
+        virtual void valueChanged() {}
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/animation/event_trigger_change_base.hpp b/include/rive/generated/animation/event_trigger_change_base.hpp
new file mode 100644
index 0000000..7232825
--- /dev/null
+++ b/include/rive/generated/animation/event_trigger_change_base.hpp
@@ -0,0 +1,32 @@
+#ifndef _RIVE_EVENT_TRIGGER_CHANGE_BASE_HPP_
+#define _RIVE_EVENT_TRIGGER_CHANGE_BASE_HPP_
+#include "rive/animation/event_input_change.hpp"
+namespace rive {
+    class EventTriggerChangeBase : public EventInputChange {
+    protected:
+        typedef EventInputChange Super;
+
+    public:
+        static const uint16_t typeKey = 115;
+
+        /// Helper to quickly determine if a core object extends another without RTTI
+        /// at runtime.
+        bool isTypeOf(uint16_t typeKey) const override {
+            switch (typeKey) {
+                case EventTriggerChangeBase::typeKey:
+                case EventInputChangeBase::typeKey:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        uint16_t coreType() const override { return typeKey; }
+
+        Core* clone() const override;
+
+    protected:
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/animation/state_machine_event_base.hpp b/include/rive/generated/animation/state_machine_event_base.hpp
new file mode 100644
index 0000000..2aa9f01
--- /dev/null
+++ b/include/rive/generated/animation/state_machine_event_base.hpp
@@ -0,0 +1,78 @@
+#ifndef _RIVE_STATE_MACHINE_EVENT_BASE_HPP_
+#define _RIVE_STATE_MACHINE_EVENT_BASE_HPP_
+#include "rive/animation/state_machine_component.hpp"
+#include "rive/core/field_types/core_uint_type.hpp"
+namespace rive {
+    class StateMachineEventBase : public StateMachineComponent {
+    protected:
+        typedef StateMachineComponent Super;
+
+    public:
+        static const uint16_t typeKey = 114;
+
+        /// Helper to quickly determine if a core object extends another without RTTI
+        /// at runtime.
+        bool isTypeOf(uint16_t typeKey) const override {
+            switch (typeKey) {
+                case StateMachineEventBase::typeKey:
+                case StateMachineComponentBase::typeKey:
+                    return true;
+                default:
+                    return false;
+            }
+        }
+
+        uint16_t coreType() const override { return typeKey; }
+
+        static const uint16_t targetIdPropertyKey = 224;
+        static const uint16_t eventTypeValuePropertyKey = 225;
+
+    private:
+        int m_TargetId = 0;
+        int m_EventTypeValue = 0;
+
+    public:
+        inline int targetId() const { return m_TargetId; }
+        void targetId(int value) {
+            if (m_TargetId == value) {
+                return;
+            }
+            m_TargetId = value;
+            targetIdChanged();
+        }
+
+        inline int eventTypeValue() const { return m_EventTypeValue; }
+        void eventTypeValue(int value) {
+            if (m_EventTypeValue == value) {
+                return;
+            }
+            m_EventTypeValue = value;
+            eventTypeValueChanged();
+        }
+
+        Core* clone() const override;
+        void copy(const StateMachineEventBase& object) {
+            m_TargetId = object.m_TargetId;
+            m_EventTypeValue = object.m_EventTypeValue;
+            StateMachineComponent::copy(object);
+        }
+
+        bool deserialize(uint16_t propertyKey, BinaryReader& reader) override {
+            switch (propertyKey) {
+                case targetIdPropertyKey:
+                    m_TargetId = CoreUintType::deserialize(reader);
+                    return true;
+                case eventTypeValuePropertyKey:
+                    m_EventTypeValue = CoreUintType::deserialize(reader);
+                    return true;
+            }
+            return StateMachineComponent::deserialize(propertyKey, reader);
+        }
+
+    protected:
+        virtual void targetIdChanged() {}
+        virtual void eventTypeValueChanged() {}
+    };
+} // namespace rive
+
+#endif
\ No newline at end of file
diff --git a/include/rive/generated/core_registry.hpp b/include/rive/generated/core_registry.hpp
index 7c78ec2..54f9bc5 100644
--- a/include/rive/generated/core_registry.hpp
+++ b/include/rive/generated/core_registry.hpp
@@ -12,6 +12,10 @@
 #include "rive/animation/blend_state_transition.hpp"
 #include "rive/animation/cubic_interpolator.hpp"
 #include "rive/animation/entry_state.hpp"
+#include "rive/animation/event_bool_change.hpp"
+#include "rive/animation/event_input_change.hpp"
+#include "rive/animation/event_number_change.hpp"
+#include "rive/animation/event_trigger_change.hpp"
 #include "rive/animation/exit_state.hpp"
 #include "rive/animation/keyed_object.hpp"
 #include "rive/animation/keyed_property.hpp"
@@ -29,6 +33,7 @@
 #include "rive/animation/state_machine.hpp"
 #include "rive/animation/state_machine_bool.hpp"
 #include "rive/animation/state_machine_component.hpp"
+#include "rive/animation/state_machine_event.hpp"
 #include "rive/animation/state_machine_input.hpp"
 #include "rive/animation/state_machine_layer.hpp"
 #include "rive/animation/state_machine_layer_component.hpp"
@@ -128,10 +133,14 @@
                     return new Node();
                 case NestedArtboardBase::typeKey:
                     return new NestedArtboard();
+                case EventNumberChangeBase::typeKey:
+                    return new EventNumberChange();
                 case NestedSimpleAnimationBase::typeKey:
                     return new NestedSimpleAnimation();
                 case AnimationStateBase::typeKey:
                     return new AnimationState();
+                case StateMachineEventBase::typeKey:
+                    return new StateMachineEvent();
                 case KeyedObjectBase::typeKey:
                     return new KeyedObject();
                 case BlendAnimationDirectBase::typeKey:
@@ -148,8 +157,12 @@
                     return new KeyFrameBool();
                 case TransitionNumberConditionBase::typeKey:
                     return new TransitionNumberCondition();
+                case EventBoolChangeBase::typeKey:
+                    return new EventBoolChange();
                 case AnyStateBase::typeKey:
                     return new AnyState();
+                case EventTriggerChangeBase::typeKey:
+                    return new EventTriggerChange();
                 case StateMachineLayerBase::typeKey:
                     return new StateMachineLayer();
                 case AnimationBase::typeKey:
@@ -318,9 +331,18 @@
                 case NestedAnimationBase::animationIdPropertyKey:
                     object->as<NestedAnimationBase>()->animationId(value);
                     break;
+                case EventInputChangeBase::inputIdPropertyKey:
+                    object->as<EventInputChangeBase>()->inputId(value);
+                    break;
                 case AnimationStateBase::animationIdPropertyKey:
                     object->as<AnimationStateBase>()->animationId(value);
                     break;
+                case StateMachineEventBase::targetIdPropertyKey:
+                    object->as<StateMachineEventBase>()->targetId(value);
+                    break;
+                case StateMachineEventBase::eventTypeValuePropertyKey:
+                    object->as<StateMachineEventBase>()->eventTypeValue(value);
+                    break;
                 case KeyedObjectBase::objectIdPropertyKey:
                     object->as<KeyedObjectBase>()->objectId(value);
                     break;
@@ -484,6 +506,9 @@
                 case NodeBase::yPropertyKey:
                     object->as<NodeBase>()->y(value);
                     break;
+                case EventNumberChangeBase::valuePropertyKey:
+                    object->as<EventNumberChangeBase>()->value(value);
+                    break;
                 case NestedLinearAnimationBase::mixPropertyKey:
                     object->as<NestedLinearAnimationBase>()->mix(value);
                     break;
@@ -725,6 +750,9 @@
                 case KeyFrameBoolBase::valuePropertyKey:
                     object->as<KeyFrameBoolBase>()->value(value);
                     break;
+                case EventBoolChangeBase::valuePropertyKey:
+                    object->as<EventBoolChangeBase>()->value(value);
+                    break;
                 case LinearAnimationBase::enableWorkAreaPropertyKey:
                     object->as<LinearAnimationBase>()->enableWorkArea(value);
                     break;
@@ -805,8 +833,14 @@
                     return object->as<NestedArtboardBase>()->artboardId();
                 case NestedAnimationBase::animationIdPropertyKey:
                     return object->as<NestedAnimationBase>()->animationId();
+                case EventInputChangeBase::inputIdPropertyKey:
+                    return object->as<EventInputChangeBase>()->inputId();
                 case AnimationStateBase::animationIdPropertyKey:
                     return object->as<AnimationStateBase>()->animationId();
+                case StateMachineEventBase::targetIdPropertyKey:
+                    return object->as<StateMachineEventBase>()->targetId();
+                case StateMachineEventBase::eventTypeValuePropertyKey:
+                    return object->as<StateMachineEventBase>()->eventTypeValue();
                 case KeyedObjectBase::objectIdPropertyKey:
                     return object->as<KeyedObjectBase>()->objectId();
                 case BlendAnimationBase::animationIdPropertyKey:
@@ -918,6 +952,8 @@
                     return object->as<NodeBase>()->x();
                 case NodeBase::yPropertyKey:
                     return object->as<NodeBase>()->y();
+                case EventNumberChangeBase::valuePropertyKey:
+                    return object->as<EventNumberChangeBase>()->value();
                 case NestedLinearAnimationBase::mixPropertyKey:
                     return object->as<NestedLinearAnimationBase>()->mix();
                 case NestedSimpleAnimationBase::speedPropertyKey:
@@ -1081,6 +1117,8 @@
                     return object->as<NestedSimpleAnimationBase>()->isPlaying();
                 case KeyFrameBoolBase::valuePropertyKey:
                     return object->as<KeyFrameBoolBase>()->value();
+                case EventBoolChangeBase::valuePropertyKey:
+                    return object->as<EventBoolChangeBase>()->value();
                 case LinearAnimationBase::enableWorkAreaPropertyKey:
                     return object->as<LinearAnimationBase>()->enableWorkArea();
                 case StateMachineBoolBase::valuePropertyKey:
@@ -1131,7 +1169,10 @@
                 case DrawableBase::drawableFlagsPropertyKey:
                 case NestedArtboardBase::artboardIdPropertyKey:
                 case NestedAnimationBase::animationIdPropertyKey:
+                case EventInputChangeBase::inputIdPropertyKey:
                 case AnimationStateBase::animationIdPropertyKey:
+                case StateMachineEventBase::targetIdPropertyKey:
+                case StateMachineEventBase::eventTypeValuePropertyKey:
                 case KeyedObjectBase::objectIdPropertyKey:
                 case BlendAnimationBase::animationIdPropertyKey:
                 case BlendAnimationDirectBase::inputIdPropertyKey:
@@ -1186,6 +1227,7 @@
                 case TransformComponentBase::scaleYPropertyKey:
                 case NodeBase::xPropertyKey:
                 case NodeBase::yPropertyKey:
+                case EventNumberChangeBase::valuePropertyKey:
                 case NestedLinearAnimationBase::mixPropertyKey:
                 case NestedSimpleAnimationBase::speedPropertyKey:
                 case StateMachineNumberBase::valuePropertyKey:
@@ -1266,6 +1308,7 @@
                 case IKConstraintBase::invertDirectionPropertyKey:
                 case NestedSimpleAnimationBase::isPlayingPropertyKey:
                 case KeyFrameBoolBase::valuePropertyKey:
+                case EventBoolChangeBase::valuePropertyKey:
                 case LinearAnimationBase::enableWorkAreaPropertyKey:
                 case StateMachineBoolBase::valuePropertyKey:
                 case ShapePaintBase::isVisiblePropertyKey:
diff --git a/include/rive/importers/state_machine_importer.hpp b/include/rive/importers/state_machine_importer.hpp
index 963223c..cbfabfe 100644
--- a/include/rive/importers/state_machine_importer.hpp
+++ b/include/rive/importers/state_machine_importer.hpp
@@ -6,6 +6,7 @@
 namespace rive {
     class StateMachineInput;
     class StateMachineLayer;
+    class StateMachineEvent;
     class StateMachine;
     class StateMachineImporter : public ImportStackObject {
     private:
@@ -16,6 +17,7 @@
         const StateMachine* stateMachine() const { return m_StateMachine; }
         void addLayer(StateMachineLayer* layer);
         void addInput(StateMachineInput* input);
+        void addEvent(StateMachineEvent* event);
         StatusCode resolve() override;
         bool readNullObject() override;
     };
diff --git a/src/animation/state_machine.cpp b/src/animation/state_machine.cpp
index 8a5ef31..a767143 100644
--- a/src/animation/state_machine.cpp
+++ b/src/animation/state_machine.cpp
@@ -3,6 +3,7 @@
 #include "rive/importers/artboard_importer.hpp"
 #include "rive/animation/state_machine_layer.hpp"
 #include "rive/animation/state_machine_input.hpp"
+#include "rive/animation/state_machine_event.hpp"
 
 using namespace rive;
 
@@ -13,6 +14,9 @@
     for (auto object : m_Layers) {
         delete object;
     }
+    for (auto object : m_Events) {
+        delete object;
+    }
 }
 
 StatusCode StateMachine::onAddedDirty(CoreContext* context) {
@@ -27,6 +31,11 @@
             return code;
         }
     }
+    for (auto object : m_Events) {
+        if ((code = object->onAddedDirty(context)) != StatusCode::Ok) {
+            return code;
+        }
+    }
     return StatusCode::Ok;
 }
 
@@ -42,6 +51,11 @@
             return code;
         }
     }
+    for (auto object : m_Events) {
+        if ((code = object->onAddedClean(context)) != StatusCode::Ok) {
+            return code;
+        }
+    }
     return StatusCode::Ok;
 }
 
@@ -57,6 +71,7 @@
 void StateMachine::addLayer(StateMachineLayer* layer) { m_Layers.push_back(layer); }
 
 void StateMachine::addInput(StateMachineInput* input) { m_Inputs.push_back(input); }
+void StateMachine::addEvent(StateMachineEvent* event) { m_Events.push_back(event); }
 
 const StateMachineInput* StateMachine::input(std::string name) const {
     for (auto input : m_Inputs) {
@@ -88,4 +103,11 @@
         return m_Layers[index];
     }
     return nullptr;
+}
+
+const StateMachineEvent* StateMachine::event(size_t index) const {
+    if (index >= 0 && index < m_Events.size()) {
+        return m_Events[index];
+    }
+    return nullptr;
 }
\ No newline at end of file
diff --git a/src/animation/state_machine_event.cpp b/src/animation/state_machine_event.cpp
new file mode 100644
index 0000000..d14c0ab
--- /dev/null
+++ b/src/animation/state_machine_event.cpp
@@ -0,0 +1,15 @@
+#include "rive/animation/state_machine_event.hpp"
+#include "rive/importers/import_stack.hpp"
+#include "rive/importers/state_machine_importer.hpp"
+#include "rive/generated/animation/state_machine_base.hpp"
+
+using namespace rive;
+
+StatusCode StateMachineEvent::import(ImportStack& importStack) {
+    auto stateMachineImporter = importStack.latest<StateMachineImporter>(StateMachineBase::typeKey);
+    if (stateMachineImporter == nullptr) {
+        return StatusCode::MissingObject;
+    }
+    stateMachineImporter->addEvent(this);
+    return Super::import(importStack);
+}
diff --git a/src/generated/animation/event_bool_change_base.cpp b/src/generated/animation/event_bool_change_base.cpp
new file mode 100644
index 0000000..722a754
--- /dev/null
+++ b/src/generated/animation/event_bool_change_base.cpp
@@ -0,0 +1,10 @@
+#include "rive/generated/animation/event_bool_change_base.hpp"
+#include "rive/animation/event_bool_change.hpp"
+
+using namespace rive;
+
+Core* EventBoolChangeBase::clone() const {
+    auto cloned = new EventBoolChange();
+    cloned->copy(*this);
+    return cloned;
+}
diff --git a/src/generated/animation/event_number_change_base.cpp b/src/generated/animation/event_number_change_base.cpp
new file mode 100644
index 0000000..64eb85a
--- /dev/null
+++ b/src/generated/animation/event_number_change_base.cpp
@@ -0,0 +1,10 @@
+#include "rive/generated/animation/event_number_change_base.hpp"
+#include "rive/animation/event_number_change.hpp"
+
+using namespace rive;
+
+Core* EventNumberChangeBase::clone() const {
+    auto cloned = new EventNumberChange();
+    cloned->copy(*this);
+    return cloned;
+}
diff --git a/src/generated/animation/event_trigger_change_base.cpp b/src/generated/animation/event_trigger_change_base.cpp
new file mode 100644
index 0000000..4a78dfe
--- /dev/null
+++ b/src/generated/animation/event_trigger_change_base.cpp
@@ -0,0 +1,10 @@
+#include "rive/generated/animation/event_trigger_change_base.hpp"
+#include "rive/animation/event_trigger_change.hpp"
+
+using namespace rive;
+
+Core* EventTriggerChangeBase::clone() const {
+    auto cloned = new EventTriggerChange();
+    cloned->copy(*this);
+    return cloned;
+}
diff --git a/src/generated/animation/state_machine_event_base.cpp b/src/generated/animation/state_machine_event_base.cpp
new file mode 100644
index 0000000..0ba8a2b
--- /dev/null
+++ b/src/generated/animation/state_machine_event_base.cpp
@@ -0,0 +1,10 @@
+#include "rive/generated/animation/state_machine_event_base.hpp"
+#include "rive/animation/state_machine_event.hpp"
+
+using namespace rive;
+
+Core* StateMachineEventBase::clone() const {
+    auto cloned = new StateMachineEvent();
+    cloned->copy(*this);
+    return cloned;
+}
diff --git a/src/importers/state_machine_importer.cpp b/src/importers/state_machine_importer.cpp
index 6acd11d..c223e6a 100644
--- a/src/importers/state_machine_importer.cpp
+++ b/src/importers/state_machine_importer.cpp
@@ -9,6 +9,8 @@
 
 void StateMachineImporter::addInput(StateMachineInput* input) { m_StateMachine->addInput(input); }
 
+void StateMachineImporter::addEvent(StateMachineEvent* event) { m_StateMachine->addEvent(event); }
+
 bool StateMachineImporter::readNullObject() {
     // Hard assumption that we won't add new layer types...
     m_StateMachine->addInput(nullptr);
diff --git a/test/assets/bullet_man.riv b/test/assets/bullet_man.riv
new file mode 100644
index 0000000..63e2a15
--- /dev/null
+++ b/test/assets/bullet_man.riv
Binary files differ
diff --git a/test/state_machine_event_test.cpp b/test/state_machine_event_test.cpp
new file mode 100644
index 0000000..4e5389c
--- /dev/null
+++ b/test/state_machine_event_test.cpp
@@ -0,0 +1,30 @@
+#include <rive/core/binary_reader.hpp>
+#include <rive/file.hpp>
+#include <rive/animation/state_machine_bool.hpp>
+#include <rive/animation/state_machine_layer.hpp>
+#include <rive/animation/animation_state.hpp>
+#include <rive/animation/entry_state.hpp>
+#include <rive/animation/state_transition.hpp>
+#include <rive/animation/state_machine_instance.hpp>
+#include <rive/animation/state_machine_input_instance.hpp>
+#include <rive/animation/blend_state_1d.hpp>
+#include <rive/animation/blend_animation_1d.hpp>
+#include <rive/animation/blend_state_direct.hpp>
+#include <rive/animation/blend_state_transition.hpp>
+#include "catch.hpp"
+#include "rive_file_reader.hpp"
+#include <cstdio>
+
+TEST_CASE("file with state machine events be read", "[file]") {
+    RiveFileReader reader("../../test/assets/bullet_man.riv");
+
+    auto artboard = reader.file()->artboard("Bullet Man");
+    REQUIRE(artboard != nullptr);
+    REQUIRE(artboard->stateMachineCount() == 1);
+
+    auto stateMachine = artboard->stateMachine(0);
+    REQUIRE(stateMachine != nullptr);
+
+    REQUIRE(stateMachine->eventCount() == 3);
+    REQUIRE(stateMachine->inputCount() == 4);
+}
