shadPS4 0.21.0: A PS4 Emulator Learns to Say ENOTEMPTY
By Indie Kings | October 31, 2026
Updated October 31, 2026: shadPS4, the PlayStation 4 emulator, shipped version 0.21.0 on October 30, 2026 with 95 changes across its core, libraries, video core and shader recompiler. The repository reports 33,993 stars, 2,881 forks and 236 contributors, is GPL-2.0 licensed, and was created on October 24, 2022.
Image: a PlayStation 4 console and DualShock 4 controller. Credit: Evan-Amos via Wikimedia Commons, public domain.
A build with 95 changes
shadPS4 is an early PlayStation 4 emulator written in C++ for Windows, Linux and macOS. The repository is the emulator core, not a finished desktop application. Users are expected to download the separate QtLauncher if they want a graphical interface, and the project says so in bold at the top of its README. That split matters because the release notes describe engine work that most players will only feel indirectly: filesystem behavior, USB storage, audio services, video decoding and the shader compiler.
The release notes open with "Another week another release," but the tag dates show a slower rhythm. Version 0.19.0 landed on October 2, 0.20.0 on October 14 and 0.21.0 on October 30. The cadence is closer to every two weeks than every week. The 0.21.0 tag carries the codename Until Mavethee Dawn and lists 95 bullet points under four headings: Core, Libraries, Video Core and Shader Recompiler. That is a large changelog for a point release, even by emulator standards.
The project describes itself as early in development and warns against expecting a flawless experience. Its README names Bloodborne, Dark Souls Remastered and Red Dead Redemption as games that can run, which is a useful reminder of how far PS4 emulation has moved. It is still not a substitute for a console. The compatibility list is a separate repository, and the firmware modules needed by some games must be dumped from a legally owned PlayStation 4. The emulator does not ship Sony's system software.
The scale is unusual for a project this young. At 33,993 stars and 236 contributors, shadPS4 has become the reference open-source PS4 emulator. The 322 open issues and pull requests suggest a busy review queue rather than a quiet codebase. The GPL-2.0 license keeps derivatives open, and the project accepts contributions through GitHub pull requests. None of that changes the core advice: this is a compatibility project, and compatibility projects are judged by the games that boot, not by the size of the changelog.
The filesystem gets strict
The most interesting work in 0.21.0 is not graphical. It is the emulator's decision to return the same errors a real PS4 would return. The release makes rmdir fail with ENOTEMPTY when a directory is not empty, mkdir fail with ENOENT when the parent does not exist and with ENOTDIR when the parent is a file, open with O_CREAT fail with ENOENT when the parent is missing, unlink fail with ENOENT when the file does not exist, writes to a read-only descriptor fail with EBADF and ftruncate reject bad lengths with EINVAL.
That list looks like housekeeping. It is actually emulation accuracy. Games probe the filesystem constantly: they check whether a save directory exists, create temporary files, rename data, test for add-on content and branch on the result. An emulator that returns success where the console returns failure can push a game into a state it would never reach on real hardware. A missing error code can turn a clean "not found" path into a corrupted save, a hang or a crash much later. Returning the right errno is how a compatibility layer stops guessing.
The same release adds stable file identities in stat and fstat, allows file type identification for the /addcont path, stops aborting when a guest path passes through a regular file, implements posix_flock and sceKernelFlock, and fixes self-rename deletion and host path tracking in posix_rename. It also implements temporary data mount and unmount for app content, loads additional content from linked services, populates add-on entitlement keys and improves Neo mode handling. These are the plumbing changes that let a game treat the emulated console as a console instead of a folder of files.
The USB layer got its own stack. The release implements libSceUsbStorage HLE for virtual USB media access, corrects the OrbisUsbStorageDeviceInfo layout and adds USB storage device information to the music player service. It also implements I/O event queue APIs with Core::Net integration and answers PS4 device discovery on UDP 987. A game that expects to find a USB device, or a local companion app that expects to discover a console, now has something to talk to.
- Core: input smoothing, Rosetta 2 workarounds, ELF metadata, memory manager fixes and shutdown deadlocks.
- Libraries: filesystem errors, USB storage, app content, music, video decode, trophies, save data and networking.
- Video Core: garbage collection, stencil-only depth targets, texture cache retention and PM4 streamout updates.
- Shader Recompiler: control flow edges, phi ordering, LDS barriers, buffer cache invalidation and a fast math setting.
Trophies, USB and Apple Silicon
One line in the changelog will matter more to completionists than any rendering fix: np_trophy no longer fails to unlock the platinum trophy. A single missed unlock call can leave a profile stuck at the last trophy even when every other condition is met. The release also delivers save data backup completion callbacks, implements sceSharePlayGetCurrentConnectionInfoA, improves np_score data transfer and friend ranking, and reports the DualShock 4 touchpad height as 942 instead of 950. The last item is a small example of the same principle: a game that maps touches against the wrong height will misread input at the edges.
Media handling expanded in several directions. The emulator implements libSceMusicPlayerService HLE and its USB storage device information call, adds libSceVdecCore HLE with VideoCore server interface callbacks, drains pending frames in videodec2, and auto-detects RIFF headers for ATRAC9 in the AJM path. It also stubs a disconnected microphone in libSceVoice to fix hangs in Black Ops 2 and Black Ops 3. Those are the kinds of fixes that turn a game from "boots" into "playable," even though none of them appear in a screenshot.
Apple Silicon owners get a separate cluster of work. The release works around Rosetta 2 mistranslating negated scalar compares, fixes a Rosetta 2 crash on VMASKMOVPS and VMASKMOVPD, and fixes register clobbering in that workaround. RenderDoc support gains a macOS library name and an alternate path. The README is blunt about the requirements: macOS 26.0 or newer, and no Intel Macs. The emulator is native on Apple Silicon, but it still carries compatibility patches for the translation layer that some users may hit.
The graphics path is a long list of cache and synchronization fixes rather than a new renderer. The release adds the second part of a garbage collector, supports stencil-only depth targets, keeps subresource data when a parent image is created, drops GPU-modified images whose untracked edges the guest overwrote, fixes CE and DE counter synchronization in PM4 packets, handles PM4 Type 2 and Rewind packets in the constant engine, and implements streamout buffer updates. The shader compiler adds a fast_shader_math setting to relax float rules, preserves control flow fallthrough edges, stabilizes phi deduplication order and handles buffer cache invalidation instructions. These are the changes that reduce flicker, missing effects and shader compilation stalls over time.
Project card
| Item | Detail |
|---|---|
| Repository | shadps4-emu/shadPS4 on GitHub |
| Purpose | Early PlayStation 4 emulator and debugger core written in C++ |
| Platforms | Windows, Linux and macOS; macOS 26.0 or newer, no Intel Macs |
| GUI | Separate QtLauncher; the core repository does not include a GUI |
| License | GPL-2.0 |
| Scale | 33,993 stars, 2,881 forks, 236 contributors, 322 open items |
| Created | October 24, 2022 |
| Latest release | v0.21.0, codename Until Mavethee Dawn, October 30, 2026 |
| Changes in 0.21.0 | 95 bullet points across Core, Libraries, Video Core and Shader Recompiler |
| Filesystem work | ENOTEMPTY, ENOENT, ENOTDIR, EBADF and EINVAL returns, plus stable file identities |
| Hardware layers | USB storage HLE, music player service, video decode HLE and UDP discovery |
| Known games | Bloodborne, Dark Souls Remastered and Red Dead Redemption, per the README |
| Firmware | Some modules must be dumped from a legally owned PlayStation 4 |
FAQ
What is shadPS4?
An early open-source PlayStation 4 emulator written in C++ for Windows, Linux and macOS. It is the emulator core, with a separate QtLauncher for the graphical interface.
What is new in version 0.21.0?
The release lists 95 changes, including stricter filesystem error returns, USB storage emulation, music and video service HLE, a platinum trophy fix and more Rosetta 2 workarounds on Apple Silicon.
Can it run Bloodborne?
The README names Bloodborne among the games that can run, along with Dark Souls Remastered and Red Dead Redemption. Compatibility varies by game and by build, so check the separate compatibility list before buying anything.
Does shadPS4 need PS4 firmware?
Some games need firmware modules placed in the emulator's sys_modules folder. The project says those modules must be dumped from a legally owned PlayStation 4 and does not provide them.
Is shadPS4 legal?
The emulator itself is open source under GPL-2.0. Running games still requires legally obtained copies, and the project does not supply game files or Sony's firmware.
Where do I download it?
Use the shadps4-emu/shadPS4 releases page for the core and the shadps4-qtlauncher releases for the GUI. The README warns that the core alone has no graphical interface.
Bottom Line
shadPS4 0.21.0 is a compatibility release disguised as a changelog. The headline numbers are 95 changes and a new codename, but the substance is the unglamorous work that makes a console emulator trustworthy: returning the right filesystem errors, mounting add-on content, answering discovery packets, unlocking a platinum trophy and keeping texture caches coherent. Those fixes do not demo well, and they are exactly what separates a project that boots a few games from one that can mature.
The caution is the same as it was for the previous release. shadPS4 is early, the GUI is a separate download, macOS support is Apple Silicon only and some games need dumped firmware. The 322 open items and the weekly-to-biweekly release rhythm suggest the project is moving quickly, but speed is not the same as stability. Use the QtLauncher, check the compatibility list for the specific game you care about, and treat every build as a test build rather than a finished product.
Sources
- GitHub shadps4-emu/shadPS4 release v0.21.0, codename Until Mavethee Dawn, 95 changes and release date, published October 30, 2026
- GitHub shadps4-emu/shadPS4 README, platforms, GUI split, supported games, firmware requirements and macOS 26 requirement, accessed October 31, 2026
- GitHub API metadata for shadps4-emu/shadPS4, stars, forks, contributors, open items, license, creation date and latest commit, accessed October 31, 2026
- GitHub shadps4-emu/shadPS4 releases list, version dates for 0.19.0, 0.20.0 and 0.21.0, accessed October 31, 2026
Related: FEX-Emu 2610: AVX-VNNI and a 1GB Cap for the Disk Cache | ps5-linux: Turning a PS5 Into a Linux Desktop on 3.00 to 13.60