diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index fafeb820b17ed203e244c63caa73c1f973854f99..498914e0d6124ea3e11d3895b52d792c9d6b06a2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -35,6 +35,7 @@ build:
          - sdl2-mixer
          - sdl2-ttf
          - vulkan
+         - vulkan-utils
          - wai-app-static
 
 devour:
diff --git a/README.md b/README.md
index 590605e430a06aefe9b4477bb1fa7bd013d3ed0e..6fe957d3527ad9d8b8800156f74be0b839e06035 100644
--- a/README.md
+++ b/README.md
@@ -33,8 +33,9 @@ The following things are always expected to be here:
 * sdl2-image
 * sdl2-mixer
 * sdl2-ttf
-* wai-app-static
 * vulkan
+* vulkan-utils
+* wai-app-static
 
 This is the master branch building against the GHC 9.12 pre-release.
 
diff --git a/horizon.dhall b/horizon.dhall
index f0bf11f345a08ceecacaba83825a685bb16c1b8f..d74533f6dd8d5b8465f5f9ce98f374adb85d3a85 100644
--- a/horizon.dhall
+++ b/horizon.dhall
@@ -173,6 +173,7 @@ let packages =
       , vector-hashtables = H.callHackage "vector-hashtables" "0.1.2.0"
       , vinyl = H.callHackage "vinyl" "0.14.3"
       , vulkan = H.callHackage "vulkan" "3.26.2"
+      , vulkan-utils = H.callHackage "vulkan-utils" "0.5.10.6"
       , wai-app-static = H.callHackage "wai-app-static" "3.1.9"
       , wai-extra = H.callHackage "wai-extra" "3.1.15"
       , webdriver = H.callHackage "webdriver" "0.12.0.0"
diff --git a/horizon.lock b/horizon.lock
index 7b0fadb8fb88badd1426db48ef8a738bd664421c..aeb1e350c12cca5247d8010275dcdae13f47d978 100644
--- a/horizon.lock
+++ b/horizon.lock
@@ -590,6 +590,10 @@
   , mapValue =
       "6786aaf81cb17130abaa7ec0fe1aae90fa0e55471542d5e36ade489fcde6a343"
   }
+, { mapKey = "vulkan-utils"
+  , mapValue =
+      "ca7fbda5e56049b079578c373282ee26889ad0f0994e2e9ff3a69df391c74e45"
+  }
 , { mapKey = "wai-app-static"
   , mapValue =
       "91e738d5f409ba43ae0a474bc9ea722cf240845ae253742bceb2af397af825d0"
diff --git a/overlay.nix b/overlay.nix
index 7f2019cc985c081657b4ffd916809da15347a30b..e155010f321261c89cae64d4b57aaa8199b1c334 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -298,6 +298,8 @@ final: prev: with pkgs.haskell.lib; {
 
   vulkan = f final prev "vulkan" (final.callPackage (./pkgs/vulkan.nix) { });
 
+  vulkan-utils = f final prev "vulkan-utils" (final.callPackage (./pkgs/vulkan-utils.nix) { });
+
   wai-app-static = f final prev "wai-app-static" (final.callPackage (./pkgs/wai-app-static.nix) { });
 
   wai-extra = f final prev "wai-extra" (final.callPackage (./pkgs/wai-extra.nix) { });
diff --git a/pkgs/vulkan-utils.nix b/pkgs/vulkan-utils.nix
new file mode 100644
index 0000000000000000000000000000000000000000..63e119065ca4946d92f165ed348a1095441db177
--- /dev/null
+++ b/pkgs/vulkan-utils.nix
@@ -0,0 +1,31 @@
+{ mkDerivation, Cabal, base, bytestring, cabal-doctest, containers
+, dependent-map, dependent-sum, doctest, extra, file-embed
+, filepath, lib, resourcet, template-haskell, temporary, text
+, transformers, typed-process, unordered-containers, vector, vulkan
+}:
+mkDerivation {
+  pname = "vulkan-utils";
+  version = "0.5.10.6";
+  sha256 = "2d83ed5557625115325b860ecbb682efc6fd55e313099dc587fd50c06f7e2977";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  setupHaskellDepends = [ base Cabal cabal-doctest ];
+  libraryHaskellDepends = [
+    base bytestring containers dependent-map dependent-sum extra
+    file-embed filepath resourcet template-haskell temporary text
+    transformers typed-process unordered-containers vector vulkan
+  ];
+  testHaskellDepends = [ base doctest ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = true;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/expipiplus1/vulkan#readme";
+  description = "Utils for the vulkan package";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file