Cross-Platform System Emulator for the Nintendo DS
Open DS and choose a game, or drop a ROM onto the desktop window. Select your BIOS and firmware files in Settings.
Play with the keyboard and use your mouse or touchscreen for the lower screen. Change the controls, screen layout, rendering resolution and volume.
| DS input | Keyboard / pointer |
|---|---|
| D-pad | Arrow keys |
| A / B | X / Z |
| X / Y | A / S |
| L / R | Q / W |
| Start | Enter |
| Select | Backspace or Shift |
| Touchscreen | Click or drag on the lower screen |
Change bindings in the desktop Controls dialog or the browser's Input settings. On desktop, F9 pauses, F11 toggles fullscreen and F12 resets.
DS autosaves your game progress. Import and export cartridge saves to move between devices or keep a backup.
Desktop saves live in your system's user-data directory. Set DS_USER_DIR to
choose another location. Browser saves stay in the browser you play in;
use Export save to take them with you.
Requires Rust through rustup and the native build toolchain for your platform. The repository selects its Rust toolchain automatically.
Install Qt 6 and a C++ compiler. On Windows, use the MSVC build of Qt and set
QT_DIR to its installation directory. Linux and macOS builds use pkg-config
to find Qt.
cargo run --release -p ds-app --lockedPass a game path to open it at launch:
cargo run --release -p ds-app --locked -- "path/to/game.nds"Requires Python 3 to serve the built app locally.
rustup target add wasm32-unknown-unknown
cargo install wasm-bindgen-cli --version 0.2.129 --locked
cargo build -p ds-web --lib --release --target wasm32-unknown-unknown --locked
wasm-bindgen --target web --out-dir web/pkg target/wasm32-unknown-unknown/release/ds_web.wasm
python -m http.server 8080 --directory web --bind 127.0.0.1Open localhost:8080 and choose a game.
Report bugs or request features. For bugs, include your operating system, the game and steps to reproduce.