shadPS4 ships an emulator core with no GUI attached
GitHub describes it as PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C++. The repository metadata lists C++ as its primary language. The metadata lists the GPL-2.0 license. This article stays within the project description and details documented in the GitHub repository README.
At a glance
- What is it?
- shadPS4 is a C++ PlayStation 4 emulator core that publishes builds, four per platform build guides, and a fast moving pre-release tag, but no front end. It suits a developer or someone who already supplies their own launcher, and it punishes anyone who just wanted something to double click.
- Who is it for?
- Use it if you intend to read the source, build the core, or drive it from a front end you already control, and if you hold the game images and firmware you need. Skip the release page if you wanted a finished program, and check a specific title against the separate shadps4-compatibility repository before you depend on a version number, because the project's own status note tells you not to expect a flawless experience.
- Can I use it commercially?
- Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The release you download here is a core, not a playable program
The first thing the project does with you is warn you off its own builds. An IMPORTANT callout states that this is the emulator core, which does not include a GUI, and directs anyone who just wants to use the emulator as an end user to the QtLauncher releases instead. So the artefacts attached to this repository's releases are not the thing most people are looking for, and the thing most people are looking for lives in a separate repository. A core means the game execution, rendering and input handling exist with no front end wrapped around them, which is what you want if you are embedding or scripting it and what you want to avoid if you have a controller in your hand. The consequence is that walking the release list and expecting a double clickable program leaves you with a binary you have to drive from a terminal, and nothing here sketches what a replacement interface would have to take over.
Four build guides point outward and no toolchain command is in the file
Building is delegated to four separate documents rather than one set of instructions: a Docker build guide that also names VSCode as part of the containerised setup, plus dedicated pages for Windows, Linux and macOS, each linked into the documents directory. What the root of the repository shows is the machinery those pages have to cover. CMakeLists.txt sits beside CMakePresets.json and CMakeSettings.json, so the same project is described to CMake, to a list of named presets, and to Visual Studio. There is also flake.nix with flake.lock for Nix, a .gitmodules file beside an externals directory for fetched dependencies, a tests tree, and a LICENSES directory next to REUSE.toml. Licensing is worth a second look: the repository is recorded as GPL-2.0 while the file header carries an SPDX identifier of GPL-2.0-or-later. Dependency versions and submodule setup are not visible from the overview, so you follow a link per platform before a build even starts.
macOS stops at version 26.0 and Intel machines are out entirely
Platform coverage is stated twice and the two statements do not match. The repository description calls shadPS4 a PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD, while the general information section names Windows, Linux and macOS and adds the word early. FreeBSD appears only in the description, so nothing in the file tells you whether a FreeBSD build is exercised or merely intended. macOS carries the harder restriction: an IMPORTANT note says macOS users need at least macOS 26.0 to run shadPS4 and that Intel Macs are not supported. That closes the door on two groups of people, and it does so in a note under the build heading rather than in the platform list itself. Checking the description is therefore not enough to decide whether your machine qualifies, and on an Intel Mac there is no path described here beyond the statement that you are not supported.
The game argument has to sit last unless a flag moves it
Argument order is the one convention the file states outright, in the comments attached to its examples: the game argument is always the last one, unless manually specified otherwise. That rule explains why -g shows up in the third pattern, pulling the identifier forward so the remaining options can follow it.
shadPS4 CUSA00001 # Searches for a game folder called CUSA00001 in the list of game install folders, and boots it.
shadPS4 --fullscreen true --config-clean CUSA00001 # the game argument is always the last one,
shadPS4 -g CUSA00001 --fullscreen true --config-clean # ...unless manually specified otherwise.
shadPS4 /path/to/game.elf # Boots a PS4 ELF file directly. Useful if you want to boot an executable that is not named eboot.bin.
shadPS4 CUSA00001 -- -flag1 -flag2 # Passes '-flag1' and '-flag2' to the game executable in argv.A bare identifier is searched for in the list of game install folders and then booted, and a path to a .elf file bypasses that search when the executable is not called eboot.bin. Everything after the double dash is forwarded to the game itself, which makes the separator the only route to the title's own arguments. The consequence is that a wrapper script which reorders flags hands the emulator an option where it expects a game folder, and the file gives you no error text for that case.
F12 degrades to a plain screenshot when RenderDoc is absent
Five function keys are bound, and one of them changes meaning depending on what is installed on your machine. F10 toggles the FPS counter, Ctrl+F10 shows video debug info, F11 is fullscreen, F12 triggers a RenderDoc capture or a game only screenshot if RenderDoc is unavailable, and Alt+F12 captures a screenshot that includes HUD and dialog overlays. So a graphics debugging key doubles as an ordinary screenshot button, quietly. The consequence for someone chasing a rendering bug is that pressing F12 without RenderDoc installed gives you an image of the frame and no capture, with nothing on screen to say which of the two happened. Two smaller traps sit in the same table: some keyboards need the Fn key held to reach the function row, and Mac users are told to use Command where the table says Ctrl and Command+F11 for fullscreen, to avoid clashing with system key bindings.
Controller bindings are stored per game rather than per install
The control layer is more configurable than the rest of the project. Mappings are edited from a Controller button in the settings menu, and the file says inputs support up to three keys per binding, mouse buttons, and mouse movement mapped to joystick input. Custom bindings are saved per game. That last clause is the one that shapes daily use: a layout you tune for one title is not inherited by the next, so a library of several games means redoing the mapping for each one rather than configuring a machine once. The published table is a starting layer, not a description of a file format, and the documentation it points to for controls is the settings screen itself. Xbox and DualShock controllers work out of the box, so most people never open that screen, and the people who do open it discover the per game storage only after they switch titles.
Firmware modules have to be placed in sys_modules by hand
The emulator can load some PlayStation 4 firmware files, and the supported modules must be placed in a folder named sys_modules inside the project. What follows is a long table of .sprx file names and nothing else: libSceAt9Enc.sprx, libSceAudiodec.sprx, libSceAudiodecCpu.sprx, libSceAvPlayer.sprx, libSceFont.sprx, libSceFreeTypeOl.sprx, libSceBeisobmf.sprx, libSceCesCs.sprx and many more audio, font and player modules. The directory is not filled in for you, and the file does not say where the modules come from. The table is also names without grouping, so a person holding a folder of firmware cannot work out from this list which entries a given title actually needs, and cannot tell whether a title that boots badly is missing a module or hitting an unrelated gap. That is the practical cost of the arrangement: supported means the loader knows the file, not that anything supplies it.
Early in development, with new builds landing between numbered tags
The status section is blunt: shadPS4 is early in development and you should not expect a flawless experience, and the project says it began for fun, works in limited free time, and may take some time before it can run more complex games while promising small, regular updates. The release history matches that description. Version 0.17.0, codenamed Garbage Collector's Edition, was published on 2026-07-30, version 0.18.0, codenamed UltraPersona, followed on 2026-08-18, and a pre-release build named for 2026-09-30 sits alongside them while the last push is dated 2026-09-22. The consequence is that a version number tells you very little about any given game, so the project points you at a separate compatibility repository to check whether a title works before you rely on it. Codenames also vary per release, which means a report that mentions 0.18 does not pin down the behaviour anyone reproduced.
Editorial conclusion
Use it if you intend to read the source, build the core, or drive it from a front end you already control, and if you hold the game images and firmware you need. Skip the release page if you wanted a finished program, and check a specific title against the separate shadps4-compatibility repository before you depend on a version number, because the project's own status note tells you not to expect a flawless experience.
Frequently asked questions
Is the shadPS4 emulator legal?
The project states a GPL-2.0 licence for its own code and says the work began for fun, and it says nothing about the legality of running commercial game images or console firmware. Check the rights to the software you load before you start.
What is shadPS4 used for?
It is an early PlayStation 4 emulator core written in C++ for Windows, Linux and macOS. The project names Bloodborne, Dark Souls Remastered and Red Dead Redemption among the games it can successfully run.
Is Bloodborne fully playable on shadPS4?
Bloodborne appears in the project's list of games the emulator can successfully run, but the same file says shadPS4 is early in development and should not be expected to be flawless. The separate shadps4-compatibility repository is the place to check a specific title.
how to use shadps4 cli
Run the binary with the game argument last, use -g when you need options after it, point it at a .elf path to boot something not named eboot.bin, and put anything meant for the game itself after a double dash. The --help flag lists every available command with a longer description of each.
how to use shadps4 on mac
You need at least macOS 26.0, and Intel Macs are not supported. Mac users are also told to use the Command key where the mapping table says Ctrl, and Command+F11 for fullscreen instead of the system binding.
how to install shadps4 on windows
The file carries no install command for end users. It points Windows users who want a graphical front end to the QtLauncher releases, and links a separate document for building the core on Windows yourself.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/shadps4-emu-shadps4)