A wide-ranging PlayStation 4 emulator update
shadPS4 v0.21.0, titled “Until Mavethee Dawn,” is a broad release for the early PlayStation 4 emulator. The update covers the core runtime, system libraries, video processing and shader recompilation rather than focusing on one individual feature.
The release includes SDL packages for Windows, Linux and macOS hosts. shadPS4 emulates PlayStation 4 software on those computer platforms; it is not software intended to be installed directly on a modified PlayStation 4. The project’s core does not include a graphical interface, and its README points users who want a more approachable frontend toward QtLauncher.
Core fixes improve files, memory and platform handling
The update corrects several internal memory and filesystem behaviors. MemoryManager::Free no longer unmaps beyond the range being released, while backing-write operations use virtual-memory-area pointers instead of copies. The filesystem now reports stable identities through stat and fstat, identifies file types under the /addcont path and avoids aborting when a guest path passes through a regular file.
Executable handling also gains broader metadata support. shadPS4 now recognizes the PT_SCE_MODULE_PARAM program-header case, processes ELF metadata and toolchain comments, and avoids aborting when optional ELF metadata segments cannot be read. JIT patching at addresses outside a loaded module has also been corrected.
Several changes target macOS systems using Rosetta 2. The release works around mistranslated negated scalar comparisons, VMASKMOVPS and VMASKMOVPD crashes, and register clobbering in the related workaround. RenderDoc integration gains a macOS library name and an alternate path.
Startup and shutdown behavior receives multiple fixes. The emulator no longer clears temporary data on boot, shutdown can be re-entered on the same thread without deadlocking, and shutdown checks whether ELF information was initialized. AccurateSleep reuses one high-resolution waitable timer per thread, while Windows fiber stacks are moved away from the GPU-tracked heap.
More PlayStation 4 services are implemented
The library layer adds mounting and unmounting for application temporary data, along with improved handling for additional content loaded from linked services. Add-on entitlement keys and service labels are corrected, giving applications more complete responses when they query downloadable content and temporary storage.
Virtual USB media receives high-level emulation through libSceUsbStorage. The release also corrects the associated device-information layout and population, while the music service can receive USB storage device information. A new music-player-service implementation and safer RIFF-header detection for ATRAC9 expand the audio-related library coverage.
Video playback support grows through libSceVdecCore high-level emulation and VideoCore server-interface callbacks. The videodec2 path now drains pending frames and uses RAII for resource handling. Network changes include a rewrite of np_auth, improved score transfers and rankings, socket receive-queue reporting, and responses to PlayStation 4 device discovery on UDP port 987.
Input and sharing support also expands. shadPS4 implements scePadReadExt and scePadReadStateExt, reports the DualShock 4 touchpad height as 942, and adds sceSharePlayGetCurrentConnectionInfoA. A disconnected microphone is stubbed in libSceVoice to address reported hangs in Call of Duty: Black Ops II and Call of Duty: Black Ops III; this is a project-reported fix, not a guarantee that either game will run correctly.
Other library changes add I/O event queue APIs integrated with Core::Net, posix_flock and sceKernelFlock, improved Neo mode handling, save-data backup completion callbacks and additional filesystem symbols. The release fixes a reported issue that prevented platinum trophies from unlocking, corrects Audio3D attribute identifiers in the regular and OpenAL paths, and improves timezone and daylight-saving calculations.
Kernel error handling becomes more predictable
A large set of kernel changes improves the results returned by common filesystem operations. Removing a non-empty directory now fails with ENOTEMPTY. Creating a directory without an existing parent returns ENOENT, while attempting to create one beneath a regular file returns ENOTDIR. The same missing-parent behavior applies to open with O_CREAT, and unlink reports ENOENT when its target does not exist.
Writing through a read-only file descriptor now returns EBADF. ftruncate validates invalid lengths and read-only descriptors with EINVAL. The release also fixes the /dev/null device, improves filesystem validation and posix_select, and corrects self-rename deletion and host-path tracking in posix_rename.
Timed mutexes now attempt a non-waiting lock when their deadline has already passed. PlayGo receives fixes for language-mask handling and its default installation speed, while the kernel gains improved support for several missing or incomplete system interfaces.
Video Core changes target rendering correctness
Video Core receives the second part of its garbage-collector work alongside numerous Vulkan and command-processing fixes. The runtime now copies every mip level in CopyImageWithBuffer, supports stencil-only depth targets with independent stencil sizing, and corrects synchronization between CE and DE counters in PM4 packets.
Texture-cache handling is more careful when images are created or refreshed. Subresource data is retained when a parent image is first created, stale CPU-dirty contents are not copied during ExpandImage, and GPU-modified images can be dropped when the guest has overwritten their untracked edges. Image refreshes reset the relevant hash, and subresource extents are compared separately for each dimension.
Command processing adds support for the PM4 IT_GET_LOD_STATS packet, PM4 Type 2 and Rewind packets in the Constant Engine, and PM4 streamout buffer updates. Chained indirect buffers are followed without returning early, packet traversal advances using the size read before execution, and global CE task scheduling is corrected.
Rasterization now bounds render passes without attachments by their scissor region. RenderDoc can also be used on drivers without capture-replay support, which gives developers another diagnostic option on systems lacking that Vulkan capability.
Shader translation handles more GPU behavior
The shader recompiler adds support for undefined 64-bit integer values, preserves control-flow-graph fallthrough edges and stabilizes phi-node deduplication. GetUserData is excluded from phi folding, and barrier analysis now accounts for singleton dimensions in local data share usage.
The recompiler handles buffer-cache invalidation instructions, accepts S_SLEEP as a scheduling hint, reads HW_ID.SE_ID and supports GsOp::EmitCut in S_SENDMSG. Derivative detection now includes coarse derivatives through MimgModifier::CoarseDerivative.
A new fast_shader_math setting allows relaxed floating-point rules when selected. This is a translation trade-off: the release notes identify the setting but do not promise a universal performance or compatibility result for every game.
Availability and documented requirements
Version v0.21.0 was published on October 30, 2026. The listed downloads are shadps4-linux-sdl-0.21.0.zip, shadps4-macos-sdl-0.21.0.zip and shadps4-win64-sdl-0.21.0.zip.
The README states that the core can boot installed game folders and PlayStation 4 ELF files. It documents keyboard and controller mappings, including support for Xbox and DualShock controllers, and allows bindings to be customized in the settings menu. QtLauncher is recommended for users who want a graphical interface.
Some games require PlayStation 4 firmware modules in the emulator’s sys_modules folder. Those modules must be dumped from a legally owned PlayStation 4 console. The project also maintains separate compatibility information for individual games, but the v0.21.0 release notes do not establish universal compatibility for the titles shown in the project background.
Overall, v0.21.0 concentrates on filling in system interfaces and correcting the behavior applications encounter around files, input, networking, content, audio, video and synchronization. The project remains in early development, so compatibility and behavior can vary between games and host systems.





