diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 315a6e0862fc4475b70c41578ad6aa7e10c6c5ee..fafeb820b17ed203e244c63caa73c1f973854f99 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -15,6 +15,7 @@ build:
         PACKAGE:
          - Agda
          - JuicyPixels
+         - VulkanMemoryAllocator
          - brick
          - composite-base
          - hint
@@ -33,6 +34,7 @@ build:
          - sdl2-image
          - sdl2-mixer
          - sdl2-ttf
+         - vulkan
          - wai-app-static
 
 devour:
diff --git a/README.md b/README.md
index e6c0ecb69d53db29a33beeb6052d23477a608b55..590605e430a06aefe9b4477bb1fa7bd013d3ed0e 100644
--- a/README.md
+++ b/README.md
@@ -6,16 +6,15 @@ extends
 
 While horizon-core only contains packages required to bootstrap the horizon
 toolchain, horizon-advance contains packages required for canary testing
-any compatibility issues with GHC mainline.
-
-Businesses and individuals who require advance warning of particular
-open source packages for compatibility issues are encouraged to file
-a request here.
+any compatibility issues with GHC mainline. This includes a mix of things
+that make heavy use of system libraries, or perhaps template-haskell or
+type-checker plugins.
 
 The following things are always expected to be here:
 
 * Agda
 * JuicyPixels
+* VulkanMemoryAllocator
 * brick
 * composite-base
 * hint
@@ -35,6 +34,7 @@ The following things are always expected to be here:
 * sdl2-mixer
 * sdl2-ttf
 * wai-app-static
+* vulkan
 
 This is the master branch building against the GHC 9.12 pre-release.
 
diff --git a/configuration.nix b/configuration.nix
index 625f723abf098fbb2ba98397ac308056e44d3b99..0a5ca6b9ebb50d44ec57aaa2c51d9eae1fed609d 100644
--- a/configuration.nix
+++ b/configuration.nix
@@ -58,6 +58,8 @@ final: prev: {
 
   postgresql-libpq-configure = addPkgconfigDepend prev.postgresql-libpq-configure pkgs.postgresql;
 
+  vulkan = prev.callPackage ./pkgs/vulkan.nix { vulkan = pkgs.vulkan-loader; };
+
   zlib = prev.callPackage ./pkgs/zlib.nix { inherit (pkgs) zlib; };
 }
 
diff --git a/horizon.dhall b/horizon.dhall
index e6744253518c042beca70265204dfe893e7b6d78..f0bf11f345a08ceecacaba83825a685bb16c1b8f 100644
--- a/horizon.dhall
+++ b/horizon.dhall
@@ -8,6 +8,7 @@ let packages =
       , Only = H.callHackage "Only" "0.1"
       , RSA = H.callHackage "RSA" "2.4.1"
       , STMonadTrans = H.callHackage "STMonadTrans" "0.4.8"
+      , VulkanMemoryAllocator = H.callHackage "VulkanMemoryAllocator" "0.11.0.1"
       , aeson-typescript = H.callHackage "aeson-typescript" "0.6.3.0"
       , authenticate-oauth = H.callHackage "authenticate-oauth" "1.7"
       , base64 = H.callHackage "base64" "1.0"
@@ -65,6 +66,7 @@ let packages =
       , hxt-charproperties = H.callHackage "hxt-charproperties" "9.5.0.0"
       , hxt-regex-xmlschema = H.callHackage "hxt-regex-xmlschema" "9.2.0.7"
       , hxt-unicode = H.callHackage "hxt-unicode" "9.0.2.4"
+      , inline-c = H.callHackage "inline-c" "0.9.1.10"
       , insert-ordered-containers =
           H.callHackage "insert-ordered-containers" "0.2.6"
       , io-streams = H.callHackage "io-streams" "1.5.2.2"
@@ -170,6 +172,7 @@ let packages =
       , uuid = H.callHackage "uuid" "1.3.16"
       , vector-hashtables = H.callHackage "vector-hashtables" "0.1.2.0"
       , vinyl = H.callHackage "vinyl" "0.14.3"
+      , vulkan = H.callHackage "vulkan" "3.26.2"
       , 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 7c875a42c3832a61a019fae3c31a9de8a902c000..7b0fadb8fb88badd1426db48ef8a738bd664421c 100644
--- a/horizon.lock
+++ b/horizon.lock
@@ -22,6 +22,10 @@
   , mapValue =
       "3aad1a5a3d3a50cd7fcc00a9f1aee5a2d9de7ccb757c441d7f2036e31ef74392"
   }
+, { mapKey = "VulkanMemoryAllocator"
+  , mapValue =
+      "bf4031301e99bb1b361cf84c96a73f0e8f9f9e9a907eccecbd582a379bb157fb"
+  }
 , { mapKey = "aeson-typescript"
   , mapValue =
       "8318137885b308ff64dc033ab2da68570e947a247407838b62e874343a9e18e8"
@@ -214,6 +218,10 @@
   , mapValue =
       "51842564d5164e5343626153affa5804555de5523fb3f362bbb4f011c4ef09b4"
   }
+, { mapKey = "inline-c"
+  , mapValue =
+      "cd06cb210b2962062b6fc208d40f546487f49a5dcd777433f6fc34d60df14aa6"
+  }
 , { mapKey = "insert-ordered-containers"
   , mapValue =
       "03c7cf01ac7ec68aba7b787a6353a598011d3d26194a1e8ed14270b3bbae1b39"
@@ -578,6 +586,10 @@
   , mapValue =
       "7c1db280b3209be20d3044b990f2c6a1f170832ab6a70605c23103676f09aba7"
   }
