Dusk Graphics Backends — Pick the Right One

Dusk supports D3D12, D3D11, Metal, Vulkan, OpenGL, OpenGL ES, and WebGPU. Here's which backend to pick on your platform and how to switch.

Published 2026-05-10

Most coverage of Dusklight says “Vulkan-based” or “uses Aurora.” Both are misleading: Dusklight actually exposes seven distinct graphics backends in its prelaunch settings, and you can switch between them. This matters for compatibility — if Vulkan misbehaves on your GPU, you have six fallbacks before giving up.

This is verified directly from Dusklight’s source code (src/dusk/ui/settings.cpp on the main branch). The dropdown lives at:

Settings → Prelaunch → Graphics Backend

A restart is required after changing it (Dusklight shows the “A restart is required to apply selected options” modal).


The 7 backends

BackendNative toUse it when
D3D12Windows 10+Default on modern Windows; lowest CPU overhead
D3D11Windows 7+Older Windows or older GPU driver lacking D3D12
MetalmacOS, iOSDefault on Apple platforms
VulkanWindows, Linux, AndroidDefault on Linux & Android; cross-platform fallback
OpenGLAlmost everythingUniversal fallback; older / weirder hardware
OpenGL ESAndroid, embeddedMobile / lower-power GPUs
WebGPU(experimental)Future-facing; not the default anywhere yet

You don’t usually need to know all this — Dusklight picks a sensible default for your platform on first launch. But knowing what’s available is useful when troubleshooting “Dusklight won’t render anything” issues.


Per-platform recommendations

Windows

First try: D3D12. It’s the modern Microsoft API with the best CPU overhead for high-frame-rate rendering — exactly what you want for Dusklight’s unlocked framerate target. If issues: Drop to D3D11 (older driver compatibility) or Vulkan (driver-bug workaround). Last resort: OpenGL.

macOS (Apple Silicon and Intel)

First try: Metal. Apple’s native API; Apple Silicon’s GPU is designed around Metal; expect best results here. If issues: Vulkan via MoltenVK (translation layer) — works but adds overhead. Last resort: OpenGL — Apple deprecated OpenGL in 10.14 and it’s slow, but it sometimes works when newer APIs hit driver bugs.

