diff --git a/src/main/server.c b/src/main/server.c
index a1de40db68c692a09bb0fbfb573ef09254b1f54e..78d6faecb24685592e9f3c039717888d297bb883 100644
--- a/src/main/server.c
+++ b/src/main/server.c
@@ -19,6 +19,7 @@
 REG_DECLARE(sdl2_reg)
 REG_DECLARE(qt_window_reg)
 REG_DECLARE(repo_reg)
+REG_DECLARE(repo_rs_reg)
 #endif
 
 /* TODO: Donesn't work, maybe stdin is no longer valid at the point where that
@@ -38,6 +39,7 @@ main(int argc, char *argv[])
     REG_ADD(launch_caching)
     REG_ADD(database_upgrade_scheme)
 #if defined(LKT_STATIC_MODULE)
+    REG_REGISTER("repo_rs", repo_rs_reg)
     REG_REGISTER("repo", repo_reg)
     REG_REGISTER("sdl2", sdl2_reg)
     REG_REGISTER("qt", qt_window_reg)
diff --git a/src/module/module_repo_rs.c b/src/module/module_repo_rs.c
new file mode 100644
index 0000000000000000000000000000000000000000..45c1cdb2950b46796a5adfe486851e0bf9a74c85
--- /dev/null
+++ b/src/module/module_repo_rs.c
@@ -0,0 +1,68 @@
+#define __LKT_MODULE_MAIN_SOURCE__
+#include <lektor/lktmodule.h>
+#include <lektor/stb/ds.h>
+#include <lektor/internal/worker.h>
+
+/**********************
+ * Function from RUST *
+ **********************/
+
+typedef module_repo_rs_internal;
+
+/********************
+ * Export functions *
+ ********************/
+
+PRIVATE_FUNCTION int
+mod_new(va_list *va) {
+    va_list copy;
+    struct module_repo_rs_internal **repo;
+    va_copy(copy, *va);
+    repo = (struct module_repo_rs_internal **)va_arg(copy, void **);
+
+    va_end(copy);
+    return 1;
+}
+
+PRIVATE_FUNCTION int
+mod_free(va_list *va) {
+    return 1;
+}
+
+PRIVATE_FUNCTION int
+mod_close(va_list *va) {
+    return 1;
+}
+
+PRIVATE_FUNCTION int
+mod_update(va_list *va) {
+    return 1;
+}
+
+PRIVATE_FUNCTION int
+mod_dry_update(va_list *va) {
+    return 1;
+}
+
+PRIVATE_FUNCTION int
+mod_rescan(va_list *va) {
+    return 1;
+}
+
+PRIVATE_FUNCTION int
+mod_import(va_list *va) {
+    return 1;
+}
+
+REG_BEGIN(repo_rs_reg)
+REG_ADD_NAMED("new", mod_new)               /* Create the module             */
+REG_ADD_NAMED("free", mod_free)             /* Close and free ressources     */
+REG_ADD_NAMED("close", mod_close)           /* Stop the module               */
+REG_ADD_NAMED("update", mod_update)         /* Update from kurisu            */
+REG_ADD_NAMED("dry-update", mod_dry_update) /* Update avail kara from kurisu */
+REG_ADD_NAMED("rescan", mod_rescan)         /* Rescan from hard drive        */
+REG_ADD_NAMED("import", mod_import)         /* Import favorites from kurisu  */
+REG_END()
+#if !defined(LKT_STATIC_MODULE)
+REG_EXPORT(repo_rs_reg)
+#endif
diff --git a/src/rust/liblektor-rs/src/lib.rs b/src/rust/liblektor-rs/src/lib.rs
index 40c8ae63c6c8fcb6b5277eb72dbd09c783de2a55..641e7637deffcb302b53363c7cb9e49fe6f87297 100644
--- a/src/rust/liblektor-rs/src/lib.rs
+++ b/src/rust/liblektor-rs/src/lib.rs
@@ -1,5 +1,6 @@
 #![allow(dead_code)]
 
+mod module;
 mod database;
 mod mkv;
 
diff --git a/src/rust/liblektor-rs/src/module/mod.rs b/src/rust/liblektor-rs/src/module/mod.rs
new file mode 100644
index 0000000000000000000000000000000000000000..0d27c386baba8054092d2636eed4ac06612a4cc5
--- /dev/null
+++ b/src/rust/liblektor-rs/src/module/mod.rs
@@ -0,0 +1 @@
+pub(crate) mod repo_rs;
diff --git a/src/rust/liblektor-rs/src/module/repo_rs.rs b/src/rust/liblektor-rs/src/module/repo_rs.rs
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391