• C 85.2%
  • Shell 10.6%
  • Makefile 4.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
najdek 915a65e232 submodule: update payload-manager to v0.5.2
and bump version to 0.1.5
2026-09-29 16:02:02 +02:00
.github/workflows ci: automate version parsing in release workflow 2026-06-11 18:25:17 +02:00
include submodule: update payload-manager to v0.5.2 2026-09-29 16:02:02 +02:00
src feat: add WebKit browser return-to-home support 2026-08-16 15:21:03 +02:00
third_party submodule: update payload-manager to v0.5.2 2026-09-29 16:02:02 +02:00
.gitignore Initial commit 2026-06-11 15:09:33 +02:00
.gitmodules Initial commit 2026-06-11 15:09:33 +02:00
build_release.sh Initial commit 2026-06-11 15:09:33 +02:00
Dockerfile.sdk Initial commit 2026-06-11 15:09:33 +02:00
LICENSE Initial commit 2026-06-11 15:09:33 +02:00
Makefile feat: add USB-to-data directory sync via @sync directive 2026-06-12 18:31:28 +02:00
README.md docs: update README 2026-06-13 15:38:48 +02:00

ps5-unified-autoloader

A standalone PS5 ELF payload that automates loading payloads. This is intended for integration into jailbreak chains rather than direct end-user usage.

What it does

When loaded via elfldr (e.g. as part of your jailbreak chain), autoloader.elf:

  1. Kills the entry point app (YouTube PPSA01650/01651/01652 or Artemis Lua games like Aerial Life, Aibeya, etc.) if it is running
  2. Kills BD Disc Player (NPXS40140) if it is running, using a careful suspend→wait→kill sequence
  3. Waits for elfldr to be ready on port 9021 (up to 10 seconds)
  4. Looks for the autoload.txt configuration file in the following order (highest priority first):
    • App-specific directories on USB (/mnt/usb[0-7]/ps5_autoloader_<app>/autoload.txt, where <app> is bdjb for BD Disc Player or the Title ID of the entry point app, e.g. PPSA01650 for YouTube)
    • App-specific directory in /data (/data/ps5_autoloader_<app>/autoload.txt)
    • Generic directories on USB (/mnt/usb[0-7]/ps5_autoloader/autoload.txt)
    • Generic directory in /data (/data/ps5_autoloader/autoload.txt)
  5. If found: launches each payload listed in the config via elfldr
  6. If not found: automatically starts the bundled Payload Manager

autoload.txt format

# This is a comment — ignored
@sync                  # move config directory to /data if all loads succeed
mypayload.elf          # loaded from the same directory as this autoload.txt
anotherpayload.elf
!1000                  # sleep 1000 ms before next entry
third_payload.elf
  • One entry per line
  • Filenames are resolved relative to the directory containing autoload.txt (e.g. if config is on /mnt/usb0/ps5_autoloader/autoload.txt, then mypayload.elf resolves to /mnt/usb0/ps5_autoloader/mypayload.elf)
  • Absolute paths (starting with /) are used as-is
  • Lines starting with # are comments
  • Lines starting with ! are sleep commands: !<ms> sleeps for that many milliseconds
  • Lines starting with @ are directives:
    • @sync: If loaded from a USB drive, this moves the entire active configuration directory (including all payloads and autoload.txt) to the internal /data partition on the PS5. The process runs only after all payloads have loaded successfully with zero errors. It clears the target internal directory, copies the files, verifies them byte-by-byte, and then deletes the folder from the USB drive so that subsequent boots run locally without needing the USB.

Building

Requirements

  • Docker
  • git (with submodules, only needed for -b builds)

Clone

git clone https://github.com/itsPLK/ps5-unified-autoloader.git
cd ps5-unified-autoloader
./build_release.sh
# or explicitly:
./build_release.sh -d

Build (compile pldmgr from source)

git submodule update --init --recursive
./build_release.sh -b

This uses pldmgr's own Docker image (which includes libmicrohttpd, mbedTLS, libcurl) to build pldmgr, then uses a separate lean SDK image to build the autoloader.

Output

autoloader_v0.1.0_abc1234.elf

Structure

autoloader.elf          ← load this via elfldr
  └─ pldmgr.elf         ← embedded fallback (launched if no autoload.txt found)