diff --git a/manifest.dhall b/manifest.dhall
index 08a434805fb95763cc84163d6903e3340eeaae00..a9c6cac82576799452ffb46a47d4a7a736cae7ed 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -599,6 +599,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "polysemy-vinyl" "0.1.5.0"
     , callHackage "polysemy-zoo" "0.8.0.0"
     , callHackage "polysemy" "1.7.1.0"
+    , callHackage "port-utils" "0.2.1.0"
     , callHackage "postgresql-libpq" "0.9.4.3"
     , callHackage "postgresql-migration" "0.2.1.4"
     , callHackage "postgresql-simple" "0.6.4"
diff --git a/overlay.nix b/overlay.nix
index 60e67855108cd929d32ce3e40eded1c7a6491df1..bcad996c3f2a80583a37e137b7f50f2d430cc64d 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -923,6 +923,8 @@ self: with pkgs.haskell.lib; {
 
   polysemy-zoo = self.callPackage (./pkgs/polysemy-zoo.nix) { };
 
+  port-utils = self.callPackage (./pkgs/port-utils.nix) { };
+
   postgresql-libpq = self.callPackage (./pkgs/postgresql-libpq.nix) { };
 
   postgresql-migration = self.callPackage (./pkgs/postgresql-migration.nix) { };
diff --git a/pkgs/port-utils.nix b/pkgs/port-utils.nix
new file mode 100644
index 0000000000000000000000000000000000000000..28531ecf459ff24ca166583a9053843c2de413e3
--- /dev/null
+++ b/pkgs/port-utils.nix
@@ -0,0 +1,30 @@
+{ mkDerivation
+, async
+, base
+, hspec
+, lib
+, network
+, stm
+, transformers
+}:
+mkDerivation {
+  pname = "port-utils";
+  version = "0.2.1.0";
+  sha256 = "b6f830946a9daa829bb14dc7f105f28ae2cfa2ee8540af8550e3c975ac7117de";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base network ];
+  testHaskellDepends = [ async base hspec network stm transformers ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/jfischoff/port-utils#readme";
+  description = "Utilities for creating and waiting on ports";
+  license = lib.licenses.bsd3;
+  broken = false;
+}