If Dusk crashes on first launch on Apple Silicon (#826, #805), trying Vulkan or OpenGL is one of the standard workarounds.

Linux (desktop & Steam Deck)

First try: Vulkan. Modern Linux Mesa + AMD/NVIDIA drivers are excellent on Vulkan, and Steam Deck is heavily Vulkan-optimized via Proton’s DXVK + the Mesa stack. If issues: OpenGL — works on essentially everything but is slower. Note: D3D12, D3D11, and Metal are not available on Linux (different OS APIs).

Android

First try: Vulkan. Modern Android phones (Snapdragon 8xx series, Tensor, MediaTek Dimensity) all have good Vulkan drivers. If issues: OpenGL ES — older devices or those with buggy Vulkan implementations. Performance hit, but works.

iOS / iPadOS

First try: Metal. Apple-native; iOS GPU drivers are Metal-first. Fallback: There’s no good fallback on iOS — Metal is what you have. If it doesn’t work, the app generally won’t run.

WebGPU

This is currently experimental. WebGPU is a newer cross-platform API (originally from the web standards world) that promises modern rendering on a single API across all platforms. As of v1.0.0, it’s exposed in the dropdown but not the default. Choose this if you’re curious or testing — not for daily play.


How to switch

  1. Launch Dusklight
  2. Open Settings (top of the prelaunch menu, or in-game via Back/Select)
  3. Switch to the Prelaunch tab
  4. Graphics Backend dropdown — pick a different option
  5. Dusklight shows the modal: “A restart is required to apply selected options. Restart now to…”
  6. Click Restart now

If Dusklight hangs or crashes during the restart, force-quit and relaunch — settings persist between sessions.


Why Dusklight has so many backends (vs other ports)

This is worth noting because it’s a real differentiator:

  • Ship of Harkinian (the OoT port) historically supported a smaller set of backends — primarily DX11 and OpenGL.
  • Cemu (Wii U emulator) primarily uses Vulkan, with a legacy OpenGL fallback.
  • Dolphin supports Vulkan, OpenGL, and D3D12.

Dusklight supporting 7 backends is unusually broad. This is largely thanks to the Aurora cross-platform framework Dusklight is built on — Aurora abstracts over the rendering APIs so Dusklight can target many backends from one codebase.

The practical upside: when one backend has a driver bug for your specific GPU, you have six fallbacks. The downside: Dusklight’s renderer is constrained to features all backends can support — so you won’t see, e.g., D3D12-exclusive ray tracing tricks.


Common backend-switching scenarios

”Dusklight launches but the screen is black with audio”

  • This is usually a renderer-specific issue. Try a different backend.
  • On Windows: switch from D3D12 → D3D11 → Vulkan.
  • On Linux: switch from Vulkan → OpenGL.
  • On Mac: switch from Metal → OpenGL.

”Dusklight won’t even launch / crashes immediately”

  • The current backend may not be initializing. Switching backends requires Dusklight to launch first (the dropdown is in-app).
  • If you can’t launch at all to change the setting, edit Dusklight’s config file directly.
  • Verified from the v1.0.1 source code (src/dusk/config.cpp): the file is config.json, formatted as pretty-printed JSON (parsed/written via nlohmann/json, indent=4). Keys are flat dot-namespaced strings such as backend.graphicsBackend and game.pauseOnFocusLost. Edit backend.graphicsBackend directly to switch backends without launching the app.
  • Config location is platform-specific (currently shipping v1.0.1; the next release line uses Dusklight instead of Dusklight with auto-migration):
    • Windows: %APPDATA%\TwilitRealm\Dusk\config.json
    • macOS: ~/Library/Application Support/TwilitRealm/Dusk/config.json
    • Linux: ~/.local/share/TwilitRealm/Dusk/config.json
  • Resolved by SDL_GetPrefPath("TwilitRealm", "Dusk") in current binaries. PR #1059 (merged 2026-05-12) also added a data_location.json descriptor enabling Default / Portable / Custom modes for relocating the directory.

”FPS is unexpectedly low”

  • Try a different backend; some GPUs have asymmetric performance across APIs.
  • Especially on older AMD GPUs, OpenGL may be slower than D3D11/12 or Vulkan.
  • On older Intel iGPUs, the opposite may be true.

”Dusklight runs but specific effects look wrong (bloom, shadows, etc.)”

  • The pulsating bloom bug at unlocked framerate (#825) is not backend-specific — it’s an interpolation issue. Switching backends won’t fix it.
  • For other rendering glitches, try a different backend to isolate whether it’s a renderer bug or a game logic bug.

Backend availability by platform (verified)

D3D12D3D11MetalVulkanOpenGLOpenGL ESWebGPU
Windows⚙️
macOS⚙️ (MoltenVK)⚙️
Linux⚙️
Android⚙️
iOS⚙️

Legend:

  • ✅ Available and a normal default option
  • ⚙️ Available but experimental / depends on extra runtime
  • ❌ Not available (no underlying OS API)

What’s missing (verifiability caveat)

The Dusk source code exposes the dropdown, but TwilitRealm hasn’t published:

  • A formal “official recommendation” of which backend to use per platform
  • Performance benchmarks comparing backends on the same hardware
  • A list of known driver bugs per backend

We’ve inferred the recommendations above from general knowledge of these APIs and Aurora’s design. If you have a specific backend issue, the Dusk GitHub issues page is the authoritative place to check, and the official Dusk Discord (discord.gg/dusktp) is where the team and community discuss workarounds.



Last updated: 2026-05-10. Backend list verified against src/dusk/ui/settings.cpp on main branch.

← Pillar guide · All features