Runtime requirements for Apex applications
Although the Vulkan SDK is required to build an Apex-enabled Mako application, it’s not necessary to run such an application. Nor is it necessary to ship a runtime or similar with your application, as the support needed is built in to a Vulkan-compatible GPU driver. This brief guide explains what to consider for the Apex-supported platforms.
Windows
What users need installed: a GPU driver that includes Vulkan. That driver also installs the Vulkan Loader (
vulkan-1.dll) intoSystem32/SysWOW64. You should not ship your own loader DLL.What you ship: just your app. Don’t include validation layers in release builds. If users get a
vulkan-1.dll not founderror, they need to (re)install a current graphics driver.Notes for linking: Link your Mako project against
Apex.libwhich in turn is linked againstvulkan-1.lib(import library) at build time; this forwards to the system loader at runtime. This happens automatically if you are using a Mako Apex NuGet package.
Ubuntu / Linux (e.g., Ubuntu 22.04/24.04)
What users need installed: the distro’s Vulkan Loader package (
libvulkan1) plus a driver ICD (e.g.,mesa-vulkan-driversfor AMD/Intel Mesa, or the proprietary NVIDIA/AMD driver packages). You should not bundlelibvulkan.so.1What you ship: just your app. Document the package prerequisites if you target minimal systems/containers.
macOS (no native Vulkan driver)
You have two viable patterns:
Bundle MoltenVK (Vulkan-on-Metal)
What you ship: MoltenVK with your app—either as a dynamic library/xcframework alongside the Vulkan Loader from the macOS SDK, or by having the loader load MoltenVK’s ICD. This is the most common production setup.
Result: Your app calls Vulkan; the loader finds MoltenVK; MoltenVK talks to Metal.
Static-link MoltenVK (bypass the loader)
What you ship: your app with MoltenVK statically linked (via
MoltenVK.xcframework). This skips the loader (so no validation layers), but it’s easy to deploy and great for App Store style distribution.
General guidance (all platforms)
Don’t ship your own loader on Windows/Linux; rely on the one from the OS/driver/distro. Use the loader to discover the user’s driver ICD(s).