diff --git a/loader/include/Geode/loader/IPC.hpp b/loader/include/Geode/loader/IPC.hpp
index 2cdd2f61..242444b8 100644
--- a/loader/include/Geode/loader/IPC.hpp
+++ b/loader/include/Geode/loader/IPC.hpp
@@ -2,6 +2,7 @@
 
 #include "Event.hpp"
 #include "Loader.hpp"
+#include "Mod.hpp"
 #include <matjson.hpp>
 
 namespace geode::ipc {
@@ -64,5 +65,9 @@ namespace geode::ipc {
         IPCFilter(IPCFilter const&) = default;
     };
 
-    std::monostate listen(std::string const& messageID, matjson::Value(*callback)(IPCEvent*));
+    inline void listen(std::string const& messageID, matjson::Value(*callback)(IPCEvent*)) {
+        (void) new EventListener(
+            callback, IPCFilter(getMod()->getID(), messageID)
+        );
+    }
 }
diff --git a/loader/src/loader/IPC.cpp b/loader/src/loader/IPC.cpp
index 55a7f5a4..6fbabcab 100644
--- a/loader/src/loader/IPC.cpp
+++ b/loader/src/loader/IPC.cpp
@@ -5,13 +5,6 @@
 
 using namespace geode::prelude;
 
-std::monostate ipc::listen(std::string const& messageID, matjson::Value(*callback)(IPCEvent*)) {
-    (void) new EventListener(
-        callback, IPCFilter(getMod()->getID(), messageID)
-    );
-    return std::monostate();
-}
-
 ipc::IPCEvent::IPCEvent(
     void* rawPipeHandle,
     std::string const& targetModID,