{"id":36844326,"url":"https://github.com/phantomptr/ps5upload","last_synced_at":"2026-06-07T07:04:52.504Z","repository":{"id":331615089,"uuid":"1131512003","full_name":"phantomptr/ps5upload","owner":"phantomptr","description":"PS5 Upload is a tool designed to get your apps and homebrew onto your console without the headache of slow transfers.","archived":false,"fork":false,"pushed_at":"2026-05-27T04:38:33.000Z","size":23032,"stargazers_count":98,"open_issues_count":1,"forks_count":4,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-05-27T05:28:04.422Z","etag":null,"topics":["homebrew","ps5","ps5upload"],"latest_commit_sha":null,"homepage":"https://discord.gg/fzK3xddtrM","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phantomptr.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-10T06:37:43.000Z","updated_at":"2026-05-27T04:38:34.000Z","dependencies_parsed_at":null,"dependency_job_id":"c833dd24-eedc-4c37-a57e-2d7cde4b8000","html_url":"https://github.com/phantomptr/ps5upload","commit_stats":null,"previous_names":["phantomptr/ps5upload"],"tags_count":105,"template":false,"template_full_name":null,"purl":"pkg:github/phantomptr/ps5upload","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phantomptr%2Fps5upload","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phantomptr%2Fps5upload/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phantomptr%2Fps5upload/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phantomptr%2Fps5upload/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phantomptr","download_url":"https://codeload.github.com/phantomptr/ps5upload/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phantomptr%2Fps5upload/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33642318,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["homebrew","ps5","ps5upload"],"created_at":"2026-01-12T14:31:33.029Z","updated_at":"2026-06-07T07:04:52.498Z","avatar_url":"https://github.com/phantomptr.png","language":"TypeScript","funding_links":["https://ko-fi.com/B0B81S0WUA"],"categories":[],"sub_categories":[],"readme":"# ps5upload\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"logo.png\" alt=\"ps5upload\" width=\"420\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eFast, reliable transfers from your computer to your PS5.\u003c/strong\u003e\u003cbr/\u003e\n  Transfer · Mount · Browse — designed to live alongside your PS5-side tools.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/phantomptr/ps5upload/releases\"\u003e\u003cimg alt=\"release\" src=\"https://img.shields.io/github/v/release/phantomptr/ps5upload?display_name=tag\u0026sort=semver\u0026color=blue\" /\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg alt=\"license\" src=\"https://img.shields.io/badge/license-GPL--3-green\" /\u003e\u003c/a\u003e\n  \u003cimg alt=\"platforms\" src=\"https://img.shields.io/badge/platforms-macOS_·_Linux_·_Windows-lightgrey\" /\u003e\n  \u003cimg alt=\"firmware\" src=\"https://img.shields.io/badge/PS5_firmware-9.00_–_11.60_validated_•_others_best_effort-orange\" /\u003e\n  \u003ca href=\"https://discord.gg/fzK3xddtrM\"\u003e\u003cimg alt=\"discord\" src=\"https://img.shields.io/badge/discord-join-5865F2\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## What it does\n\n- **Fast transfer** — FTX2 binary protocol with BLAKE3 per-shard\n  verification, small-file packing, and resume on disconnect.\n  Uses your LAN flat-out. Pack worker absorbs transient\n  `EIO`/`EMFILE` hiccups so a 200k-file game upload doesn't get\n  killed by one unlucky syscall.\n- **Upload queue** — line up multiple games or images, hit Start,\n  walk away. Every running row shows live MiB/s and ETA; done\n  rows show the wall-clock-average rate so you can spot a slow\n  destination. Queue state survives app restarts.\n- **Compressed `.zip` uploads** — keep a game dump as a single `.zip`\n  on your PC (less disk, easier to move) and upload it directly.\n  ps5upload decompresses on the host and streams the files into the\n  same FTX2 pipeline, so they land **already extracted** on the PS5 —\n  no manual unzip, no temp copy of the whole game. The Upload screen\n  previews the expansion (`zipped → extracted`, file count, space\n  saved) and detects the embedded game. Decompresses one file at a\n  time (large files spill to a temp file), so a 100 GB archive doesn't\n  need 100 GB of RAM. ZIP only — unpack `.rar` on the PC first.\n- **Native image mount** — attach `.exfat` and `.ffpkg` images on\n  the PS5 (MDIOCATTACH + nmount) with no third-party helper. Every\n  mount survives payload restarts and auto-reconciles on startup.\n- **Browse everything** — list games anywhere on the PS5 (including\n  inside mounted images), disk images, files, and volumes. Run FS\n  ops (chmod, delete, move, copy, mkdir) with a real directory\n  tree. Bulk delete of a 200k-file folder shows live progress\n  with a working Stop button.\n- **Stay-in-the-loop notifications** — in-app alerts mirror to your\n  computer's notification center (macOS / Windows / Linux, plus the\n  Android shade) when a transfer finishes or fails in the background,\n  and the PS5 itself shows a toast when an upload starts and completes.\n  Your machine is kept awake automatically while a transfer runs.\n- **Hardware view** — model, serial, uptime, storage, RAM, and the PS5\n  date/time, refreshed live; plus a fan-threshold control that rings\n  through to `/dev/icc_fan` for quieter operation. Live CPU/SoC\n  temperature, clock, and power are read **on demand** (a button), not\n  auto-polled — each read briefly pauses the system UI, so polling them\n  could destabilize the console. They're also unreliable on current\n  firmware (libkernel exports drift between FW points), so a reading may\n  show `—`; everything else on the panel is stable.\n- **Send any payload** — push `.elf`, `.bin`, `.js`, `.lua`, or\n  `.jar` files to the PS5's loader port (typical defaults: `.elf` →\n  9021 elfldr, `.js` → 50000 WebKit-stage, `.lua` → 9026, `.jar` →\n  9025 BD-JB / BDJ; custom loaders may listen anywhere). Recent-sends\n  history with click-to-replay and per-row success/fail badges.\n- **Install fakepkgs (package library)** — add a `.pkg` and it uploads\n  to your PS5 once and stays there. **Install Package** lists every\n  uploaded package with cover art and size; **Install**, **Reinstall**,\n  or **Delete** any of them in a click — no re-uploading to install\n  again. Installs run through the **DPI daemon** (`sceAppInstUtilAppInstallPkg`\n  from a clean loader process), the most reliable path on current\n  firmware. Verified end-to-end on FW 9.60. Game pkgs (CUSA / PPSA /\n  PCSA / EP / UP) install cleanly; for system pkgs (NPXS-prefix — Store\n  updates, Settings) use the on-PS5 Settings → Debug Settings → Game →\n  Package Installer.\n- **Register + launch** — Library row's Play button always registers\n  first (idempotent if already registered), retries with DRM-type\n  patch on rejection, then launches. Unmount unregisters every\n  title inside the image first so the dashboard stays clean —\n  no ghost tiles after unmount.\n- **Speaks your language** — the whole UI, including error messages\n  and troubleshooting hints, is translated into 18 languages: English,\n  Simplified \u0026 Traditional Chinese, Spanish, Hindi, Arabic, Bengali,\n  Brazilian Portuguese, Russian, Japanese, German, French, Korean,\n  Turkish, Vietnamese, Indonesian, Italian, and Thai.\n\n## What it doesn't do\n\n- **System pkg patches.** `sceAppInstUtilInstallByPackage` is built\n  for game pkgs; NPXS-prefix system pkgs (Store updates, Settings\n  app patches) register but the install path freezes Sony's mgmt\n  service mid-flight on most firmwares. Use the on-PS5 Settings →\n  Debug Settings → Game → Package Installer for those.\n- **`.rar` archives.** Only `.zip` is supported for compressed uploads.\n  Modern scene `.rar` is typically split multi-part + encrypted, which\n  isn't worth the unrar maintenance/licensing tax — and no other PS5\n  homebrew tool supports it either. Unpack `.rar` on the PC first.\n\n## A quick look\n\n\u003cimg width=\"2560\" height=\"1411\" alt=\"Screenshot 2026-04-24 at 00 26 13\" src=\"https://github.com/user-attachments/assets/b72b65b5-a0d4-4e63-aa79-8b5ed2246f43\" /\u003e\n\n## Install\n\nPre-built downloads land on the\n[Releases page](https://github.com/phantomptr/ps5upload/releases):\n\n| Platform | File | How to install |\n|---|---|---|\n| macOS (Apple Silicon / Intel) | `PS5Upload-\u003cver\u003e-mac-{arm64,x64}.dmg` | Open the `.dmg`, drag PS5Upload into Applications. See **First launch on macOS** below — Gatekeeper blocks downloaded apps the first time. |\n| Windows (x64 / ARM64) | `PS5Upload-\u003cver\u003e-win-{x64,arm64}.zip` | Unzip, double-click `PS5Upload.exe` — portable, no installer. See **First launch on Windows** — SmartScreen warns on first run. |\n| Linux — Debian / Ubuntu (x64 / ARM64) | `PS5Upload-\u003cver\u003e-linux-{x64,arm64}.deb` | `sudo apt install ./PS5Upload-\u003cver\u003e-linux-\u003carch\u003e.deb` — installs a normal app with a menu entry; pulls in the WebKitGTK deps automatically. |\n| Linux — Fedora / RHEL / Bazzite (x64 / ARM64) | `PS5Upload-\u003cver\u003e-linux-{x64,arm64}.rpm` | `sudo dnf install ./PS5Upload-\u003cver\u003e-linux-\u003carch\u003e.rpm` (Bazzite/Silverblue: `rpm-ostree install`) — menu entry + auto deps. |\n| Linux — any distro (x64 / ARM64) | `PS5Upload-\u003cver\u003e-linux-{x64,arm64}.zip` | Universal fallback (no install). Unzip, then `chmod +x PS5Upload.sh PS5Upload.AppImage` and run **`./PS5Upload.sh`** (the wrapper — handles the FUSE-less and WebKit white-screen cases for you). Running `./PS5Upload.AppImage` directly also works if your system has libfuse2 and a happy WebKitGTK. |\n| Android | `PS5Upload-\u003cver\u003e-android.apk` | Enable \"install unknown apps\" for your browser/file manager, then open the `.apk`. Same interface, mobile-friendly; connects to and manages your PS5 over Wi-Fi. |\n\n### First-launch warnings (and why they're there)\n\nps5upload is not code-signed with paid OS certificates — same as\nevery other PS5 scene tool. The OS's verification layers\n(Gatekeeper on macOS, SmartScreen on Windows) treat unsigned downloads\nas suspicious until you allow them once. The one-time bypass:\n\n**macOS** — \"App is damaged\" or \"cannot be opened\":\n```bash\nxattr -dr com.apple.quarantine /Applications/PS5Upload.app\n```\nThat removes the *quarantine* attribute macOS slaps on every file\ndownloaded from a browser. Alternatively, right-click PS5Upload in\nApplications → **Open** → click **Open** in the prompt. Either method\nonly needs to be done once per install.\n\n**Windows** — \"Windows protected your PC\" SmartScreen prompt:\n- Click **More info** → **Run anyway**.\n- Only shown until SmartScreen builds reputation for the binary;\n  subsequent launches are silent.\n- If your IT policy blocks \"Run anyway\", unzip + right-click\n  `PS5Upload.exe` → **Properties** → check **Unblock** → **OK**.\n\n**Linux** — no equivalent warning. Just `chmod +x` and launch.\n\n### System requirements\n\n- **macOS** 11 (Big Sur) or newer. No dependencies — ad-hoc signed,\n  see *First launch* above for the one-line quarantine bypass.\n- **Windows** 10 (build 19041+) or Windows 11. Ships with the\n  Microsoft Edge WebView2 runtime by default; LTSC / stripped\n  installs may need\n  [WebView2](https://developer.microsoft.com/microsoft-edge/webview2/)\n  installed once.\n- **Linux** — the `.deb` and `.rpm` packages **pull in their\n  dependencies automatically** (WebKitGTK 4.1, gtk3, libsoup3, etc.) via\n  the package manager, so they're the easiest route on Debian/Ubuntu and\n  Fedora/RHEL/Bazzite. The universal `.AppImage` instead expects those\n  libraries already on the host (libfuse2, gtk3, webkit2gtk 4.1,\n  libsoup3, libappindicator, librsvg2); install commands for\n  Debian/Ubuntu/Fedora/RHEL/Arch are in\n  [the FAQ](FAQ.md#prerequisites).\n  **Minimum distro version:** all three Linux artifacts are built against\n  **glibc 2.39**, so they need a reasonably recent distro — **Ubuntu\n  24.04+, Debian 13+ (trixie), Fedora 40+**, or equivalent. (This is a\n  glibc floor, not a package dependency — the `.deb`/`.rpm` install fine\n  on older releases but the app won't launch, and the AppImage bundles\n  WebKitGTK yet still uses the host's glibc.) On an older distro, build\n  from source with `make dist-linux` on that machine.\n\nThe app checks GitHub for updates once per launch (Settings → Updates)\nand downloads a fresh archive to your Downloads folder when you click\nDownload — replace the old app manually and relaunch.\n\nBuilding from source:\n\n```bash\ngit clone https://github.com/phantomptr/ps5upload.git\ncd ps5upload\nmake install       # bootstrap dev env (auto-detects host OS)\nmake build         # payload ELF + engine + client UI\nmake run-client    # launch the Tauri dev app\n```\n\n`make install` auto-detects your OS and runs one of:\n\n- **`make install-ubuntu`** — Debian / Ubuntu / WSL2: `apt` deps for Tauri\n  (`libwebkit2gtk-4.1-dev`, `libgtk-3-dev`, `librsvg2-dev`,\n  `libayatana-appindicator3-dev`, `libxdo-dev`, `libssl-dev`,\n  `build-essential`), Node.js 22 LTS via NodeSource (only if missing),\n  Rust via rustup, and PS5 Payload SDK v0.38 → `~/ps5-payload-sdk`.\n- **`make install-macos`** — macOS: Xcode CLT, Homebrew, `node`, `llvm@18`\n  (the only Homebrew llvm shipped with `ld.lld` — required by\n  `prospero-clang`), Rust via rustup, and PS5 Payload SDK.\n- **`make install-windows`** — Windows 11: Node.js LTS, Rust, VS 2022 Build\n  Tools (C++ workload), WebView2 Runtime, 7-Zip, and PS5 Payload SDK\n  via `winget`. Run from an elevated PowerShell (or any shell with\n  `pwsh` / `powershell.exe` on PATH).\n\nAll three install scripts are idempotent — re-running them after a partial\nsetup is safe; each step skips if already satisfied.\n\nFor per-platform bundles only (no full dev env): `make dist-mac`,\n`make dist-mac-x64`, `make dist-linux`, `make dist-linux-arm`,\n`make dist-win`, and `make dist-win-arm`.\n\n## Quick start\n\n1. Launch ps5upload on your computer.\n2. Open the **Connection** tab and enter your PS5's IP address.\n3. Click **Check**, then **Send payload**.\n4. Once the third step turns green, go to any other tab — you're\n   connected.\n\nThe payload stays loaded until the PS5 reboots or goes into rest mode.\n\n## Architecture\n\n```\nclient/ (Tauri 2 · React · TypeScript)\n   │\n   └── spawns ── ps5upload-engine (HTTP :19113)\n                          │\n                          ▼  FTX2 binary framing\n                payload/ps5upload.elf  (PS5 C payload, ports 9113 + 9114)\n```\n\nThree layers:\n\n- **`payload/`** — C payload that runs on the PS5 (FreeBSD 11).\n  Ports 9113 (transfer) + 9114 (management). Handles FTX2 framing,\n  BLAKE3 verification, mount pipelines, and FS ops.\n- **`engine/`** — Rust workspace with the protocol types, transfer\n  logic, HTTP service, lab CLI, mock server, and benchmarks.\n- **`client/`** — Tauri 2 desktop app. Tauri IPC commands proxy to the\n  sidecar HTTP engine, keeping the engine usable from CLI / CI too.\n\n## Build\n\nAll workflows go through the root `Makefile` (see `make help`).\n\n| Target | What it does |\n|---|---|\n| `make build` | Payload + engine + client |\n| `make payload` | PS5 ELF at `payload/ps5upload.elf` (requires `PS5_PAYLOAD_SDK` env var) |\n| `make engine` | `cargo build --workspace` |\n| `make client` | `vite build` in `client/` |\n| `make run-client` | Tauri dev (vite + Rust main process) |\n| `make run-engine` | `ps5upload-engine` on `localhost:19113` |\n| `make send-payload` | Send the built ELF to `PS5_HOST:PS5_LOADER_PORT` |\n| `npm run validate` | Full non-hardware quality gate |\n| `make quality` | Same full non-hardware quality gate via Make |\n| `npm run coverage` | Generate frontend + Rust coverage reports |\n| `make coverage` | Same coverage reports via Make |\n| `make test` | Script syntax + engine tests + payload validation + client build |\n| `make test-engine` | `cargo test --workspace` (no hardware needed) |\n| `make dist` | Tauri bundle under `client/src-tauri/target/release/bundle/` |\n\n## Test\n\nUnit and integration tests run entirely against an in-process mock\nFTX2 server — no PS5 needed:\n\n```bash\nmake test-engine\n```\n\nFull local quality gate and coverage reports:\n\n```bash\nnpm run validate\nnpm run coverage\n```\n\nReal-hardware smoke test (requires payload already loaded):\n\n```bash\nnpm run smoke:hardware\n```\n\nSee [`TESTING.md`](TESTING.md) for the complete mock-test, coverage,\ncross-platform, and live-PS5 validation workflow.\n\n## Tech stack\n\n- **Payload** — C (FreeBSD 11), prospero-clang toolchain\n- **Engine** — Rust (edition 2021), tokio + axum 0.8\n- **Desktop client** — Tauri 2, React, TypeScript, Zustand,\n  Tailwind CSS v4, Vite\n- **Protocol** — FTX2 (custom binary framing, BLAKE3 shard\n  verification)\n\n## Supported platforms\n\n**Desktop client**\n\n| | x64 | arm64 |\n|---|---|---|\n| **macOS**   | ✓ | ✓ |\n| **Linux**   | ✓ | ✓ |\n| **Windows** | ✓ | ✓ |\n\n**PS5 payload** — every firmware the PS5 Payload SDK supports,\ncurrently **1.00 through 12.70** on every console model (original\nCFI-1xxx, Slim CFI-2xxx, Pro CFI-7xxx, Digital). Built against SDK\nv0.38, which ships per-firmware kernel offsets and resolves them at\npayload startup via `kernel_get_fw_version()` — the same binary\nruns on every supported firmware without per-release rebuilds.\n\n| Range | Feature coverage |\n|---|---|\n| **9.00 – 11.60** | All features validated on hardware |\n| **1.00 – 8.60** and **12.00 – 12.70** | All features run |\n\nThe process-list feature (Hardware tab's process snapshot) reads\n`kinfo_proc` via `sysctl(KERN_PROC_PROC)` with field offsets that\nhave been stable across every SDK-supported firmware — pid at\nbyte 72, thread name at byte 447. No firmware-specific fallback\ntable required; real command names appear across the full 1.00 –\n12.70 range. Transfer, mount, file browse, hardware monitor\n(except CPU/SoC temps, which Sony gates on a different credential\ncheck unrelated to firmware), and FS ops work identically across\nall supported firmwares.\n\n**What actually gates users in practice is the ELF loader** on\nport 9021 — a third-party component, not part of ps5upload. The\necosystem's real-world coverage is roughly **4.x through 12.x**;\nbelow 4.x is obscure and above 12.70 is future work.\n\n## FAQ\n\n**Q: \"Connection Refused\" or it won't connect?**\n* Did you load the payload first? The PS5 stops listening after a\n  reboot or rest-mode cycle — send the payload again from the\n  **Connection** tab.\n* Is your computer's firewall blocking outbound connections to\n  port 9113 / 9114 / 9021 on your PS5?\n* Your computer and PS5 don't have to be on the same subnet, but\n  there has to be a route to the IP.\n\n**Q: Resume gets stuck on \"Checking what's already on your PS5…\"?**\n* Reconcile scoped to the *local* tree's parent directories, so a\n  single-file upload into a folder that already holds other games\n  is now one `FS_LIST_DIR` call instead of a recursive walk of the\n  whole destination. Update to the latest build.\n* Safe-mode reconcile still hashes every same-size remote file via\n  BLAKE3 — that's ~2–3 s per GiB on PS5 UFS. Use Fast mode for\n  single-file or large-file transfers.\n\n**Q: Do I need a LAN cable?**\n* Not strictly, but Wi-Fi caps throughput well below what the PS5\n  NIC can actually do. Plug in an Ethernet cable for the best\n  experience.\n\n**Q: Can I use this over the Internet?**\n* Yes, technically. If you forward ports 9113 / 9114 to your PS5\n  it will work. However, the FTX2 protocol is optimised for speed,\n  not for authentication — we don't recommend exposing an\n  exploited PS5 to the open Internet.\n\n**Q: How do I install / launch a game from the Library tab?**\n* The 2.2.26 Library row exposes **Mount** for `.exfat` / `.ffpkg` /\n  `.ffpfs` images plus **Register** / **Register (patch DRM)** /\n  **Launch** / **Unregister** buttons on the games inside.\n* **Mount** is hardware-validated on FW 9.60 — a 76 GiB UFS\n  `.ffpkg` mounts on `/dev/lvd1`, appears in Volumes with the\n  correct `source_image`, and unmounts cleanly. The new round's\n  payload uses compile-time `-lSce*` linkage so the rtld\n  initialises the Sony sprx state via `DT_NEEDED` before main()\n  runs.\n* **Register** is hardware-validated: pointing it at a folder\n  game with `eboot.bin` + `sce_sys/param.json` succeeds end to\n  end — `sceAppInstUtilAppInstallTitleDir` returns 0, the title\n  appears in `app.db` with the correct title name, and a nullfs\n  bind is installed at `/system_ex/app/\u003ctitle_id\u003e`. Idempotent —\n  re-registering the same path returns the same result.\n* **Register (patch DRM)** rewrites the source's\n  `sce_sys/param.json`'s `applicationDrmType` to `\"standard\"`\n  before staging — needed for PSN-extracted dumps that ship with\n  `\"PSN\"` or `\"disc\"`. Modifies the source file in place; only\n  use when a normal Register fails with a DRM error.\n* **Launch** routes `sceLncUtilLaunchApp` through a ptrace RPC\n  into `SceShellUI` so Sony's `getpid() == SceShellUI.pid`\n  caller-context check passes natively. Hardware-validated on\n  FW 9.60: hitting Launch on a registered title actually starts\n  the game (SoC power draw confirms the title comes up). Falls\n  back to a direct call when ShellUI RPC isn't available.\n* **Listing inside an active mount** (`/mnt/ps5upload/\u003cname\u003e/...`)\n  is gated by the PS5 sandbox / LVD mount permission set rather\n  than payload privilege. We re-check after every credential\n  elevation; treat \"ENOTDIR descending into a mount\" as\n  expected for now. Other PS5-side tools see the mount via\n  `/mnt/ps5upload/`, and the source path is recorded in our\n  tracker so reconcile-on-next-boot keeps state consistent.\n* Live CPU/SoC temperature, clock, and SoC power are read **on demand**\n  (the Hardware tab's \"Read sensors\" button), not on a timer. Each read\n  briefly ptrace-pauses the system UI, and doing that on a loop could\n  destabilize the console — it powered some consoles off — so the auto-\n  refresh now covers only the ptrace-free data (info, uptime, storage,\n  date/time). These readings are also unreliable across firmware\n  revisions: libkernel exports them by NID-only on some FW points and the\n  call returns garbage or fails, so a persistent `—` usually means your\n  firmware's exports are NID-only, not that the payload is broken.\n\n**Q: \"No writable storage found\"?**\n* The tool blocks writes to read-only system partitions. If you\n  want to write to a USB drive, make sure it's formatted (exFAT is\n  best) and plugged in *before* you load the payload.\n\n**Q: macOS: \"App is damaged\" or \"Unidentified Developer\"?**\n* This is normal for unsigned apps. Right-click the app, select\n  **Open**, then click **Open** in the dialog.\n* If macOS still blocks it, **System Settings → Privacy \u0026\n  Security → Open Anyway**.\n* Last resort — remove the quarantine flag:\n  ```bash\n  xattr -dr com.apple.quarantine /Applications/ps5upload.app\n  ```\n* No Apple Developer account is required; the app is intentionally\n  unsigned.\n\n**Q: Where are config and logs saved?**\n* The desktop client uses the OS app-data directory:\n  * **Windows:** `%APPDATA%\\com.phantomptr.ps5upload`\n  * **macOS:** `~/Library/Application Support/com.phantomptr.ps5upload`\n  * **Linux:** `~/.local/share/com.phantomptr.ps5upload`\n\n**Q: Does this work on PS4?**\n* No. The payload is compiled specifically for the PS5 (FreeBSD\n  11, Zen 2) and calls PS5-only kernel entry points.\n\n**Q: What about older firmware (≤ 9.00)?**\n* The FTX2 payload itself doesn't call firmware-gated APIs, but\n  the ELF loader workflow on port 9021 depends on what your\n  jailbreak exposes. Patches welcome.\n\n**Q: Can I run ps5upload headless / over SSH?**\n* Not the GUI. The `ps5upload-engine` binary speaks HTTP on\n  `:19113` and exposes the full transfer / reconcile / FS API, so\n  you can script transfers from a terminal or CI job without ever\n  opening the desktop client.\n\n## Contributing\n\n- Report bugs:\n  [GitHub Issues](https://github.com/phantomptr/ps5upload/issues)\n- Pull requests welcome — please read\n  `.github/PULL_REQUEST_TEMPLATE.md` and run `make test` locally\n  before opening.\n\n## Disclaimer\n\n\u003e **Use this software entirely at your own risk.** It is provided\n\u003e \"as is\", without warranty of any kind, express or implied,\n\u003e including but not limited to warranties of merchantability, fitness\n\u003e for a particular purpose, and non-infringement.\n\nYou are solely responsible for how, where, and on what hardware you\nuse this tool. By downloading, installing, or running it, you\nacknowledge and accept that:\n\n- **It interacts with a modified PS5.** This tool only works on a\n  console that has been jailbroken / has kernel exploits loaded by\n  the user. Modifying console state, bypassing platform integrity\n  checks, or running unsigned code may void your manufacturer\n  warranty, violate the platform's terms of service, and — under\n  certain operations — leave your console unrecoverable without a\n  reinstall. You took those steps before this tool entered the\n  picture; this tool does not put you in that state and cannot\n  reverse it.\n- **It writes to your PS5's filesystem and can install / register\n  packages with Sony's installer.** Mistakes can corrupt the\n  console's app database, leave orphaned mount points, or wedge\n  Sony's mgmt service mid-install. Recovery normally means a\n  reboot or — worst case — a factory reset. Back up anything\n  important before bulk operations.\n- **It is intended for use only with content you legally own and\n  hardware that belongs to you.** Using it to install, mount, or\n  distribute software you do not have the legal right to use is\n  your responsibility, not the project's.\n- **No support is guaranteed.** This is a free, volunteer-built\n  tool. The author may answer questions on Discord but is under no\n  obligation to provide fixes, updates, or compensation if anything\n  goes wrong.\n\nIf any of the above is not acceptable to you, do not use this\nsoftware.\n\n## Third-Party Libraries\n\nThis software builds on the following open-source projects:\n\n**Desktop client (Tauri 2 + React):**\n* [Tauri](https://tauri.app/) — Rust-backed cross-platform desktop runtime\n* [React](https://react.dev/) — UI library\n* [Zustand](https://github.com/pmndrs/zustand) — Client state management\n* [Tailwind CSS](https://tailwindcss.com/) — Styling\n* [Vite](https://vitejs.dev/) — Build + dev server\n* [lucide-react](https://lucide.dev/) — Icons\n* [react-router](https://reactrouter.com/) — Routing\n\n**Engine (Rust):**\n* [tokio](https://tokio.rs/) — Async runtime\n* [axum](https://github.com/tokio-rs/axum) — HTTP service\n* [serde](https://serde.rs/) — Serialization\n* [anyhow](https://github.com/dtolnay/anyhow) — Error handling\n* [uuid](https://github.com/uuid-rs/uuid) — Job IDs\n\n**Payload (PS5):**\n* [PS5 Payload SDK](https://github.com/ps5-payload-dev/sdk) — Open-source SDK for PS5 payload development\n* [BLAKE3](https://github.com/BLAKE3-team/BLAKE3) — Fast cryptographic hashing (per-shard verification)\n\n## Thanks\n\nps5upload stands on the shoulders of the **PS5 homebrew scene**. Huge\nthanks to everyone who makes this ecosystem possible — the exploit and\nkernel researchers, the ELF/payload loader authors, the PS5 Payload SDK\nmaintainers, the homebrew tool developers whose work this lives alongside,\nand everyone in the community who tests, reports bugs, and shares\nknowledge. None of this exists without your collective effort. 🙏\n\n## License\n\nGNU General Public License v3.0 (GPLv3).\nFree to use, free to modify. See [`LICENSE`](LICENSE).\n\n## Author\n\nCreated and maintained by **PhantomPtr**.\n\n* [Follow me on X (@phantomptr)](https://x.com/phantomptr)\n\n## Support\n\nIf you find this tool useful, consider buying me a coffee!\n\n* Discord server: [https://discord.gg/fzK3xddtrM](https://discord.gg/fzK3xddtrM)\n* Support me on Ko-fi: [https://ko-fi.com/B0B81S0WUA](https://ko-fi.com/B0B81S0WUA)\n\n[![Support me on Ko-fi](https://storage.ko-fi.com/cdn/kofi3.png?v=3)](https://ko-fi.com/B0B81S0WUA)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphantomptr%2Fps5upload","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphantomptr%2Fps5upload","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphantomptr%2Fps5upload/lists"}