diff --git a/src/rust/liblektor-rs/lektor_c_compat/Cargo.toml b/src/rust/liblektor-rs/lektor_c_compat/Cargo.toml
index d39190b948e3c7c152b0b4ee990b92a231149cf4..4a5056876d0f12f802bc896bdcb76f506ab62905 100644
--- a/src/rust/liblektor-rs/lektor_c_compat/Cargo.toml
+++ b/src/rust/liblektor-rs/lektor_c_compat/Cargo.toml
@@ -9,3 +9,6 @@ license.workspace = true
 log.workspace = true
 libc.workspace = true
 lazy_static.workspace = true
+
+[features]
+c_types = []
diff --git a/src/rust/liblektor-rs/lektor_c_compat/src/lib.rs b/src/rust/liblektor-rs/lektor_c_compat/src/lib.rs
index 241109ad874e633ea02530352afd0183eeda6ff9..dfc7a0349449ed4c12fbc2db1e43f1e72ea75c48 100644
--- a/src/rust/liblektor-rs/lektor_c_compat/src/lib.rs
+++ b/src/rust/liblektor-rs/lektor_c_compat/src/lib.rs
@@ -4,10 +4,19 @@
 //! From safe rust code you *must not* use the types defined in the [c_types]
 //! module.
 
-pub mod c_types;
-
+pub(crate) mod c_types;
 mod rs_types;
-pub use rs_types::*;
+
+/// Re-exports the Rust types.
+pub mod rs {
+    pub use crate::rs_types::*;
+}
+
+/// Re-exports the C types if the feature is enabled.
+#[cfg(feature = "c_types")]
+pub mod c {
+    pub use crate::c_types::*;
+}
 
 pub use libc::{c_char, c_int, c_long, c_uint, c_void, size_t};
 
diff --git a/src/rust/liblektor-rs/lektor_repo/src/lib.rs b/src/rust/liblektor-rs/lektor_repo/src/lib.rs
index 78bd549788890400228339619d149bf907d6bec2..ffd59cd6b582b3f1b15af0ac38f124e457069d28 100644
--- a/src/rust/liblektor-rs/lektor_repo/src/lib.rs
+++ b/src/rust/liblektor-rs/lektor_repo/src/lib.rs
@@ -1,6 +1,6 @@
 //! The crate responsible of downloading karas from kurisu.
 
-use lektor_c_compat::*;
+use lektor_c_compat::rs::*;
 
 /// The structure responsible to download karas from kurisu.
 pub struct LktModuleRepoRs {
diff --git a/src/rust/liblektor-rs/lektor_unsafe/Cargo.toml b/src/rust/liblektor-rs/lektor_unsafe/Cargo.toml
index 588c5d84a6becbf28686058b17aeba3bb71f9b5a..fd41d724398af083e0efbfcfd91ad2ab8db16f7b 100644
--- a/src/rust/liblektor-rs/lektor_unsafe/Cargo.toml
+++ b/src/rust/liblektor-rs/lektor_unsafe/Cargo.toml
@@ -9,6 +9,6 @@ crate-type = ["staticlib"]
 [dependencies]
 log.workspace = true
 
-lektor_c_compat = { path = "../lektor_c_compat" }
+lektor_c_compat = { path = "../lektor_c_compat", features = ["c_types"] }
 lektor_repo = { path = "../lektor_repo" }
 lektor_db = { path = "../lektor_db" }
diff --git a/src/rust/liblektor-rs/lektor_unsafe/src/lib.rs b/src/rust/liblektor-rs/lektor_unsafe/src/lib.rs
index c89df43fe07807fb2a561a1b16bc2e877e40d854..b99c1a476084ed7c7fa9c8ffa79c1628365d77a9 100644
--- a/src/rust/liblektor-rs/lektor_unsafe/src/lib.rs
+++ b/src/rust/liblektor-rs/lektor_unsafe/src/lib.rs
@@ -6,6 +6,6 @@
 pub mod db;
 pub mod repo;
 
-pub(crate) use lektor_c_compat::*;
+pub(crate) use lektor_c_compat::{c::*, *};
 pub(crate) use log::error;
 pub(crate) use std::{mem::ManuallyDrop, path::PathBuf};
diff --git a/src/rust/liblektor-rs/lektor_unsafe/src/repo.rs b/src/rust/liblektor-rs/lektor_unsafe/src/repo.rs
index f5bd90de2787d9d302c27cda5e1f836e22c44d8c..89346dd98ef9677e48c75192b767660dd64c747e 100644
--- a/src/rust/liblektor-rs/lektor_unsafe/src/repo.rs
+++ b/src/rust/liblektor-rs/lektor_unsafe/src/repo.rs
@@ -1,4 +1,4 @@
-use crate::{c_types::*, *};
+use crate::*;
 use lektor_repo::*;
 
 /// A pointer to the repo structure. This is the only thing the C code will see.