# doukutsu-rs: a Rust reimplementation of the Cave Story engine

> doukutsu-rs reimplements the Cave Story engine in Rust with quality-of-life improvements and support for the freeware, Cave Story+ and Nintendo Switch data files, shipped as a native binary rather than an emulator. It suits players who own the data files and want a modern, cross-platform build of a 2004 classic, and it ships without any game assets of its own.

**doukutsu-rs/doukutsu-rs** — A faithful and open-source remake of Cave Story's engine written in Rust

- Repository: https://github.com/doukutsu-rs/doukutsu-rs
- Website: https://doukutsu.rs
- Stars: 1,318 · Forks: 82
- Language: Rust
- License: MIT
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/doukutsu-rs-doukutsu-rs

## An engine, not a game

doukutsu-rs is described as a reimplementation of the Cave Story, Doukutsu Monogatari, engine with many quality-of-life improvements, and it lets you enjoy the 2004 indie classic like a modern game. The distinction in that last sentence is the one that matters. This is a native engine, not an emulator and not a wrapper, so the game runs as a Rust program with its own window, its own input handling and its own rendering path rather than being replayed from recorded frames or instrumented at the original binary level. The consequence is that a modern display, a modern keyboard and a modern operating system are all just inputs, and the quality-of-life improvements are things the engine itself can implement rather than things an emulator layer can bolt on. The primary language is Rust, the licence is MIT, and the project is not archived with the last push on 2026-10-13.

## Cargo features describe the whole platform matrix

The Cargo manifest is where the engineering is visible. The package is `doukutsu-rs` at version 1.1.0 on edition 2021 with a rust-version of 1.87, and the binary is `src/main.rs` gated behind a required feature called `exe`. The default feature set is `default-base`, `backend-sdl`, `render-opengl`, `exe`, `webbrowser` and `discord-rpc`, and the alternatives reveal the design. `backend-glutin` swaps the SDL2 backend for winit plus glutin, and `backend-horizon` exists for the Nintendo Switch homebrew port, which is also why the repository has `drshorizon/` and `drsandroid/` directories at the top level. `render-opengl` is the renderer, `ogg-playback` pulls in lewton for the sound, `discord-rpc` adds rich presence, `netplay` adds serde_cbor, and `editor` and `android` are additional flags. A separate `crates/` directory holds a `mojo` crate, and a commented-out workspace section shows the layout was recently consolidated.

## The data files are the licence boundary

The README is direct about this. In order to work, doukutsu-rs needs to be paired with supported data files, and this repository does not contain any data files. That is the right boundary for a fan reimplementation, and it means the engine is open while the assets stay with whoever owns them. Three sources are supported. The freeware data works, and so does the set from NXEngine(-evo), and so does a supported copy of Cave Story+ from Nicalis. The freeware route is the smoothest because doukutsu-rs works out of the box when it is placed in the same directory as the original Doukutsu.exe executable, and on the initial startup it automatically extracts the additional resources embedded in the vanilla game into a `data` directory. Until that extraction is done, both the engine and the vanilla executable have to be present in the directory, which is a temporary state that catches people out when they move the binary later.

## Cave Story+ as a drop-in replacement

For Cave Story+ the arrangement is cleaner still. doukutsu-rs can be used as a drop-in replacement for `CaveStory+.exe`, with no modifications to the game files needed, and the instructions for Mac live in the Steam release section of the README. The procedure on Steam for Windows, Mac and Linux is the same shape everywhere because the `data` folder is in the same place across all platforms. You locate the doukutsu-rs executable, which in stable, nightly and CI builds sits in `doukutsu-rs.app/Contents/MacOS/doukutsu-rs` and in your own builds in `target/(release|debug)/doukutsu-rs`. Then in Steam you open the library, select Cave Story+, press Manage, choose Properties, go to Local Files and Browse into the `Cave Story+.app` bundle at `Contents/MacOS`, rename or delete the `Cave Story+` executable, copy the doukutsu-rs executable in and rename that to `Cave Story+`, and launch from Steam. The mechanic is a file substitution, not a launcher configuration, so it works with whatever arguments Steam passes.

## The remastered edition and its save compatibility warning

