Guides
shadPS4 Firmware Modules Explained: sys_modules, LLE vs HLE, Game Folders, Updates and DLC
Key points
- shadPS4's sys_modules folder holds individual PS4 system modules (.sprx files such as libSceNgs2.sprx and libSceFont.sprx), not the whole firmware. The README lists 34 supported modules.
- HLE means the emulator reimplements a system library; LLE means loading the original PS4 module. shadPS4 uses HLE for most libraries and switches to LLE for modules found in sys_modules.
- Since v0.8.0 (April 2025) shadPS4 no longer installs PKGs. It reads extracted game folders that must contain eboot.bin and sce_sys/param.sfo.
- Updates go next to the game folder, named <folder>-UPDATE or <folder>-patch. DLC goes in a subfolder named after the game under user/addcont.
- PS5 emulators differ: KytyPS5 says external low-level modules are neither required nor planned.
On this page
The "firmware modules" shadPS4 talks about are individual PS4 system module files (.sprx) that go in its sys_modules folder, such as libSceNgs2.sprx (audio) and libSceFont.sprx (fonts). They are not the whole PS4 firmware. shadPS4 reimplements most system functions itself (HLE) and loads modules from sys_modules directly (LLE) to cover parts its own versions do not handle fully yet. The game itself is an extracted folder containing eboot.bin and sce_sys/param.sfo; since v0.8.0 shadPS4 no longer installs PKGs. Updates and DLC each have a fixed place, covered below.
Everything here was checked against shadPS4 v0.21.0 (2026-10-30).
What shadPS4 uses
| Item | What it is | Default location | Required? |
|---|---|---|---|
| Game folder | An extracted PS4 game with eboot.bin and sce_sys/param.sfo | Anywhere; add it as a game folder in the launcher | Yes |
| System modules (.sprx) | Individual PS4 system libraries | user/sys_modules/ | README says games need them to run properly; some games break without them |
| Fonts | PS4 system fonts | font and font2 under user/fonts/ | Some games |
| Updates | Game version updates | <folder>-UPDATE next to the game folder | Depends on the game |
| DLC | Add-on content | user/addcont/<game ID>/ | Depends on the game |
| Shader cache | Generated by the emulator | user/cache/<game ID> | Automatic |
Where the user folder lives: if there is a user folder next to the shadPS4 program, it is used (portable mode). Otherwise it is %APPDATA%\shadPS4 on Windows, ~/Library/Application Support/shadPS4 on macOS and ~/.local/share/shadPS4 on Linux. Since v0.16.0 the config file is config.json (it used to be config.toml; shadPS4 offers to migrate the old one on startup).
HLE vs LLE: how an emulator handles PS4 system libraries
PS4 games constantly call system libraries for graphics, audio, controllers, video decoding, font rendering and more. An emulator has to provide those libraries to the game. There are two ways, defined by the shadPS4 wiki as:
| HLE (high-level emulation) | LLE (low-level emulation) | |
|---|---|---|
| Definition | The emulator provides a reimplementation of the original module | Uses the console's firmware files directly |
| Pros | No console files needed; usually faster; can be tuned for PC | Behaves like the real console, including features nobody has reimplemented |
| Cons | Unfinished functions fail or get skipped | Needs the module file; only some modules can be loaded this way |
shadPS4 is HLE-first. The kernel (libkernel), GPU driver (GnmDriver), video output (VideoOut), controller (Pad) and about 80 other system libraries are written by the emulator team. For some libraries where HLE is still incomplete (mostly audio decoding, video playback, fonts, and JSON/XML parsing), shadPS4 lets you load the real module through LLE.
The loading rule is simple: if the module is in sys_modules, it gets loaded. If not, shadPS4 falls back to HLE where one exists (the log says "switching to HLE"). If there is no HLE either, the call does nothing (the log says "No HLE available"), and the game may lose audio or subtitles, crash, or hang on a screen.
Modules placed in a sys_modules/<game ID>/ subfolder only apply to that game, which helps with per-game issues. The sys_modules location can also be changed in the settings.
Which modules sys_modules supports
The 34 modules listed in the shadPS4 README (2026-11-01), grouped roughly by name:
| Group | Modules |
|---|---|
| Audio | libSceAt9Enc, libSceAudiodec, libSceAudiodecCpu, libSceAudiodecCpuDdp, libSceAudiodecCpuDtsHdLbr, libSceAudiodecCpuHevag, libSceAudiodecCpuM4aac, libSceNgs2 |
| Video playback | libSceAvPlayer, libSceAvPlayerStreaming, libSceBeisobmf, libSceBemp2sys |
| Fonts | libSceFont, libSceFontFt, libSceFreeTypeOl, libSceFreeTypeOptOl, libSceFreeTypeOt, libSceWkFontConfig |
| Images | libSceJpegDec, libSceJpegEnc, libScePngEnc |
| Data formats | libSceJson, libSceJson2, libSceXml, libSceCesCs (character encoding) |
| System and other | libSceLibcInternal, libSceUlt, libSceRtc, libSceRudp, libScePsmKitSystem, libSceSystemGesture, libSceDepth, libScePadTracker, libSceMoveTracker |
All files end in .sprx. The names tell you what each one handles: intro videos go through AvPlayer, sound effects and music through Ngs2 and the Audiodec family, text through the Font and FreeType families. So the symptoms of a missing module usually show up there too: no audio, black video, or missing text.
Why the full PS4 firmware is not needed
The PS4 system update is a single PS4UPDAT.PUP file containing the whole operating system. shadPS4's approach is "reimplement most things, fill gaps with individual modules," so it never loads the full system and only uses the few dozen modules above plus fonts.
Some PS4 emulators take the opposite route. Obliteration aims to run real PS4 system software, and Emulation General Wiki notes that it therefore needs PS4 firmware files. As of 2026-11-01 it cannot run any games.
Game formats: PKG, extracted folders, eboot.bin
| Name | What it is | Works in shadPS4? |
|---|---|---|
| PKG | The PS4 install package format used for PS Store games, updates and DLC. Its contents are encrypted | No since v0.8.0 (2025-04-23), when PKG support was removed |
| Extracted game folder | The installed game files, unencrypted | Yes, and it is the only format now |
| eboot.bin | The game's main executable, in the folder root | Required |
| sce_sys/param.sfo | Game metadata: title, Title ID, version | Required; shadPS4 uses it to identify the game |
| .sprx / .prx | Dynamic libraries. Game-bundled ones live in the game folder; system ones go in sys_modules | Game-bundled ones load automatically |
Early shadPS4 could install some PKGs and shipped code to handle them. A March 2025 commit removed all of it, and the v0.8.0 release notes say "Removed fpkg support." Today shadPS4 does not handle encrypted install packages at all; it reads a plain folder.
CUSA IDs: a PS4 game's Title ID is four letters plus five digits. Bloodborne's European Game of the Year Edition, for example, is CUSA03173. PS4 does not encode the region in the prefix, so each regional release has its own ID. Built-in system apps use the NPXS prefix. shadPS4 game folders are usually named after this ID, and update folders, shader caches and per-game module folders are matched by it.
Where updates and DLC go
Updates sit at the same level as the game folder, named after the game folder plus -UPDATE (-patch also works). shadPS4 layers it on top of the base game at launch, so you do not merge files:
games/
├── CUSA00900/ ← base game (eboot.bin, sce_sys/…)
├── CUSA00900-UPDATE/ ← update
└── CUSA00900-mods/ ← optional: mod files
The same rule supports a -mods folder for mods, and there is a setting to ignore updates temporarily. Many compatibility reports note the game version they tested (Bloodborne 1.09, for example), and behavior can differ between versions.
DLC goes in a subfolder named after the game inside the add-on content directory. The default is user/addcont/<game ID>/, and the location can be changed in the launcher (QtLauncher) settings. The v0.21.0 release improved DLC (addcont) loading specifically. License-only DLC with no actual files (some unlock-type DLC) goes in user/licenses.
Multiple game folders: the launcher's "Paths" settings page lets you add several game directories and set separate directories for sys_modules, fonts and DLC.
Trophies
shadPS4 supports PS4 trophies. Showing them requires filling in the trophy key in user/keys.json. Without it, games still run normally.
Do PS5 emulators need any of this?
- KytyPS5's README says external low-level emulation modules are "neither required nor planned."
- SharpEmu's README says the project contains no copyrighted system firmware, game data or proprietary PlayStation assets.
- PS5 games also use
eboot.binas the main executable. In July 2026, SharpEmu's early project notes described loading real games' eboot.bin and loading system modules (PRX and sys_module). Current status is in PS5 emulator status.
Related guides
- Install and first setup: shadPS4 Windows setup guide
- Is your PC enough: PS4 emulator system requirements
- Which emulator: the best PS4 emulator in 2026
- Why PS4 can be emulated this way: PS4 vs PS5 emulation explained
- Legal questions: are PS emulators legal
FAQ
What is sys_modules in shadPS4?
It is a folder in shadPS4's user directory (user/sys_modules) for individual PS4 system module files (.sprx), such as libSceNgs2.sprx for audio or libSceFont.sprx for fonts. The shadPS4 README lists 34 supported modules. Modules placed there are loaded directly (LLE); anything missing falls back to the emulator's own reimplementation (HLE).
Does shadPS4 need the PS4 firmware?
Not the full firmware update file. shadPS4 only loads individual modules from sys_modules and fonts from user/fonts. The README says these modules are needed to run games properly. If one is missing, shadPS4 falls back to HLE where it exists; where it does not, that feature is missing and some games break.
What is the difference between LLE and HLE?
In the shadPS4 wiki's words, LLE (low-level emulation) uses the console's firmware files directly, while HLE (high-level emulation) provides a reimplementation of the original module. HLE needs no console files and is usually faster, but unfinished functions break. LLE behaves like the real console but needs the module file.
Can shadPS4 install PKG files?
Not anymore. Early shadPS4 versions could install some PKGs, but v0.8.0 (2025-04-23) removed PKG support. It now only reads extracted game folders that contain eboot.bin and sce_sys/param.sfo.
What does CUSA mean?
A CUSA number is a PS4 game's Title ID: four letters and five digits, for example CUSA00900. Each regional release of a game has its own ID, and PS4 system apps use the NPXS prefix. shadPS4 uses this ID to match game folders, update folders and shader caches.
Where do shadPS4 updates and DLC go?
Put the update folder next to the game folder, named after it with -UPDATE (or -patch), for example CUSA00900 and CUSA00900-UPDATE side by side. shadPS4 layers it on automatically. DLC goes in a subfolder named after the game inside the add-on content directory (user/addcont by default), which you can change in the launcher settings.
Sources
- shadPS4 official site
- shadPS4 blog: v0.21.0 release (DLC loading)
- PS4 Developer Wiki: PKG files
- PS4 Developer Wiki: Title ID
- Wikipedia: ShadPS4
- KytyPS5 official site
- SharpEmu official site
- DSOGaming: PS5 emulator SharpEmu can now boot Demon's Souls Remake (2026-07)
- Emulation General Wiki: PlayStation 4 emulators (Obliteration needs PS4 firmware)