The main branch contains the U59 renderer, the validated Demon's Souls shader and compatibility changes, and the U59 integration work: command-processor and VRAM improvements, profile-guided optimization, and upstream's newer changes. No 60 FPS result is claimed.
- U59 feature changes and performance evidence
- Fork commit and file catalog through U59
- Current release: what is new, launch and build guide
This fork retains sanitized development history and upstream attribution. The badges and general project description below refer to upstream. Packaged Windows builds are available under Releases.
Weekly updates — game progress, recent fixes and ongoing development.
Development on Discord — KytyPS5 development.
KytyPS5 is a free and open-source PlayStation 5 emulator written in C++ for Windows and Linux, with experimental macOS support. It is based on a heavily modified version of Kyty. The project is in active development, and behavior can change significantly between builds.
Important
KytyPS5 is not affiliated with Sony Interactive Entertainment or PlayStation. The project does not distribute games or copyrighted system software. Use only game files that you have obtained legally.
KytyPS5 can boot 2D games and a selection of 3D games, including titles built with Unreal Engine 4/5, Unity, and custom engines. External low-level emulation modules are neither required nor planned.
Development is currently focused on expanding game compatibility and improving boot reliability.
Windows and Linux are the primary platforms and receive the most testing.
macOS support is experimental. The emulator is built for x86-64 and runs on Apple Silicon under Rosetta 2, with Vulkan provided by MoltenVK. A small number of titles have been verified in-game on Apple Silicon hardware; see Building on macOS.
Community game test results are available in the KytyPS5 Compatibility List.
Compatibility, stability, and performance can vary between versions. You may encounter crashes or graphical glitches, so please include the version you tested when reporting an issue.
Astro Bot
|
Dreaming Sarah
|
Neptunia ReVerse
|
SILENT HILL: The Short Message
|
Demon's Souls
|
UFC 5
|
And many more...
Testing games and submitting detailed bug reports are useful ways to contribute. Search existing issues first, then use the Game Emulation Status Report template and attach the complete log file.
Code contributions should be focused, build successfully on the platforms they touch, and include relevant tests where practical. Windows is the primary target, so a change that alters shared code should not regress it; changes confined to a platform's own code paths only need to build there. Because KytyPS5 is still evolving quickly, consider opening an issue before starting a large change.
Set up the clang-format hook after cloning:
Install pre-commit using the method appropriate for your platform:
- Arch Linux / CachyOS:
sudo pacman -S pre-commit - Other Linux / macOS / Windows:
python -m pip install pre-commit
Then install the Git hook:
python -m pre_commit install --install-hooksIt formats staged .cpp, .h, and .inc files in src.
The PS5 graphics architecture is based on AMD RDNA 2. Use AMD's RDNA 2 Instruction Set Architecture Reference Guide (document 70648) as the primary instruction-encoding reference when working on shader decoding and recompilation.
Important areas of the codebase:
src/graphics/shader/recompiler— instruction decoding, intermediate representation, control flow, resource tracking, and SPIR-V emissionsrc/graphics/guest_gpu— PS5 (Prospero) GPU formats and command processingsrc/graphics/host_gpu— Vulkan host backend and resource managementtests— focused memory, shader, and resource-tracking regression tests
The renderer targets Vulkan 1.3. Keep shader changes aligned with both the RDNA 2 ISA semantics and the Vulkan/SPIR-V validation rules.
- Windows 10 version 1803, a current Linux distribution, or macOS on Apple Silicon
- A 64-bit x86 processor (on macOS, an Apple Silicon processor with Rosetta 2)
- A Vulkan 1.3-capable GPU with current drivers (on macOS, Vulkan is provided by the bundled MoltenVK)
- Git
- CMake 3.22.1 or newer
- Ninja
- Visual Studio 2022 or Build Tools 2022 with the Desktop development with C++ workload and C++ Clang tools for Windows component
- Qt 6 for MSVC 2022 64-bit, including Concurrent, Network, and Widgets
- glslang (
glslangValidator) onPATH
The Microsoft C++ compiler (cl.exe) is not supported; use clang-cl.
Open an x64 Native Tools Command Prompt for Visual Studio 2022 (or the equivalent Developer PowerShell), change to the repository root, and initialize the dependencies:
git submodule update --init --recursiveConfigure the project. Replace the Qt path with the version installed on your system:
cmake -S . -B _Build/windows -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_PREFIX_PATH="C:/Qt/6.x.x/msvc2022_64"Build the launcher and stage a runnable installation:
cmake --build _Build/windows --target launcher
cmake --install _Build/windows --prefix _Build/windows/installThe finished application and its runtime dependencies will be placed in
_Build/windows/install.
Install the toolchain and the libraries the bundled SDL3 needs. Without the audio, Wayland and udev development packages SDL3 quietly configures itself without those backends, and the resulting build has no working sound and no gamepad hotplug:
sudo apt-get install --no-install-recommends \
clang lld ninja-build cmake git glslang-tools pkg-config \
libgl1-mesa-dev libx11-dev libxcursor-dev libxext-dev libxfixes-dev \
libxi-dev libxrandr-dev libxss-dev libxtst-dev libxkbcommon-dev \
libasound2-dev libpulse-dev libudev-dev libdbus-1-dev libwayland-dev wayland-protocolsQt 6 (Concurrent, Network, Widgets) is required for the launcher — either the distribution packages
(qt6-base-dev) or an official Qt installation.
git submodule update --init --recursive
cmake -S . -B _Build/linux -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_PREFIX_PATH="$Qt6_DIR"
cmake --build _Build/linux --target launcher --parallel
cmake --install _Build/linux --prefix _Build/linux/installThe install step copies the Qt libraries and plugins next to the binaries, so
_Build/linux/install runs without a matching system Qt. FFmpeg is linked statically
from the pinned KytyPS5 FFmpeg core
release, including VP9 and WebM support. System FFmpeg packages are not required.
To build kyty_emulator and the kyty_tests target without Qt, use a separate build directory:
git submodule update --init --recursive
cmake -S . -B _Build/linux-no-qt -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
-DKYTY_BUILD_LAUNCHER=OFF
cmake --build _Build/linux-no-qt --target kyty_emulator kyty_tests --parallelAs on Windows, the MSVC compiler is not used; Clang is required. cl.exe is rejected at configure
time.
The CMake source root is the repository root.
A development shell provides Clang, CMake, Ninja, Qt 6, the Vulkan headers, and the SDL3 backend
libraries. Enter it and configure exactly as on other Linux distributions; the shell exports
CMAKE_PREFIX_PATH and QT_PLUGIN_PATH, so the -DCMAKE_PREFIX_PATH="$Qt6_DIR" argument is not
needed:
nix-shell # or: nix develop
git submodule update --init --recursive
cmake -S . -B _Build/linux -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
cmake --build _Build/linux --target launcher --parallel
cmake --install _Build/linux --prefix _Build/linux/installThe configure step downloads the FFmpeg prebuilts and the xbyak, zydis, zstd, and ZArchive
sources, so it needs network access; a fully sandboxed nix build would require vendoring those
inputs. A Vulkan 1.3 driver must be available at runtime (on NixOS,
hardware.graphics.enable = true).
macOS builds target x86-64 and run under Rosetta 2 on Apple Silicon, so the PS5's x86-64 game code executes through the same translation layer as the emulator itself. Prebuilt archives are attached to releases; the steps below are for building from source.
Requirements:
- An Apple Silicon Mac with Rosetta 2 installed (
softwareupdate --install-rosetta) - Xcode (or the Command Line Tools)
- Homebrew packages:
brew install cmake ninja glslang - Qt 6 (Concurrent, Network, Widgets) with x86-64 support. The official Qt installation is universal and works; Homebrew's Qt is arm64-only and will not link
git submodule update --init --recursive
cmake -S . -B _Build/macos -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_PREFIX_PATH="$Qt6_DIR"
cmake --build _Build/macos --target launcher --parallel
cmake --install _Build/macos --prefix _Build/macos/installThe build re-signs kyty_emulator with the JIT entitlements it needs to execute translated
guest code; no manual signing step is required. When the launcher is built, the install
also produces _Build/macos/install/KytyPS5.app — double-click to launch the GUI.
A flat kyty_emulator is kept for CLI usage.
Vulkan comes from MoltenVK. Download MoltenVK-macos.tar from the
MoltenVK releases, then copy
MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib next to the flat kyty_emulator
(and, for the bundle, into KytyPS5.app/Contents/Frameworks/) and ad-hoc sign it:
codesign --force --sign - _Build/macos/install/libMoltenVK.dylib
# For the bundle (if present):
codesign --force --sign - _Build/macos/install/KytyPS5.app/Contents/Frameworks/libMoltenVK.dylib
codesign --force --sign - _Build/macos/install/KytyPS5.appRelease archives already include a signed libMoltenVK.dylib (both flat and inside the bundle).
Build every regression executable and run the registered tests with:
cmake --build _Build/windows --target kyty_tests
ctest --test-dir _Build/windows --output-on-failureUse _Build/linux instead of _Build/windows for a Linux build.
A ready-made Visual Studio Code setup is included in .vscode. It configures CMake
Tools to build the project with Ninja and clang-cl and provides launch profiles for both
launcher.exe and kyty_emulator.exe. It is Windows-only: VS Code settings cannot select a
compiler per platform, so on Linux configure from the command line as shown above.
Before using it:
- Install the CMake Tools and C/C++ extensions in Visual Studio Code.
- Update
CMAKE_PREFIX_PATHin.vscode/settings.jsonto point to your Qt 6 MSVC installation. - Update the
--gamepath in.vscode/launch.jsonfor the Debug kyty_emulator profile. - Open the repository in an x64 Visual Studio developer environment, configure the CMake project, and select a launch profile from Run and Debug.
Update your graphics driver before reporting rendering problems.
To use the graphical launcher:
.\_Build\windows\install\launcher.exe./_Build/linux/install/launcheropen _Build/macos/install/KytyPS5.app # or double-click in FinderOn first launch, add one or more game folders in the global settings. The launcher searches those
folders recursively for game directories containing eboot.bin and ZArchive (.zar) game dumps
whose archive root contains eboot.bin. Select a detected game and run it from the game list.
ZArchive dumps are mounted read-only and streamed directly; they do not need to be extracted first.
The emulator can also be started directly with a legally obtained game directory, ELF file, or ZArchive dump:
.\_Build\windows\install\kyty_emulator.exe --game "D:\Games\ExampleGame"
.\_Build\windows\install\kyty_emulator.exe --game "D:\Games\ExampleGame.zar"./_Build/linux/install/kyty_emulator --game "/games/ExampleGame"
./_Build/linux/install/kyty_emulator --game "/games/ExampleGame.zar"On macOS, the adjacent flat or app-bundled libMoltenVK.dylib is found automatically; no
environment variable is required:
./_Build/macos/install/kyty_emulator --game "/games/ExampleGame"To override the Vulkan loader, set SDL_VULKAN_LIBRARY:
SDL_VULKAN_LIBRARY=/path/to/libMoltenVK.dylib ./kyty_emulator --game "/games/ExampleGame"Run kyty_emulator --help to see the available graphics, logging, validation, profiling, and
debugging options.
AI tools may be used for research, reverse engineering, and development assistance. Contributors must fully understand, review, and test all code they submit and remain responsible for its correctness. Repository communication, including pull-request descriptions, code comments, and issue comments, must come from the human contributor rather than an autonomous AI agent.
Pull requests that include AI-assisted or AI-generated work should disclose the scope of the AI involvement and describe the human review and testing performed before submission. Unverified or untested generated changes may be closed without review.
KytyPS5 is licensed under the GNU General Public License version 2
(GPL-2.0-only).
This project is based on the original Kyty, which was released
under the MIT License. Kyty's original copyright and license notice are preserved in
LICENSES/Kyty-MIT.txt. Third-party components remain subject to the
licenses included with those components.
- InoriRus/Kyty — KytyPS5 is based on a heavily modified version of the original Kyty project.
- shadps4-emu/shadPS4 — reference for understanding PS4 memory behavior, GPU resource aliasing and cache coherency, and the AVPlayer implementation.





