diff --git a/fastrpc/include/libhexagonrpc/interface.h b/fastrpc/include/libhexagonrpc/interface.h
new file mode 100644
index 0000000..e3eca4d
--- /dev/null
+++ b/fastrpc/include/libhexagonrpc/interface.h
@@ -0,0 +1,54 @@
+/*
+ * FastRPC interface method definition macros
+ *
+ * Copyright (C) 2023 Richard Acayan
+ *
+ * This file is part of sensh.
+ *
+ * Sensh is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#ifndef LIBHEXAGONRPC_INTERFACE_H
+#define LIBHEXAGONRPC_INTERFACE_H
+
+#include
+
+/*
+ * We want to declare method definitions as external by default so we only need
+ * special flags when compiling the interfaces. Otherwise, everything that uses
+ * the interfaces would need to define a macro.
+ */
+#if !HEXAGONRPC_BUILD_METHOD_DEFINITIONS
+
+#define HEXAGONRPC_DEFINE_REMOTE_METHOD(mid, name, \
+ innums, inbufs, \
+ outnums, outbufs) \
+ extern const struct fastrpc_function_def_interp2 name##_def;
+
+#else /* HEXAGONRPC_BUILD_METHOD_DEFINITIONS */
+
+#define HEXAGONRPC_DEFINE_REMOTE_METHOD(mid, name, \
+ innums, inbufs, \
+ outnums, outbufs) \
+ const struct fastrpc_function_def_interp2 name##_def = { \
+ .msg_id = mid, \
+ .in_nums = innums, \
+ .in_bufs = inbufs, \
+ .out_nums = outnums, \
+ .out_bufs = outbufs, \
+ };
+
+#endif /* HEXAGONRPC_BUILD_METHOD_DEFINITIONS */
+
+#endif /* LIBHEXAGONRPC_INTERFACE_H */