
- Open SourceGitHub
- shadPS4 Emulator ProjectDeveloper
- 6 Nov 2026Page Updated
Details
- Developers
- shadPS4 Emulator Project
- Source Code
- GitHub
- Page Updated
Supported Systems
Platform Support
Screenshots
Overview
shadPS4 is an open source PlayStation 4 emulator for Windows, Linux and macOS, written in C++ and released under the GPL 2.0 licence. The project started as a hobby and is still early in development, but it can already run games such as Bloodborne, Dark Souls Remastered and Red Dead Redemption.
The main shadPS4 builds are the emulator core, which has no graphical interface of its own. The team recommends that most people use QtLauncher, the official graphical launcher, which is developed separately; both are available below. The stable releases are the numbered versions of the core, and the QtLauncher builds are its latest development builds.
On macOS, shadPS4 needs macOS 26 or later and does not support Intel Macs. Compatibility varies a lot between games, so check the project’s compatibility list before you start. shadPS4 is under active development with regular releases.
Key Features
Runs Big Games
Can run Bloodborne, Dark Souls Remastered and Red Dead Redemption.
Open Source
Written in C++ and released under the GPL 2.0 licence.
QtLauncher
An official graphical launcher, QtLauncher, is developed alongside.
Cross Platform
Runs on Windows, Linux and macOS.
Advertisement
Download shadPS4
Stable
What's new in v0.21.0shadps4 v0.21.0 - codename Until Mavethee Dawn
Another week another release . There are ton of changes , so why not ?
Core
- Properly check where an input came from for digital->analog input smoothing
- cpu_patches: Work around Rosetta 2 mistranslating negated scalar compares
- file_sys: Report stable file identities in stat and fstat
- Allow file type identification for ‘/addcont’ path
- emulator: stop clearing temporary data on boot
- Add PT_SCE_MODULE_PARAM case
- cpu_patches: Fix JIT patching at addresses outside any module
- core: Fix MemoryManager::Free unmapping past the released rang
- file_sys: don’t abort when a guest path goes through a regular file
- use VMA pointers instead of copies in TryWriteBacking
- cpu_patches: Workaround Rosetta 2 crash on VMASKMOVPS/PD
- Handle ELF metadata and toolchain comments program headers
- common: reuse one high-resolution waitable timer per thread in AccurateSleep
- Don’t abort when optional ELF metadata segments can’t be read
- cpu_patches: Fix register clobbering in Rosetta 2 VMASKMOV workaround
- renderdoc: Add library name for macOS
- renderdoc: Add alternate path for macOS
- lru_cache: Fix early stop in ForEachItemBelow
- Avoid deadlock when Shutdown is re-entered on the same thread
- Check if elf info is initialized when shutting down
Libraries
- kernel: Implement I/O event queue APIs with Core::Net integration
- kernel: fail rmdir on non-empty directories with ENOTEMPTY
- app_content: Implement sceAppContentTemporaryDataMount
- kernel: Try lock without wait in timed mutex if deadline has passed
- usbd: Implement libSceUsbStorage HLE for virtual USB media access
- http: allowing headers with surrounding whitespace
- kernel, rtc: Fix timezone and DST calculation
- music: Implement libSceMusicPlayerService HLE
- videodec2: Drain pending frames and wrap in RAII
- usbstorage: Correct OrbisUsbStorageDeviceInfo layout and population
- app_content: Implement sceAppContentAddcontUnmount
- app_content: Implement TemporaryData mount and unmount
- np_auth rewrite
- Ajm: Auto-detect and safely parse RIFF headers for ATRAC9
- libSceVoice: stub a disconnected microphone to fix BO2 and BO3 hangs
- net: report recv_queue_length in sceNetGetSockInfo
- kernel: Register missing filesystem symbols and fix /dev/null device
- kernel: return ENOENT from mkdir when the parent does not exist
- kernel: return EBADF when writing to a file opened read-only
- kernel: return EINVAL from ftruncate for bad lengths and read-only fds
- kernel: return ENOENT from unlink when the file does not exist
- pad: Implement scePadReadExt and scePadReadStateExt
- gnmdriver: Fix remapped compute queues starting at a stale ring offset
- app_content: Load additional content from linked services (SERVICE_ID_ADDCONT_ADD_n)
- app_content: Populate add-on entitlement keys
- app_content: Fix entitlement keys and service labels
- playgo: Fix language mask UB and default install speed
- kernel: Fix self-rename deletion and host path tracking in posix_rename
- music: Implement sceMusicPlayerServiceSetUsbStorageDeviceInfo
- kernel: Implement posix_flock and sceKernelFlock
- audio3d: Fix swapped attribute ids
- audio3d: Fix swapped attribute ids (OpenAL)
- kernel: Improve Neo mode handling and implement missing APIs
- kernel: return ENOENT from open(O_CREAT) when the parent does not exist
- videodec: libSceVdecCore HLE and VideoCore server interface callbacks
- np_trophy: Fix platinum trophy never unlocking
- threads: fix stack base value in windows
- share_play: Implement sceSharePlayGetCurrentConnectionInfoA
- net: answer PS4 device discovery on UDP 987
- np_score : fixed a few inaccurancy returns and data transfers
- kernel: Fix filesystem validation and posix_select
- pad: report the DualShock 4 touchpad height (942) instead of 950
- kernel: return ENOTDIR from mkdir when the parent is a file
- save_data: deliver backup completion callbacks
- fiber: Relocate fiber stacks away from GPU tracked heap on Windows
…
95295b8f109663f70c2dac685e6232aa97be1353f6ed0a5d5e0c5dd24a797d88
7c41c58254461d742b5edf564e23795697b63e9e46de11d0e1ed67bd2cbaae68
391b585d3131ebf69c585410349117d9436e529151e430156c02f7ffde364b8f
QtLauncher
What's new in v2026-11-06shadPS4QtLauncher-2026-11-06-ecc8507
eeb6498aa29d62c5f9ee2469884f6538a0a4d299cdfb6b1f48b03e17534debd9
9b7cc947e122b4db01f50587b2b199594aea0e676d151373f455f4112b45e80e
720541b13be901368c80e433cfaf44da68f1916c75ff49e2fd6a2f3cd72987ad
