> [!NOTE]
> The original Overdrive project has been shut down so I decompiled the last released build,
> recovered the complete source and rebuilt it.
## Features
- **1,800+ games** to discover, with **Top rated**, **New releases** and a featured spotlight
- **Browse the whole library** with filters, sorting, scores and download sizes at a glance
- **Downloads straight to the console**, to internal storage or any USB drive, with live speed and storage stats
- **Favorites**, **search** with an on-screen keyboard, and a **Files** page to see and clean up what's on your drives
- **13 languages**: English, Deutsch, Español, Français, Português (Brasil), Русский, Bahasa Indonesia, 日本語, 简体中文, العربية, اردو, हिन्दी, বাংলা
- **Updates itself**: a new version installs from the console, no PC needed
- Made for the controller: L1R1 to switch sections, ✕ to select, ○ to go back
## Install in four steps
### Before you start
You need a **jailbroken PS5** running two payloads: **[ShadowMount+](https://github.com/drakmor/ShadowMountPlus)**,
which installs `.exfat` images by itself, and **[kstuff](https://github.com/EchoStretch/kstuff-lite/releases)**.
If ShadowMount+ shows its notification when the console starts, you are ready. You also need a
**USB drive** and a **PC**.
**Download `Overdrive.exfat`** with the button above, or from the
[latest release](https://github.com/MyLuxy/overdrive/releases/latest). It is the only file you
need. Leave it as it is: don't unzip it and don't change the `.exfat` at the end of its name.
**Copy it onto a USB drive, inside a folder called `homebrew`.** Plug the drive into your PC,
create a new folder named exactly `homebrew` (all lowercase) at the top level of the drive, and
copy `Overdrive.exfat` into it:
```text
USB drive
└── homebrew
└── Overdrive.exfat
```
The drive must be formatted as **exFAT**, which is how most drives come and what the PS5 reads.
**Plug the drive into the PS5.** ShadowMount+ checks for new files every few seconds: it finds
Overdrive, mounts it and installs it, and a notification tells you when it's done. There is
nothing to click.
**Open Overdrive from the home screen.** Look for this icon. Enjoy!
You can also use **any FTP client** to move the file onto the console's internal storage
instead, again inside a `homebrew` folder: `/data/homebrew/Overdrive.exfat`.
## Updates
You only install Overdrive by hand once. When a new version comes out, the app tells you by
itself a few seconds after it opens:
1. A window shows the new version and what changed. Press **Install**.
2. Overdrive downloads the update, checks it and puts it in place of the old one.
3. When it's done, the app **closes itself**. Open it again and you are on the new version.
The update needs about **600 MB free** on the drive that holds Overdrive. `update.zip` in each
release is the package the app downloads for this; you never need it yourself.
## Support the project
Overdrive is free and open source. If you enjoy it, sponsoring helps me keep it updated.
## Troubleshooting
Overdrive doesn't appear on the home screen
- Make sure **ShadowMount+ is running**: it shows a notification when it starts.
- Check the folder: it must be called exactly `homebrew` and sit at the **top level** of the
drive, not inside another folder.
- Check the file still ends in **`.exfat`**. Some PCs hide extensions: a file renamed to
`Overdrive.exfat.zip` or unzipped into a folder won't be found.
- Give it a minute: ShadowMount+ waits until the file has finished copying before it installs it.
After an update, the app still shows the old version
The new version is installed but the console still has the old one loaded. **Restart the
console** and open Overdrive again; the app tells you this itself if it happens twice in a row.
The update says there isn't enough space
The update is downloaded next to the installed app, so the drive holding Overdrive needs about
600 MB free. Free some space on that drive and press **Retry**. Nothing has been changed yet
when this happens.
The update says it couldn't replace the app
Install it by hand: download `Overdrive.exfat` from the
[latest release](https://github.com/MyLuxy/overdrive/releases/latest), close Overdrive, and copy
the new file over the old one in the `homebrew` folder.
How do I remove Overdrive?
Delete `Overdrive.exfat` from the `homebrew` folder first, then delete its icon from the home
screen. In the other order ShadowMount+ finds the file again and puts the icon back.
## Build it yourself
What's in this repository
| Path | What it is |
| --- | --- |
| `app/` | The application: JSX sources, state, assets, catalog data, and `app.json` (title id `PPSA99058`, version, capabilities) |
| `ps5-react/` | The framework it runs on, vendored from [half144/ps5-react](https://github.com/half144/ps5-react) |
| `packaging/make-exfat.sh` | Builds the exFAT image ShadowMount+ installs |
| `.github/workflows/build.yml` | The build |
How the source was recovered
Overdrive is a React app running on [ps5-react](https://github.com/half144/ps5-react), and its
whole JavaScript bundle sits in plain text inside `eboot.bin`. A bundler merges every module into
one scope, so imports between modules turn into bare names; since each top-level name stays
unique, the module that declares a name can be worked out again. That split the bundle back into
its 137 original modules with their real `import`/`export` lines, checked against the original
bundle until every import edge matched.
What a bundler throws away could not come back: most comments, the JSX syntax (it reads as
`jsx(View, {…})` calls), and `const`/`let` (now `var`). None of that changes how the app behaves.
Developing
Everything runs from the repository root through npm. Once after cloning, `npm run setup`
(`packaging/setup.sh`) installs every dependency: on Linux the apt packages for the desktop preview,
the PS5 build and the tests (it asks for `sudo` once), on macOS the Homebrew formulae; then Pillow
and the framework's npm packages. Read the script first if you'd rather install them yourself.
```sh
git clone https://github.com/MyLuxy/overdrive.git
cd overdrive
npm run setup # once; asks for sudo on Linux
npm run dev # the app in a window on your PC, rebuilt on every save under app/
```
| Command | What it does |
| --- | --- |
| `npm run setup` | Installs every dependency, once after cloning |
| `npm run dev` | Opens the app in the desktop preview and rebuilds it on every save (state resets on restart) |
| `npm run preview` | Opens the desktop preview once, without watching |
| `npm test` | The framework's checks; needed after changes under `ps5-react/`, not for `app/` only |
| `npm run build` | The PS5 app, then `Overdrive.exfat` and `update.zip` (see Building) |
| `npm run build:app` | The PS5 app only, in `ps5-react/dist/PPSA99058` |
The preview is the console's UI on your PC, so it takes a controller or the keyboard, and a mouse
as a developer's shortcut. The first `npm run dev` downloads and compiles the framework's pinned
dependencies, which takes a while; later starts are quick.
| Action | Keyboard | Mouse | PS5 |
| --- | --- | --- | --- |
| Move focus | Arrow keys | Wheel (up/down) | D-pad |
| Select | Enter or Space | Left click on the element | ✕ |
| Back | Backspace | Right click | ○ |
| Sections | Q / E | — | L1 / R1 |
| Favorite | F | — | □ |
| Quit the preview | Escape | — | PS button |
The app's code is under `app/` (see "What's in this repository"); a change there needs no rebuild
of the framework. Keep new user-facing strings in every file of `app/i18n/locales/`. On Linux the
preview is compiled with clang (`CC=clang CXX=clang++`, set by the npm scripts), since GCC stops on
a bounds warning in `archive_preflight.cpp`. Linux support for the preview is this fork's addition;
upstream ps5-react supports macOS only.
Building
Builds run on `ubuntu-24.04` with clang 18, only from **Run workflow**: a push builds nothing.
Each run puts `Overdrive.exfat` and `update.zip` in a draft release named after
`app/version.js`, which only maintainers can see.
The same build locally, from the repository root, after `npm run setup` (see Developing):
```sh
npm run build # the app, then Overdrive.exfat and update.zip here
npm run build:app # the app only, in ps5-react/dist/PPSA99058
```
`packaging/build.sh` behind them finds LLVM 18 where apt or Homebrew put it (set
`LLVM=` otherwise), builds through `ps5-react/tools/build_ps5.py`, then runs
`packaging/make-exfat.sh` under `sudo`, since the image is mounted to be filled. The build
downloads its pinned dependencies into `ps5-react/.deps` and writes the app folder, a `.zip` and a
`.receipt.json` into `ps5-react/dist`. It verifies the result itself (`tools/verify.py`), so a
green build means the payload structure and signatures check out.
The image is a plain exFAT volume whose root is the app folder, with 64 KiB clusters and the
label `OVERDRIVE`. To release a new version, raise the version in `app/version.js` and
`app/app.json`, run the workflow, test the draft's image on a console, then publish the draft:
that creates its tag, and installed apps offer exactly the tested files on their next start.
Fixes over upstream ps5-react
Two fixes in the vendored framework, both in the build tooling and both reported by a Linux build:
- `ps5-react/tools/common.py` read the `git apply --summary` line with a fixed space count, which
glued the file mode onto the path (`100644 `) and made every fresh dependency checkout
fail on the first patch that creates a file. It now splits on whitespace.
- `ps5-react/tools/build_ps5.py` opened the pinned LLVM package's `data.tar.zst` with `tarfile`,
which reads zstd only from Python 3.14 while the documented minimum is 3.12. It now falls back
to the `zstd` command.
Nothing else in the framework is changed.
## Credits
- **[MyLuxy](https://github.com/MyLuxy)**, who decompiled Overdrive, recovered its source and rebuilt it.
- **[ps5-react](https://github.com/half144/ps5-react)**, the framework it runs on.
- **[ShadowMount+](https://github.com/drakmor/ShadowMountPlus)** by drakmor, which installs it.
`ps5-react/` is GPL-3.0-or-later and carries its own `LICENSE`, `LICENSE-ATTRIBUTION` and
`NOTICE`. Every dependency notice is copied into `notices/` inside the built app, and
`ps5-react/docs/DEPENDENCIES.md` lists them with their sources.
Overdrive is an unofficial homebrew project and is not affiliated with or endorsed by Sony
Interactive Entertainment. PlayStation and PS5 are trademarks of Sony Interactive Entertainment.