Unofficial fan project.
The 1996 classic, running natively on PC and Android. In widescreen, at 240 FPS, in 4K.
This isn't an emulator. The original PS1 code is statically recompiled into a native program on your own machine, then given the upgrades the PS1 never could: a real 16:9 view of the world, high frame rates, high resolutions, mods and cheats.
F5 saves, F8 loads, F6/F7 switch slot. The same actions are in the pause menu.mods/ and switch them on or off from the launcher or the in-game Dev Menu. See the modding guide..chd or .cue + .bin dump. No extraction or converter needed.Every extra is optional: each one has its own switch in Settings, so you can play it exactly like the original.
It's still a work in progress. Widescreen is a big job: some levels still show the edges of the original scenery. Bugs exist, and we'd love to hear about them (see Found a bug?).
You need your own dump of Crash Bandicoot (USA), serial SCUS-94900, as a .chd or as a .cue with its .bin. The game is not included here; read the fine print.
CrashBandicoot.exe from Releases..chd or .cue.The first launch builds the game on your PC, which takes a moment. Later launches start straight away. If the game window doesn't open, check the System requirements.
Install the .apk from Releases (arm64), select your disc, and play with touch controls or a gamepad.
CrashBandicoot-Linux from Releases.chmod +x CrashBandicoot-Linux)..chd or .cue, then click START GAME. A disc in the same folder as the program is picked up on its own.It's the same launcher as on Windows, with Settings, Controls, Mods and Cheats, usable with mouse, keyboard or gamepad. The first launch builds the game from your disc, which takes a minute or two. While you play, the launcher steps aside, and it comes back when you close the game. In About (the i button) you can add it to your applications menu, which also makes it show up in Steam's Add a Non-Steam Game list.
You need a GPU with OpenGL 4.3+ (Mesa, NVIDIA or AMD) and a distribution with glibc 2.34+ (see System requirements). Audio (OpenAL Soft) is bundled, so there's nothing else to install. The launcher window uses X11, which Wayland desktops provide through XWayland. If it doesn't start, attach logs/last-run.txt (next to the program) to your bug report.
./CrashBandicoot-Linux --run /path/to/your/game.chd
Without the path, --run uses the last disc you played.
Segmentation fault in a VMIf it crashes right after launching … game.recomp.dll, the VM probably can't create an OpenGL 4.3 context. Check with glxinfo -B and enable 3D acceleration. For a quick test, try software GL:
sudo apt install mesa-utils
LIBGL_ALWAYS_SOFTWARE=1 ./CrashBandicoot-Linux --run /path/to/game.cue
Supported dump: a standalone CD image with a single MODE2/2352 track, matching the NTSC-U disc. Other regions, multi-track layouts, DVD/GD-ROM images and CHDs that need a parent are not supported.
To turn a .cue + .bin into a CHD, use MAME's chdman with the CUE next to its BIN:
chdman createcd -i "Crash Bandicoot.cue" -o "Crash Bandicoot.chd"
The disc image must still be there each time you play, because the game streams levels and audio from it.
Command line options also work on Windows (CrashBandicoot.exe --prepare … / --run …). If settings.json already points to a valid disc, --run doesn't need the path.
| Windows | Linux | Android | |
|---|---|---|---|
| System | Windows 10 or 11 | glibc 2.34 or later: Ubuntu 22.04+, Debian 12+, Fedora 35+, RHEL / AlmaLinux / Rocky Linux 9+ | Android 8.0 (API 26) or later |
| CPU | 64-bit x86 (x64) | 64-bit x86 (x86-64) | 64-bit ARM (arm64-v8a) |
| Graphics | OpenGL 4.3 | OpenGL 4.3 | OpenGL ES 3.2 |
| Also needed | Visual C++ Redistributable 2015–2022 (x64) | X11 or XWayland | Nothing |
libicu), which every desktop distribution includes. Older releases, such as Ubuntu 20.04 or Debian 11, have an older glibc and can't run the game.GL_EXT_blend_func_extended. Adreno (Snapdragon) and Mali drivers do. The APK also contains x86_64 libraries (emulators, some Chromebooks), but that gets less testing.game/ folder next to the exe. Nothing is uploaded anywhere.The extra features (widescreen, high frame rate, cheats) hook into the game's own logic. To do that we had to understand how Crash actually works inside, and for that we owe a lot to the people credited below.
Everything stays next to the exe: settings.json, saves in save/, the prepared game in game/, and your mods/. There's no telemetry.
Open an issue. A level name and a short description of what happened help a lot. Pull requests for the launcher, runtime, UI or docs are welcome.
Please don't ask where to download the game, and never attach disc images or generated game code.
This project stands on the shoulders of some amazing people.
![]() @arciks1192-svg | Our full-time bug hunter. Most of the issues ever opened on this repo came from them: every broken platform, odd camera and missing wall was found, reported and retested. A huge part of the game playing as well as it does today is down to them. Thank you! |
![]() @wurlyfox | c1, the decompilation of Crash Bandicoot's engine. This project would never have been possible without it. Most of the cool features exist because c1 told us what the game's memory and code actually mean. Widescreen, high frame rate, level select and direct level warps all rely on it. |
![]() @ManDude | goocdump, the decompiled GOOL scripts. GOOL is Naughty Dog's own language that drives every crate, enemy and platform in the game. Reading those scripts is how we make each object behave correctly at 60, 120 and 240 FPS. |
![]() RecompOne | The static PS1 recompiler and runtime this whole thing is built on (MIT). |
Also thanks to:
If you enjoy the project, you can buy me a coffee on Ko-fi
You need the .NET 10 SDK.
dotnet build CrashBandicoot.Launcher -c Release
dotnet run --project CrashBandicoot.Launcher -c Release -f net10.0-windows
Linux (no arguments opens the launcher, --run starts the game directly):
dotnet build CrashBandicoot.Launcher -c Release -f net10.0
dotnet run --project CrashBandicoot.Launcher -c Release -f net10.0
dotnet run --project CrashBandicoot.Launcher -c Release -f net10.0 -- --run /path/to/game.cue
From the repo root, python publish_release.py asks which platform to build:
publish-single\CrashBandicoot.exepublish-linux\CrashBandicootpublish-android\CrashBandicoot-<version>.apk (arm64, signed)You can also run it without prompts: --platform windows|linux|android|all. Other options are --out my-folder and --clean.
The first Android publish creates signing/android-release.keystore, which is gitignored. Back it up: if you lose the keystore, you can't update the same app.
Equivalent raw commands:
dotnet publish CrashBandicoot.Launcher -c Release -f net10.0-windows -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:IncludeAllContentForSelfExtract=true -p:EnableCompressionInSingleFile=true -o .\publish-single
dotnet publish CrashBandicoot.Launcher -c Release -f net10.0 -r linux-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:IncludeAllContentForSelfExtract=true -p:EnableCompressionInSingleFile=true -o ./publish-linux
The single-file binary extracts its bundled dependencies at runtime. User data (save/, game/, settings.json) is always written next to the real exe.
Before uploading a release, make sure it contains only tools and UI: no .bin/.cue/.chd, no main.cs, no game.recomp.dll or game/ folder.
| Path | Role |
|---|---|
CrashBandicoot.Launcher/ | WinForms launcher (Windows), Avalonia launcher (Linux, Linux/), CLI, and the local recompile pipeline |
AndroidLauncher/, AndroidRuntimeHost/ | Android app |
RecompOne.Runtime/ | PS1 HLE runtime (from RecompOne), plus frame pacing, widescreen and cheats |
RecompOne.Recompiler/ | Recompiler library (from RecompOne) |
examples/mods/ | Sample mods, see docs/MODDING.md |
docs/ | Technical notes (how we got it playable, native widescreen, …) |
Unofficial fan project.
The 1996 classic, running natively on PC and Android. In widescreen, at 240 FPS, in 4K.
This isn't an emulator. The original PS1 code is statically recompiled into a native program on your own machine, then given the upgrades the PS1 never could: a real 16:9 view of the world, high frame rates, high resolutions, mods and cheats.
F5 saves, F8 loads, F6/F7 switch slot. The same actions are in the pause menu.mods/ and switch them on or off from the launcher or the in-game Dev Menu. See the modding guide..chd or .cue + .bin dump. No extraction or converter needed.Every extra is optional: each one has its own switch in Settings, so you can play it exactly like the original.
It's still a work in progress. Widescreen is a big job: some levels still show the edges of the original scenery. Bugs exist, and we'd love to hear about them (see Found a bug?).
You need your own dump of Crash Bandicoot (USA), serial SCUS-94900, as a .chd or as a .cue with its .bin. The game is not included here; read the fine print.
CrashBandicoot.exe from Releases..chd or .cue.The first launch builds the game on your PC, which takes a moment. Later launches start straight away. If the game window doesn't open, check the System requirements.
Install the .apk from Releases (arm64), select your disc, and play with touch controls or a gamepad.
CrashBandicoot-Linux from Releases.chmod +x CrashBandicoot-Linux)..chd or .cue, then click START GAME. A disc in the same folder as the program is picked up on its own.It's the same launcher as on Windows, with Settings, Controls, Mods and Cheats, usable with mouse, keyboard or gamepad. The first launch builds the game from your disc, which takes a minute or two. While you play, the launcher steps aside, and it comes back when you close the game. In About (the i button) you can add it to your applications menu, which also makes it show up in Steam's Add a Non-Steam Game list.
You need a GPU with OpenGL 4.3+ (Mesa, NVIDIA or AMD) and a distribution with glibc 2.34+ (see System requirements). Audio (OpenAL Soft) is bundled, so there's nothing else to install. The launcher window uses X11, which Wayland desktops provide through XWayland. If it doesn't start, attach logs/last-run.txt (next to the program) to your bug report.
./CrashBandicoot-Linux --run /path/to/your/game.chd
Without the path, --run uses the last disc you played.
Segmentation fault in a VMIf it crashes right after launching … game.recomp.dll, the VM probably can't create an OpenGL 4.3 context. Check with glxinfo -B and enable 3D acceleration. For a quick test, try software GL:
sudo apt install mesa-utils
LIBGL_ALWAYS_SOFTWARE=1 ./CrashBandicoot-Linux --run /path/to/game.cue
Supported dump: a standalone CD image with a single MODE2/2352 track, matching the NTSC-U disc. Other regions, multi-track layouts, DVD/GD-ROM images and CHDs that need a parent are not supported.
To turn a .cue + .bin into a CHD, use MAME's chdman with the CUE next to its BIN:
chdman createcd -i "Crash Bandicoot.cue" -o "Crash Bandicoot.chd"
The disc image must still be there each time you play, because the game streams levels and audio from it.
Command line options also work on Windows (CrashBandicoot.exe --prepare … / --run …). If settings.json already points to a valid disc, --run doesn't need the path.
| Windows | Linux | Android | |
|---|---|---|---|
| System | Windows 10 or 11 | glibc 2.34 or later: Ubuntu 22.04+, Debian 12+, Fedora 35+, RHEL / AlmaLinux / Rocky Linux 9+ | Android 8.0 (API 26) or later |
| CPU | 64-bit x86 (x64) | 64-bit x86 (x86-64) | 64-bit ARM (arm64-v8a) |
| Graphics | OpenGL 4.3 | OpenGL 4.3 | OpenGL ES 3.2 |
| Also needed | Visual C++ Redistributable 2015–2022 (x64) | X11 or XWayland | Nothing |
libicu), which every desktop distribution includes. Older releases, such as Ubuntu 20.04 or Debian 11, have an older glibc and can't run the game.GL_EXT_blend_func_extended. Adreno (Snapdragon) and Mali drivers do. The APK also contains x86_64 libraries (emulators, some Chromebooks), but that gets less testing.game/ folder next to the exe. Nothing is uploaded anywhere.The extra features (widescreen, high frame rate, cheats) hook into the game's own logic. To do that we had to understand how Crash actually works inside, and for that we owe a lot to the people credited below.
Everything stays next to the exe: settings.json, saves in save/, the prepared game in game/, and your mods/. There's no telemetry.
Open an issue. A level name and a short description of what happened help a lot. Pull requests for the launcher, runtime, UI or docs are welcome.
Please don't ask where to download the game, and never attach disc images or generated game code.
This project stands on the shoulders of some amazing people.
![]() @arciks1192-svg | Our full-time bug hunter. Most of the issues ever opened on this repo came from them: every broken platform, odd camera and missing wall was found, reported and retested. A huge part of the game playing as well as it does today is down to them. Thank you! |
![]() @wurlyfox | c1, the decompilation of Crash Bandicoot's engine. This project would never have been possible without it. Most of the cool features exist because c1 told us what the game's memory and code actually mean. Widescreen, high frame rate, level select and direct level warps all rely on it. |
![]() @ManDude | goocdump, the decompiled GOOL scripts. GOOL is Naughty Dog's own language that drives every crate, enemy and platform in the game. Reading those scripts is how we make each object behave correctly at 60, 120 and 240 FPS. |
![]() RecompOne | The static PS1 recompiler and runtime this whole thing is built on (MIT). |
Also thanks to:
If you enjoy the project, you can buy me a coffee on Ko-fi
You need the .NET 10 SDK.
dotnet build CrashBandicoot.Launcher -c Release
dotnet run --project CrashBandicoot.Launcher -c Release -f net10.0-windows
Linux (no arguments opens the launcher, --run starts the game directly):
dotnet build CrashBandicoot.Launcher -c Release -f net10.0
dotnet run --project CrashBandicoot.Launcher -c Release -f net10.0
dotnet run --project CrashBandicoot.Launcher -c Release -f net10.0 -- --run /path/to/game.cue
From the repo root, python publish_release.py asks which platform to build:
publish-single\CrashBandicoot.exepublish-linux\CrashBandicootpublish-android\CrashBandicoot-<version>.apk (arm64, signed)You can also run it without prompts: --platform windows|linux|android|all. Other options are --out my-folder and --clean.
The first Android publish creates signing/android-release.keystore, which is gitignored. Back it up: if you lose the keystore, you can't update the same app.
Equivalent raw commands:
dotnet publish CrashBandicoot.Launcher -c Release -f net10.0-windows -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:IncludeAllContentForSelfExtract=true -p:EnableCompressionInSingleFile=true -o .\publish-single
dotnet publish CrashBandicoot.Launcher -c Release -f net10.0 -r linux-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:IncludeAllContentForSelfExtract=true -p:EnableCompressionInSingleFile=true -o ./publish-linux
The single-file binary extracts its bundled dependencies at runtime. User data (save/, game/, settings.json) is always written next to the real exe.
Before uploading a release, make sure it contains only tools and UI: no .bin/.cue/.chd, no main.cs, no game.recomp.dll or game/ folder.
| Path | Role |
|---|---|
CrashBandicoot.Launcher/ | WinForms launcher (Windows), Avalonia launcher (Linux, Linux/), CLI, and the local recompile pipeline |
AndroidLauncher/, AndroidRuntimeHost/ | Android app |
RecompOne.Runtime/ | PS1 HLE runtime (from RecompOne), plus frame pacing, widescreen and cheats |
RecompOne.Recompiler/ | Recompiler library (from RecompOne) |
examples/mods/ | Sample mods, see docs/MODDING.md |
docs/ | Technical notes (how we got it playable, native widescreen, …) |