+, { mapKey = "vulkan"
+  , mapValue =
+      "6786aaf81cb17130abaa7ec0fe1aae90fa0e55471542d5e36ade489fcde6a343"
+  }
 , { mapKey = "wai-app-static"
   , mapValue =
       "91e738d5f409ba43ae0a474bc9ea722cf240845ae253742bceb2af397af825d0"
diff --git a/overlay.nix b/overlay.nix
index 4d3f749f07c2830e31b2ef9b4655667c5245e27b..7f2019cc985c081657b4ffd916809da15347a30b 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -14,6 +14,8 @@ final: prev: with pkgs.haskell.lib; {
 
   STMonadTrans = f final prev "STMonadTrans" (final.callPackage (./pkgs/STMonadTrans.nix) { });
 
+  VulkanMemoryAllocator = f final prev "VulkanMemoryAllocator" (final.callPackage (./pkgs/VulkanMemoryAllocator.nix) { });
+
   aeson-typescript = f final prev "aeson-typescript" (final.callPackage (./pkgs/aeson-typescript.nix) { });
 
   authenticate-oauth = f final prev "authenticate-oauth" (final.callPackage (./pkgs/authenticate-oauth.nix) { });
@@ -110,6 +112,8 @@ final: prev: with pkgs.haskell.lib; {
 
   hxt-unicode = f final prev "hxt-unicode" (final.callPackage (./pkgs/hxt-unicode.nix) { });
 
+  inline-c = f final prev "inline-c" (final.callPackage (./pkgs/inline-c.nix) { });
+
   insert-ordered-containers = f final prev "insert-ordered-containers" (final.callPackage (./pkgs/insert-ordered-containers.nix) { });
 
   io-streams = f final prev "io-streams" (final.callPackage (./pkgs/io-streams.nix) { });
@@ -292,6 +296,8 @@ final: prev: with pkgs.haskell.lib; {
 
   vinyl = f final prev "vinyl" (final.callPackage (./pkgs/vinyl.nix) { });
 
+  vulkan = f final prev "vulkan" (final.callPackage (./pkgs/vulkan.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/VulkanMemoryAllocator.nix b/pkgs/VulkanMemoryAllocator.nix
new file mode 100644
index 0000000000000000000000000000000000000000..16d13ff6bc558da7dfa402493d21db9098becfbb
--- /dev/null
+++ b/pkgs/VulkanMemoryAllocator.nix
@@ -0,0 +1,25 @@
+{ mkDerivation, base, bytestring, lib, system-cxx-std-lib
+, transformers, vector, vulkan
+}:
+mkDerivation {
+  pname = "VulkanMemoryAllocator";
+  version = "0.11.0.1";
+  sha256 = "d5256ebe9bdeeb0939776d626cb845d894f4eaaea6647b550dd16a2498ce0f6d";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base bytestring system-cxx-std-lib transformers vector vulkan
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = true;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/expipiplus1/vulkan#readme";
+  description = "Bindings to the VulkanMemoryAllocator library";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/inline-c.nix b/pkgs/inline-c.nix
new file mode 100644
index 0000000000000000000000000000000000000000..ebdedd944a9b6fb4d054a99a53da80704239e28c
--- /dev/null
+++ b/pkgs/inline-c.nix
@@ -0,0 +1,33 @@
+{ mkDerivation, QuickCheck, base, bytestring, containers, hashable
+, hspec, lib, mtl, parsec, parsers, prettyprinter, raw-strings-qq
+, regex-posix, split, template-haskell, transformers
+, unordered-containers, vector
+}:
+mkDerivation {
+  pname = "inline-c";
+  version = "0.9.1.10";
+  sha256 = "6d0d2e8e49f27925713d7d4550c2e901418b7dfbd6b288e0d3a8fd47165ea4b1";
+  isLibrary = true;
+  isExecutable = true;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base bytestring containers hashable mtl parsec parsers
+    prettyprinter template-haskell transformers unordered-containers
+    vector
+  ];
+  testHaskellDepends = [
+    base containers hashable hspec parsers prettyprinter QuickCheck
+    raw-strings-qq regex-posix split template-haskell transformers
+    unordered-containers vector
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = true;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  description = "Write Haskell source files including C code inline. No FFI required.";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/vulkan.nix b/pkgs/vulkan.nix
new file mode 100644
index 0000000000000000000000000000000000000000..18fc64b721bedce3800100c53a5decadf9624fda
--- /dev/null
+++ b/pkgs/vulkan.nix
@@ -0,0 +1,29 @@
+{ mkDerivation, base, bytestring, containers, inline-c, lib, tasty
+, tasty-discover, tasty-hunit, template-haskell, transformers
+, vector, vulkan
+}:
+mkDerivation {
+  pname = "vulkan";
+  version = "3.26.2";
+  sha256 = "0ca86754fdf6eb66a9e6b8da896637705a204dd949b3e81f4a7a902f18cb1ef8";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base bytestring transformers vector ];
+  libraryPkgconfigDepends = [ vulkan ];
+  testHaskellDepends = [
+    base containers inline-c tasty tasty-hunit template-haskell
+  ];
+  testToolDepends = [ tasty-discover ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = true;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/expipiplus1/vulkan#readme";
+  description = "Bindings to the Vulkan graphics API";
+  license = lib.licenses.bsd3;
+  broken = false;
+}