The remastered version, first released in 2017 on Switch, carries an explicit warning. It is incompatible with saves from the original version, and interchanging the save files may result in spawning in wrong locations, softlocks, graphical glitches or other issues. That is a specific enough failure list to be worth taking seriously rather than as boilerplate, because a softlock in a metroidvania is a run that cannot be finished. The Steam remaster from 2026 is not yet supported, with the status tracked in an issue on the repository. For the Switch edition the data comes from the console, extracted with a tool such as nxdumptool from the `data` folder contained in `romfs`. Two details matter there: doukutsu-rs does not rely on the original ROM or executable, you only need the data files, and the dump must include the update, with the Use update/DLC option, because 1.0 is not supported.

## Homebrew on Switch, and the Android folder dance

The Switch homebrew port removes the extraction step entirely. If you run the homebrew port, drshorizon.nro, doukutsu-rs automatically detects and mounts the data files if you launch it over Cave Story+ in Title Override mode, which means holding `R` while starting Cave Story+ and launching d-rs from hbmenu. You can also drop your own data files into a `/switch/doukutsu-rs/data` directory on the SD card, which is overlaid over RomFS when you set it up that way. On Android the path is more manual, and there are two documented routes depending on whether your phone has an app called Files. If it does, you open it, press the menu button, tap on the doukutsu-rs game data folder and copy your files into it. If it does not, the documentation walks through installing Material Files, adding external storage, and the same doukutsu-rs game data folder. The `drsandroid/` directory in the repository is where that platform's code lives.

## Where the Epic Games Store build gets in the way

There is one host environment that actively fights the engine, and the README explains why. Nicalis ships a stray `opengl32.dll` DLL from Windows 7 with the Epic Games Store copies of Cave Story+, and since the game is 32-bit and the DLL is 64-bit it has no effect on the original executable. The repository notes that the Epic Games Store version can cause issues and points to instructions further down. It is a small thing, but it is the kind of detail that only shows up in a reimplementation that ships as a native binary, and it is the clearest illustration of the trade-off between an emulator and an engine: a native engine is faster and more capable, and it also inherits the host machine's file layout problems. There is also a macOS note, that a cannot-be-opened message is resolved by right-clicking the app and clicking open.

## Conclusion

Adopt doukutsu-rs if you own Cave Story data files and want the game running natively on Windows, macOS, Linux or Android with modern conveniences instead of an emulator. Skip it if you do not have the data files, because the repository ships none and the engine is useless without them, and avoid the remastered version's saves because that edition is documented as incompatible with original saves. Before you start, remember that the freeware route needs the original Doukutsu.exe beside the binary on first launch while it extracts resources, and that a Mac user who sees a cannot-be-opened message needs to right-click the app and open it.

## FAQ

### What data files does doukutsu-rs need?

It needs to be paired with supported data files, and the repository contains none. It works with the original freeware data, data from NXEngine(-evo), or a supported copy of Cave Story+ from Nicalis.

### How do I set up doukutsu-rs with the freeware version?

Place doukutsu-rs in the same directory as the original Doukutsu.exe executable. On initial startup it automatically extracts the resources embedded in the vanilla game into a data directory, and until that is done both the engine and the vanilla executable have to be in the directory.

### Can I use doukutsu-rs with the remastered Cave Story?

The remastered version is incompatible with saves from the original version, and interchanging save files may cause wrong spawns, softlocks or graphical glitches. The Steam remaster from 2026 is not yet supported, and the status is tracked in issue 365.

### Where can I get doukutsu-rs builds?

Stable and beta builds come from get.doukutsu.rs, GitHub Releases and a Flatpak on Flathub for Linux. Nightly builds with the latest fixes are on get.doukutsu.rs and nightly.link, with per-platform permalinks for Windows 64-bit and 32-bit, macOS Intel and Apple M1, Linux 64-bit and Android.

### How do I run doukutsu-rs on the Nintendo Switch?

Either extract the data folder from romfs with a tool such as nxdumptool, making sure to dump with the update/DLC included, or use the homebrew port drshorizon.nro over Cave Story+ in Title Override mode, which detects and mounts the data files automatically.

## Sources

- [doukutsu-rs/doukutsu-rs on GitHub](https://github.com/doukutsu-rs/doukutsu-rs)
- [License: MIT](https://github.com/doukutsu-rs/doukutsu-rs/blob/master/LICENSE)
- [Project website](https://doukutsu.rs)
- [README](https://github.com/doukutsu-rs/doukutsu-rs/blob/master/README.md)
- [Releases](https://github.com/doukutsu-rs/doukutsu-rs/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/doukutsu-rs-doukutsu-rs
