diff --git a/manifest.dhall b/manifest.dhall
index 0724591aa335dd6d77a1a3e10545069b60bd2366..56a9ae6feb1cbc820c9a2aa46ebd8726897395b0 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -471,6 +471,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "lens-family-th" "0.5.2.1"
     , callHackage "lens" "5.2"
     , callHackage "libsodium" "1.0.18.2"
+    , callHackage "libxml" "0.1.1"
     , callHackage "libyaml" "0.1.2"
     , callHackage "lift-type" "0.1.0.1"
     , callHackage "lifted-async" "0.10.2.1"
diff --git a/overlay.nix b/overlay.nix
index 15c4811fae5a88d07f88701ec6ff4bac47e28fcb..16f1ddbc1f6fab16579cd1e9b159b3dfe6f84677 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -699,6 +699,8 @@ self: with pkgs.haskell.lib; {
 
   libsodium = self.callPackage (./pkgs/libsodium.nix) { };
 
+  libxml = self.callPackage (./pkgs/libxml.nix) { };
+
   libyaml = self.callPackage (./pkgs/libyaml.nix) { };
 
   lift-type = self.callPackage (./pkgs/lift-type.nix) { };
diff --git a/pkgs/libxml.nix b/pkgs/libxml.nix
new file mode 100644
index 0000000000000000000000000000000000000000..b8b860dca1fb8acd7bfbb73918754940ae7e90ec
--- /dev/null
+++ b/pkgs/libxml.nix
@@ -0,0 +1,24 @@
+{ mkDerivation, base, bytestring, lib, libxml2, mtl }:
+mkDerivation {
+  pname = "libxml";
+  version = "0.1.1";
+  sha256 = "d1e92affb41e7abe1c7b692aa24ae47dbcf3636f2753bb85a3469c370d9afb07";
+  configureFlags = [
+    "--extra-include-dir=${libxml2.dev}/include/libxml2"
+  ];
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base bytestring mtl ];
+  librarySystemDepends = [ libxml2 ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  description = "Binding to libxml2";
+  license = lib.licenses.bsd3;
+  broken = false;
+}