diff --git a/Cargo.lock b/Cargo.lock
index 709f80b..e4ade8e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -993,12 +993,8 @@ name = "hostd"
 version = "0.2.0"
 dependencies = [
  "anyhow",
- "serde",
- "serde_derive",
- "serde_json",
- "tokio",
+ "internal",
  "varlink",
- "varlink_generator",
 ]
 
 [[package]]
@@ -1357,6 +1353,17 @@ dependencies = [
  "tracing-subscriber",
 ]
 
+[[package]]
+name = "internal"
+version = "0.2.0"
+dependencies = [
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "varlink",
+ "varlink_generator",
+]
+
 [[package]]
 name = "ipnet"
 version = "2.10.1"
diff --git a/Cargo.toml b/Cargo.toml
index b38030e..99e13c5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -7,6 +7,7 @@ members = [
   "hostd",
   "trace-request",
   "xtask",
+  "internal",
 ]
 default-members = [
   "agent",
diff --git a/hostd/Cargo.toml b/hostd/Cargo.toml
index fc9c6c3..464fa55 100644
--- a/hostd/Cargo.toml
+++ b/hostd/Cargo.toml
@@ -5,11 +5,5 @@ edition.workspace = true
 
 [dependencies]
 anyhow.workspace = true
-serde.workspace = true
-serde_derive = "1.0.217"
-serde_json = "1.0.135"
-tokio.workspace = true
 varlink = "11.0.1"
-
-[build-dependencies]
-varlink_generator = "10.1.0"
+internal = { path = "../internal" }
diff --git a/hostd/build.rs b/hostd/build.rs
deleted file mode 100644
index bea0698..0000000
--- a/hostd/build.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-extern crate varlink_generator;
-
-fn main() {
-    varlink_generator::cargo_build_tosource("src/io.systemd.hostname.varlink", true);
-    varlink_generator::cargo_build_tosource("src/io.patagia.hostd.varlink", true);
-}
diff --git a/hostd/src/main.rs b/hostd/src/main.rs
index 3e9dccb..3ebbabe 100644
--- a/hostd/src/main.rs
+++ b/hostd/src/main.rs
@@ -1,8 +1,6 @@
 use anyhow::Result;
 
-use crate::io_patagia_hostd::{Call_Apply, Call_Describe, Label, Machine, VarlinkInterface};
-
-mod io_patagia_hostd;
+use internal::io_patagia_hostd::{Call_Apply, Call_Describe, Label, Machine, VarlinkInterface};
 
 const LISTEN_ADDRESS: &str = "unix:/tmp/patagia/io.patagia.hostd";
 
@@ -37,7 +35,7 @@ impl VarlinkInterface for PatagiaHostd {
 
 fn main() -> Result<()> {
     let hostd = PatagiaHostd;
-    let hostd_iface = io_patagia_hostd::new(Box::new(hostd));
+    let hostd_iface = internal::io_patagia_hostd::new(Box::new(hostd));
 
     let svc = varlink::VarlinkService::new(
         "io.patagia.hostd",
diff --git a/internal/.gitignore b/internal/.gitignore
new file mode 100644
index 0000000..ea8c4bf
--- /dev/null
+++ b/internal/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/internal/Cargo.toml b/internal/Cargo.toml
new file mode 100644
index 0000000..f0a2b58
--- /dev/null
+++ b/internal/Cargo.toml
@@ -0,0 +1,13 @@
+[package]
+name = "internal"
+version.workspace = true
+edition.workspace = true
+
+[dependencies]
+serde.workspace = true
+serde_derive = "1.0.217"
+serde_json = "1.0.135"
+varlink = "11.0.1"
+
+[build-dependencies]
+varlink_generator = "10.1.0"
diff --git a/internal/build.rs b/internal/build.rs
new file mode 100644
index 0000000..0b22cad
--- /dev/null
+++ b/internal/build.rs
@@ -0,0 +1,11 @@
+extern crate varlink_generator;
+
+fn main() {
+    // iterate over all varlink files
+    std::fs::read_dir("src").unwrap().for_each(|f| {
+        let f = f.unwrap();
+        if f.file_name().to_str().unwrap().ends_with(".varlink") {
+            varlink_generator::cargo_build_tosource(&f.path().display().to_string(), true);
+        }
+    });
+}
diff --git a/hostd/src/io.patagia.hostd.varlink b/internal/src/io.patagia.hostd.varlink
similarity index 100%
rename from hostd/src/io.patagia.hostd.varlink
rename to internal/src/io.patagia.hostd.varlink
diff --git a/hostd/src/io.systemd.hostname.varlink b/internal/src/io.systemd.hostname.varlink
similarity index 100%
rename from hostd/src/io.systemd.hostname.varlink
rename to internal/src/io.systemd.hostname.varlink
diff --git a/hostd/src/io_patagia_hostd.rs b/internal/src/io_patagia_hostd.rs
similarity index 100%
rename from hostd/src/io_patagia_hostd.rs
rename to internal/src/io_patagia_hostd.rs
diff --git a/hostd/src/io_systemd_hostname.rs b/internal/src/io_systemd_hostname.rs
similarity index 100%
rename from hostd/src/io_systemd_hostname.rs
rename to internal/src/io_systemd_hostname.rs
diff --git a/internal/src/lib.rs b/internal/src/lib.rs
new file mode 100644
index 0000000..8e3b981
--- /dev/null
+++ b/internal/src/lib.rs
@@ -0,0 +1,2 @@
+pub mod io_patagia_hostd;
+pub mod io_systemd_hostname;