diff --git a/manifest.dhall b/manifest.dhall
index d8d50c31a0a9f5230b8ac09128242a0c17d6dedd..c3a2f6baeb25dea09d33fdd1c6af4f6af6c24dc8 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -545,6 +545,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "unliftio-core" "0.2.0.1"
     , callHackage "unliftio" "0.2.23.0"
     , callHackage "unordered-containers" "0.2.19.1"
+    , callHackage "uri-encode" "1.5.0.7"
     , callHackage "uuid-types" "1.0.5"
     , callHackage "validity" "0.12.0.1"
     , callHackage "validity-aeson" "0.2.0.5"
diff --git a/overlay.nix b/overlay.nix
index fb51d57987c70f5db46746976ed7d313ef027d2d..e1785ff56c7d7cb953c9218ff9666b02f795133a 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -707,6 +707,8 @@ final: prev: with pkgs.haskell.lib; {
 
   unordered-containers = prev.callPackage (./pkgs/unordered-containers.nix) { };
 
+  uri-encode = prev.callPackage (./pkgs/uri-encode.nix) { };
+
   uuid-types = prev.callPackage (./pkgs/uuid-types.nix) { };
 
   validity = prev.callPackage (./pkgs/validity.nix) { };
diff --git a/pkgs/uri-encode.nix b/pkgs/uri-encode.nix
new file mode 100644
index 0000000000000000000000000000000000000000..40615a4bdce5d35b26d571631971f3bc8b4c7105
--- /dev/null
+++ b/pkgs/uri-encode.nix
@@ -0,0 +1,35 @@
+{ mkDerivation
+, base
+, bytestring
+, lib
+, network-uri
+, text
+, utf8-string
+}:
+mkDerivation {
+  pname = "uri-encode";
+  version = "1.5.0.7";
+  sha256 = "c79c624257833841a22890e4d2b0ab07e4be88e0f99474d328223815c0814252";
+  revision = "2";
+  editedCabalFile = "03pmvbi56gmg1z2wr3glncc7dbyh666bqp565inh31qzsp9zwmgj";
+  isLibrary = true;
+  isExecutable = true;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base
+    bytestring
+    network-uri
+    text
+    utf8-string
+  ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  description = "Unicode aware uri-encoding";
+  license = lib.licenses.bsd3;
+  broken = false;
+}