Before you start
- A 64-bit x86 PC running Windows or Linux. ARM machines are not a target, apart from the experimental Rosetta path on Macs.
- A Vulkan 1.1 GPU driver with graphics and compute queues. AnyPS5 prefers a discrete GPU over an integrated one.
- The two release files for your OS: the relinker and the matching library archive from v0.1.1. See the download guide.
-
A clean ELF executable of the title, with its bundled modules in
sce_module/,sce_modules/orprx/next to it. A SELF container is rejected with an error.
source/
input.elf
sce_module/
<bundled ELF modules>
AnyPS5 does not include or download games, and this guide does not cover dumping or decrypting them. Use only software you are legally entitled to use. If you just want to see the toolchain work, the official compatibility list includes a public homebrew, DOOM Shareware for PS5.
Command builder
Choose your setup and copy the command. Everything runs in your browser; nothing is uploaded.
Windows, step by step
-
Download the two files
From the latest release, get
relinker-v0.1.1.exeandprx-windows-v0.1.1.zip. Put them in an empty working folder with a plain ASCII path, such asC:\anyps5. -
Prepare the input
Create a
sourcefolder inside it containing the clean ELF and itssce_modulefolder, as shown above. -
Run the relinker
Open PowerShell in the working folder:
PowerShell.\relinker-v0.1.1.exe --windows source\input.elf app.exeOn an Intel processor, add
--to-intel:PowerShell · Intel CPU.\relinker-v0.1.1.exe --windows --to-intel source\input.elf app.exeThe relinker prints a
Guest module:line for each bundled module it converts, and writes them underapp0\. Exit code 0 means success; 2 means the conversion failed and the reason is on stderr. -
Unpack the system libraries
PowerShellExpand-Archive prx-windows-v0.1.1.zip -DestinationPath .You should now have a
libsfolder next toapp.exe, containing.prxfiles and three MinGW DLLs. -
Add the title's resources and run
Copy the title's remaining files into
app0\, keeping their structure, then start the program:PowerShell.\app.exe
On Windows a title's direct memory, up to 13,824 MiB, is committed in full when it is allocated. If installed RAM plus page file cannot cover it, the
program stops with create direct memory backing of 0x… bytes. Enlarge the page file or close other applications.
Linux, step by step
-
Download the two files
Get
relinker-v0.1.1andprx-linux-v0.1.1.zipfrom the latest release. -
Run the relinker
bashchmod +x relinker-v0.1.1 ./relinker-v0.1.1 source/input.elf app.elfLinux ELF is the default output, so no format flag is needed. On an Intel processor:
bash · Intel CPU./relinker-v0.1.1 --to-intel source/input.elf app.elf -
Unpack the system libraries
bashunzip prx-linux-v0.1.1.zip -
Give yourself access to udmabuf
With Mesa and other drivers that import dma-buf memory (not the NVIDIA proprietary driver), shared memory goes through
/dev/udmabuf. Many distributions restrict it to thekvmgroup:bashsudo usermod -aG kvm $USER # then log out and back in -
Add resources and run
Copy the title's remaining files into
app0/, then:bashchmod +x app.elf ./app.elf
Upstream currently lists “Linux with a hardware GPU” as not verified in its compatibility notes, so expect rough edges and report what you find.
macOS (experimental)
There are no macOS files in release v0.1.1. You can build the relinker yourself (see relinker-only build) and ask it for a Mach-O executable:
./relinker --macos --to-rosetta source/input.elf eboot # Apple silicon
./relinker --macos --to-intel source/input.elf eboot # Intel Mac
The output is x86-64 and runs under Rosetta on Apple silicon. The relinker-only build does not produce the system libraries, and the official compatibility table has no macOS column, so treat this as a path for contributors rather than players.
Relinker options
The syntax is relinker [options] <input.elf> <output>. There is no --help; running it with no arguments prints the usage line.
| Option | What it does |
|---|---|
--windows | Produce a Windows PE executable. Without it the output is a Linux ELF, whatever the file name. |
--macos | Produce an x86-64 Mach-O executable with bundled modules as Mach-O libraries. Cannot be combined with --windows. |
--to-intel | Convert supported AMD-only instructions in the executable and bundled modules. Stops with an error on anything it cannot convert. |
--to-rosetta | Everything --to-intel does, plus lowering instructions Rosetta lacks. Cannot be combined with --windows. |
--windows-gui | Use the Windows GUI subsystem instead of a console window. Needs --windows. |
--windows-diagnostics | Include start-up dependency diagnostics in the Windows output. Needs --windows. |
unused-filter=0|1|2 | How aggressively unused imports are filtered. 0 keeps everything (default), 1 filters unused non-PLT imports, 2 is strict and compacts the PLT. Written without leading dashes. |
--registry | Write a <output>.registry.json next to the executable (and one per converted module) for the import audit tool. |
--rpath <path> | Where the program looks for system libraries. Default: $ORIGIN/libs, i.e. a libs folder beside the executable. |
--autorun | Run the result straight after conversion, print its exit code and wait for Enter. |
--sce-module-path <path> | Parent folder that contains sce_module/, sce_modules/ or prx/, if they are not beside the input ELF. |
--module-dir <dir> | Also relink ELF modules from another directory under the module parent, for example Unity plugins in Media/Plugins. Repeatable. |
Four older flags, --skip-sce-module, --exclude-sce-module, --skip-syscall-check and --lazy-binding, are
deprecated. Upstream warns that programs relinked with them are extremely unstable and that they exist only for debugging.
Source: docs/user/USAGE.md.
Environment variables
Set these before starting the converted program, not the relinker.
| Variable | Effect |
|---|---|
ANYPS5_SYSTEM_FONTS | Folder with system fonts. Default: anyps5-fonts/ beside the executable. |
ANYPS5_LANGUAGE | Console language number the title is told about. Default: 1 (English, United States). |
ANYPS5_GPU | Part of a Vulkan device name, to run on a specific GPU instead of the first suitable one. |
ANYPS5_INPUT_CONFIG | Path to an input mapping file, instead of anyps5-input.ini beside the executable. |
APS5_STORE_AT_FLIP | Set to 1 to store pending GPU results at every display flip. Works around stale-memory glitches at a performance cost. |
APS5_PAD_INPUT_FILE | Absolute path to a command file for scripted controller presses. Meant for automated test runs. |
APS5_THREAD_PRIORITY | off (default), high or rt. Raises the priority of the graphics driver threads above the title’s threads. |
System fonts
Titles that open the console's system font sets need font files in anyps5-fonts/. If you do not have the console's own fonts, AnyPS5 accepts
openly licensed substitutes when present: NotoSans in Light, Regular, Medium and Bold (plus italics), NotoSansMono,
NotoSansThai and NotoSansCJK in the same four weights. Without either, those titles show no text.
Language codes
Values accepted by ANYPS5_LANGUAGE. Any other value stops the title at its first language query.
| Code | Language | Code | Language |
|---|---|---|---|
0 |
Japanese | 16 |
Polish |
1 |
English (United States) | 17 |
Portuguese (Brazil) |
2 |
French | 18 |
English (United Kingdom) |
3 |
Spanish | 19 |
Turkish |
4 |
German | 20 |
Spanish (Latin America) |
5 |
Italian | 21 |
Arabic |
6 |
Dutch | 22 |
French (Canada) |
7 |
Portuguese (Portugal) | 23 |
Czech |
8 |
Russian | 24 |
Hungarian |
9 |
Korean | 25 |
Greek |
10 |
Chinese (Traditional) | 26 |
Romanian |
11 |
Chinese (Simplified) | 27 |
Thai |
12 |
Finnish | 28 |
Vietnamese |
13 |
Swedish | 29 |
Indonesian |
14 |
Danish | 30 |
Ukrainian |
15 |
Norwegian |
Choosing a GPU
At start-up the program prints Physical device candidate lines with the name of each Vulkan device. Set ANYPS5_GPU to any
part of the name you want, case-insensitively. If nothing usable matches, start-up fails and the error lists the available names.
Check a title's imports before launching it
If you have the repository checked out, tools/import_audit.py tells you which system functions a converted title imports and whether the
built libraries provide them. It needs only Python 3.
relinker --registry source/input.elf app.elf
python3 tools/import_audit.py app.registry.json app.*.registry.json --libs build/core/libs/libs --modules source/sce_module
--registry writes one JSON file for the executable and one per converted module; pass all of them. Each import lands in one class: implemented, stub (the title loads but throws when it calls the function),
absent (the loader fails) or module (provided by the title's own library). Exit code 1 means something would block
loading.
Stuck on an error message? Go to errors and fixes. Want a gamepad? See controls.