top of page

0.9.5 / 04-11-2022





average rating is 3.6 out of 5
average rating is 3.1 out of 5
average rating is 4 out of 5

MelonDS is a work-in-progress Nintendo DS emulator aiming for better performance while being able to to emulate Wi-Fi and local multiplayer capabilities. It has many quality of life features such as save states, Joystic support, screen positioning, RTC, microphone and much more..! It's developed by a former contributor of DeSmuME and even has libretro core available. There's also active development of an Android port.

It also requires DS BIOS/firmware copies

  • bios7.bin, 16KB: ARM7 BIOS

  • bios9.bin, 4KB: ARM9 BIOS

  • firmware.bin, 128/256/512KB: firmware

Please note firmware boot requires a firmware dump from an original DS or DS Lite. DS firmwares dumped from a DSi or 3DS aren't bootable and only contain configuration data, thus they are only suitable when booting games directly.


Windows: None Reported

Mac: Install the appropriate libraries beforehand with the Homebrew Package Manager.

         In Terminal, type  "brew install qt5 sdl2 libslirp"

Most Recent Changes


As of today, the melonDS project is 6 years old. For this occasion, we present you this special version of the melonDS logo, recolored to the same pretty sky-blue color as 6 itself.

We wanted to have Peach bake a cake shaped like this, but Bowser kidnapped her again. We aren't great bakers at the melonDS HQ, so... yeah.

Regardless, these 6 years are a great success. Back in 2016, when I started working on melonDS, I was mostly just making it to have fun and pass time until my job started. I had absolutely no idea the project would go on for so long, and be as much of a success as it has been. So, first of all, I want to thank all the comrades who have helped make this possible. The melonDS team and other contributors. nocash and his great documentation. Everybody else who has been involved in reverse-engineering the DS/DSi hardware, cracking the DSi security, etc... And of course, everybody who has been using melonDS, testing games in it, reporting issues, suggesting improvements, etc...

Thank you all. melonDS is a team effort, and you deserve your part of the birthday cake.

Improved local multiplayer

This is a big change. If you know melonDS, you know that local multiplayer has always been finicky. You had to disable your framerate limiters, sacrifice some goats to the wifi deities, and hope everything would work without disconnecting. Well, this is past now! melonDS 0.9.5 is the result of the first season of the local multiplayer saga, and I dare say that the result is pretty good.

As an example: there was no way to get Mario Kart DS multiplayer to stay connected for more than a few seconds, before. Now? It's smooth as butter. Many games have been tested and most of them work absolutely fine, atleast in two-player mode. It is also possible to go for three players and more, but more atypical multiplayer settings might run into problems, or suffer from decreased performance. Oh and if you have an original DS firmware, it's also possible to use download play and Pictochat.

However, it is worth noting that I've had to completely rework the way local multiplayer communication and sync were handled. The new method requires all participating melonDS instances to be running on the same machine, so it isn't possible to play over LAN. Not that it has ever worked well tbh. But, essentially, the new IPC communication layer has extra smarts to avoid lag as much as possible, which are made possible by the use of shared memory -- these would be much more difficult, if not impossible, to replicate with BSD sockets over the network.

The melonDS UI has also been revamped to make the multiplayer experience smoother. It is possible to launch new isntances of melonDS easily from the emulator's System menu (opening them just by opening the melonDS executable should also work). Certain parts of the emulator's configuration will be unique to each instance, for example it is possible to configure each instance to use a different joystick, to select which instances can output sound, and so on.

There are a couple shortcomings to this. First one, some emulator settings (like BIOS/firmware files) are shared across all instances, but if you modify them, they may not reflect to instances which are already opened. These settings should be easily identifiable as I made them editable from the first melonDS instance only. Also, keyboard input, due to how it works, won't be suitable for playing a multiplayer game with a friend -- you will need joysticks for that.

However, we have big plans for this. There will be a second season to the local multiplayer saga, where we will implement netplay. This will make it possible to play with your friends over LAN, or even over the internet. The downside is that it will require each participating machine to run every participating melonDS instance, but we're confident that any decent computer can handle this. Besides, this is the cost to keeping a multiplayer game in sync. Due to how tight the local multiplayer timings are, there's no way Nintendo's wifi protocol would ever work over the internet.

The improvements to local multiplayer include improvements to wifi emulation itself, which may also improve stability in WFC games.

DSi camera support

melonDS had basic DSi camera emulation since version 0.9.1, but it wasn't very useful as it was just feeding a fixed stripe pattern as camera input. You guess this doesn't help sell our DSi emulation, seeing as cameras are the number one feature of that console, and the main reason some games support it at all instead of just sticking to the original DS.

melonDS 0.9.5 has actual DSi camera support now. That is, you can configure camera input to be sourced either from physical cameras on your computer, or from a fixed image file. Camera emulation has also been improved, which means that for example it is possible to take pictures in the DSi camera app, and they will be saved to your emulated SD card if you have one. Not the most useful thing, but this should also mean better camera support in DSi games.

Revamped OpenGL context handling

The way melonDS handled OpenGL contexts in the Qt frontend was weird. It was responsible for a number of problems, such as for example the inability to support proper vsync.

This is past now. Generic has been porting Stenzek's OpenGL context code from DuckStation to melonDS. This reworks the way OpenGL contexts are handled to be more sane and less prone to problems. This also means that we now have an actual, proper vsync setting.

DSi DSP support

Well, technically, we've had support for that since melonDS 0.9.3. It just didn't work due to a bunch of issues with it. Now it does.

Don't get overly excited over this, though. While I have verified that it atleast works to some extent, teakra (the DSP interpreter) is slow enough that melonDS will likely fall to a single-digit framerate when the DSP is used. That's an improvement over just freezing, but certainly nowhere near playable. We will work on a DSP JIT to alleviate this.

CLI improvements courtesy patataofcourse

The command line interface (CLI) of melonDS has been revamped. Most notably:

• It is possible to boot melonDS with no game loaded, or to load a game without booting, with the -b (or --boot) switch (values: always/never/auto)
• the -f (or --fullscreen) switch lets you start the emulator in fullscreen
• when loading an archive via the CLI, it is possible to specify which file to load from the archive
• the CLI help (invoked by the --help option) will show all the possible CLI arguments and values

Change Log

• remove incorrect color profile from PNG icons (Nadia)
• DLDI fixes for the Smash demo (Arisotura)
• fix gaps in I/O handling (Arisotura)
• fix invalid savemem commands, fixes Dementium (Arisotura)
• FreeBIOS: add VRAM-compatible LZ77 decompress function, fixes Yoshi's Island (Arisotura)
• default firmware: in DSi mode, emulate DWM-W015 wifi board instead of DWM-W024 (Arisotura)
• default firmware: save WFC settings to separate file (Arisotura)
• disable firmware overrides UI when firmware override isn't checked (Nadia)
• 2D: more accurate fade/blending (Arisotura)
• DSi: add support for GXFIFO NDMA (Arisotura)
• DSi: add mainRAM mirror at 0x0C000000 (Arisotura)
• add 3DS 5:3 aspect ratio, refactor aspect ratio code (Nadia)
• OpenGL: fix 16x resolution on macOS (Nadia)
• fix triggers being recognized as negative analog stick values during mapping (Nadia)
• fix joystick mapping buttons on macOS (Nadia)
• DSi: preliminary implementation of SNDEXCNT (Generic)
• DSi: fix SD inserted/removed IRQ bits (Generic)
• DSi: implement 8/16bit access to AES registers (Generic)
• DSi: fix SCFG_MC cart-inserted bit (Generic)
• JIT: invalidate blocks in ARM7 VRAM/WRAM when it is remapped (Generic)
• fix ROM banner reading when the ROM has no banner (Rayyan, Arisotura)
• fix UTF16 ROM title handling in the ROM info dialog (Rayyan)
• wifi: improvements to wifi emulation (Arisotura)
• wifi: shared-memory based sync/comm mechanism for local wifi (Arisotura)
• proper support for multiple melonDS instances for multiplayer (Arisotura)
• DSi: actual, proper camera support (Arisotura)
• DSi: fix DSP enough that it will actually work (Arisotura)
• fix OpenGL context handling (Stenzek, Generic, Nadia)
• force-align all memory accesses (instead of just CPU memory accesses) (Arisotura)
• better CLI parameter handling (patataofcourse)
• fix bugs in DSi direct boot (Arisotura)


I know this has been a long wait, but finally, here it is: melonDS 0.9.4 is out.

It has been numbered this way because 1.0 is going to be a milestone release: we want to get local multiplayer stable for 1.0.

Anyway, what's new in melonDS 0.9.4? A bunch of improvements that should make things easier for the average end user.

Most notably, in DS mode, melonDS no longer requires you to obtain BIOS/firmware files. You can always supply these if you have them around, for a more accurate experience, but if you don't, melonDS will default to using DraStic's FreeBIOS clones. Similarly, a barebones firmware with default configuration data will be generated.

However, for now, DSi mode still requires you to provide BIOS/firmware/NAND dumps. We are studying ways to get around this requirement, but it's going to take us some work.

There is also a new dialog for firmware settings, which allows you to override the firmware settings with your own. This is intended for when using the default internal firmware, but it can also override the settings in an external firmware, and it even works in DSi mode.

DLDI support has also been upgraded: it is now possible to have melonDS generate a SD image for DLDI on its own, and it is also possible to have said SD image synced to a folder on your computer. This means that you can place files in that folder and they will show up in the emulated DLDI SD card, and conversely, any changes made to the emulated SD card will be reflected to the folder on your hard drive.

While this has been tested extensively, we still recommend that you keep a backup of any folder you intend to use with this, just in case. You can also set your DLDI SD card to be read-only if you don't need it to be writable.

All of this is also supported for the DSi SD card in DSi mode.

Support for ARM9 PU exceptions in interpreter mode has been added. For commercial games, this doesn't mean a lot, other than making certain crashes work like on hardware. But this may definitely come in handy for homebrew developers, as that means exception handlers will work as they should.

We have added a much requested feature: custom paths for saves, savestates and cheat files. The default behavior is that melonDS will place these files alongside your ROMs as it has always done, but you can specify paths where you want these files to be placed if you don't want them to pollute your ROM directory.

In the same vein, the File menu has been revamped to hopefully make the process of loading ROMs more intuitive. This post already talks about it in detail, so read it if you have any doubts.

Generic has been working on properly supporting wifi power saving. This is probably not perfect yet, but it should fix the weird issues you can encounter in Pokémon games when communications are enabled.

We also have some new fun features: Github user 2jun0 made a RAM search dialog, which may come in handy to those who want to make cheat codes. Rayyan also made a new dialog for changing the emulated battery level, which may come in handy to homebrew developers and such, and he's been remaking the input config dialog to be all fancy.

Change Log

  • Redesign of the Input dialog (Rayyan)

  • Use DraStic open-source DS BIOS replacement (Swordfish90, asiekierka)

  • Generate non-bootable firmware replacement (Swordfish90, asiekierka, others)

  • Support for syncing DLDI/DSi SD image to a folder (Arisotura)

  • ARM9 PU (code/data abort) support in interpreter mode (Arisotura)

  • Fix ADPCM decoding bug resulting in potential crackling (Arisotura)

  • Block sound DMA from reading the ARM7 BIOS (Arisotura)

  • Smarter SDL initialization (andrigamerita, Nadia, Arisotura)

  • Properly center the main window on macOS (Nadia)

  • Don't try to render if the emulator is inactive (Nadia)

  • Fix potential issues with DSi title importing (Nadia, Epicpkmn11)

  • Custom path support (Arisotura)

  • Fix nifi socket init on BSD and macOS (Nadia)

  • Add support for zero addresses in AR codes 3xxxxxxx to Axxxxxxx (Arisotura)

  • Lower window refresh rate if running too fast (RSDuck)

  • Wifi power-saving support (RSDuck)

  • Allow swap-screen hotkey to swap between displaying only top screen and only bottom screen (ZackWeinstein)

  • Add RAM search dialog (2jun0)

  • Add power management dialog for setting battery parameters (Rayyan)


Fix macOS right modifier detection (Nadia)
• Fill most gaps in ROMList (Arisotura)
• Fix touchscreen code in non-hybrid layout mode (Arisotura)
• GBACart: simulate open-bus decay roughly (Arisotura)
• Frontend: handle tablet and touch events (Generic aka RSDuck)
• Implement NO$GBA debug registers (BlueTheDuck)
• Make Setup Cheats option reappear on macOS (Nadia)
• Add frame step hotkey (Yukitty, additional fixes by Gal20)
• Add DSP code (PoroCYon, purringChaos)
• Save window state (Arisotura)
• JIT optimisations and fixes (Generic aka RSDuck)
• Add ROM info dialog (WaluigiWare64)
• Allow using DSi footer within NAND images (MightyMax)
• More accurate NWRAM implementation (MightyMax)
• Only open microphone if necessary (Arisotura)
• Fix undo load savestate loading (Generic aka RSDuck)
• Fix pause when inactive (Generic aka RSDuck)
• Add audio interpolation (Arisotura)
• Add SOUNDBIAS and optional 10bit audio (Nadia)
• Patch touchscreen calibration data in DSi mode (Arisotura)
• Add DSi title manager (Arisotura)
• Fix threaded rasteriser deadlock when VCount is moved (Generic aka RSDuck)
• Add preliminary DSi-mode direct boot (MightyMax, Arisotura)
• More accurate DMA timings (Arisotura)

• fix JIT on ARM Macs
• add proper Mac builds
• GX: optimize single-param commands
• add recent-files menu (abcdjdj)
• add support for loading files from archives
• fix JIT bugs
• fix wifi bugs
• improve performance of save-memory writeback
• add hotkey for swapping screens
• 3D/GL: attempt fixing various bugs
• fix OpenGL scaling on hiDPI displays
• rework GPU2D for easier integration of full GL rendering
• rework NDSCart and GBACart to make it easier to implement new cart types
• add support for NAND save memory (WarioWare DIY, Jam with the Band)
• fix bugs in DSi I2C and SD/MMC interfaces
• new screen modes

Show Previous Changes


  • add fullscreen hotkey

  • remove hardcoded F11-debug key (oops)

  • fix some gaps in the IO handlers

  • add ability to run unlaunch'd DSi NANDs

  • add preliminary camera support (feeds fixed stripe pattern)

  • fix potential bugs with tight timers (fixes ZXDS)

  • SPU: small optimization to the mixer

  • better framerate limiter

  • fix several JIT issues

  • GPU: lay bases for EVIL PLANS

  • GPU: emulate separate scroll register for 3D layer scrolling

  • some corrections to the ROM savetype list

  • a bunch of misc fixes, as usual


  • merge in experimental DSi support

  • 2D: delay palette lookup for sprites

  • 2D: some attempts at fixing mosaic

  • CP15: only update PU regions when actually needed

  • 2D: fix sprite Y-flip

  • 3D/GL: fix transparency bugs

  • add warning against hacked firmwares

  • fix libpcap bug (i404788)

  • better file handling code (Nadia)

  • GBA slot and solar sensor support (rzumer)

  • add support for AR cheat codes

  • fix handling of ROMs with encrypted secure area

  • 3D: change clipping to be closer to hardware

  • 3D: implement DISP_1DOT_DEPTH

  • 3D: more accurate viewport transform

  • build fixes (Nadia)

  • add JIT recompiler (RSDuck)

  • new Qt UI

  • SPU: only start channels when they can actually run

  • 2D: allow writes to DISPCNT/masterbright/capture/dispFIFO regardless of POWCNT

  • SPU: don't process channels with len<4

  • 3D/GL: cleaner polygon generation code

  • 3D/GL: add attempt at reducing warping on quads/etc

  • 3D: add missing variables to savestates

  • wifi: avoid potential out-of-bounds writes with invalid RX buffer setups

  • 3D/GL: fix issues with framebuffer handling

  • make MAC randomization optional

  • make software renderer the default

  • add basic DLDI


  • fix ARM 'shift by register' operands (fixes Mario Party DS 'Stick and Spin' minigame)

  • remove glBindImageTexture() (not needed and requires GL 4.2)

  • fix input bugs when using Ctrl/Alt/Shift keys for buttons

  • fix possible crashes when exiting (again. heh)

  • 2D: support forcedblank+masterbrightness

  • 2D: fill gaps in implementation (mode6 on sub GPU, mode7, 'prohibited' modes/sizes for OBJ and largeBG)

  • build fixes

  • fix division edge case (xperia64)

  • new FPS limiter, audio sync, vsync for OpenGL

  • add warning message if romlist.bin is not found (Zettymaster)


  • fix GL renderer not working at all on certain setups (RSDuck)

  • add 32bit writes to certain IO ports (fixes some freezes)

  • OpenGL: disable vsync under Windows

  • fix bug when mapping a joystick axis but no button

  • set kMaxIterationCycles to 64 (old value 16)

  • fix potential crash when pressing Escape with menus opened

  • OpenGL: remove shitty hack

  • OpenGL: better lines

  • fix potential crash when closing emu


  • fix potential issue generating the config file path under Linux

  • fix 3D/2D blending bugs under OpenGL

  • fix potential crash under the software renderer when display capture is used

  • basic, optional OSD system

  • add support for setting key mappings to none

  • add fast-forward and pause/reset hotkeys

  • fix crash when closing an input config dialog during the joystick mapping process

  • fix bugs when changing video settings with no game loaded

  • faster IRQ checks

  • faster VRAM reads

  • 3D/OpenGL: preliminary edge marking

  • 3D/OpenGL: fix fog alpha

  • 2D: render sprites one scanline in advance (iCarly - Groovy Foodie)

  • 3D/software: fix rendering of line polygons

  • 3D/OpenGL: add proper-ish support for line polygons

  • support multiple joysticks

  • add support for mapping keys with modifiers

  • add support for mapping joystick axes alongside buttons, remove hardcoded axis 0/1 mapping

  • overall better input/hotkey code


  • fix CP15 init during direct boot

  • do not apply delays to cart transfers when the WR bit is set

  • misc fixes

  • OpenGL renderer and upscaling


  • fix potential spurious sounds when starting melonDS

  • fix crash when using microphone with a WAV that has multiple channels

  • small optimizations and tweaks

  • wifi: add wifi settings dialog, with libpcap adapter list

  • wifi: first version of indirect (non-libpcap) mode

  • move most of the config settings to a platform-specific array (really just making it easier to port melonDS)


  • fix STRD_POST (fixes Just Sing - Vol 2 music)

  • add support for POWCNT1 (fixes Imagine - Teacher)

  • 2D: fix fade effects to semitransp sprites and 3D layer (fixes Devil Survivor)

  • 3D: truncate W to 24 bits before viewport transform. do not render polygons with any W=0.

  • attempt at fixing hiDPI under Windows

  • fix input config dialog crashes under Linux

  • add support for hotplugging joysticks

  • make 'savefile relocation when using savestates' disabled by default

  • remember whether main window is maximized

  • add menu for setting main window to an integer size

  • init save memory to 0xFF instead of 0x00

  • romlist.bin: index games by serial rather than CRC. updated romlist.

  • add support for 128K EEPROM (Pokémon Mystery Dungeon - Explorers of Sky)

  • make nocashprint also work in ARM mode

  • GX: always latch rendering engine registers, even when not flushing

  • GX: fix polygon timings when polygon is rejected by culling/clipping

  • rewrite main emu loop to use absolute timestamps


  • microphone input (physical mic, noise, wav)

  • nocash-style console printing

  • send console output to cmd under Windows

  • corrections to romlist.bin

  • 2D: fix blending for semitransp sprites and 3D layer when windows are used (bypasses window 'color effect enable' check)

  • 3D: fix 'equal' depth test margin in Z-buffering mode, fixes Puzzlers World 2

  • SPU: add support for channel repeat mode 3 (behaves same as 1)

  • SPU: always clear channel buffers, even when running ch0-7 in mode 3 (fixes American Girl - Kit Mystery Challenge!)

  • libui/windows: cache ideal size for uiButton. fixes lag in input config dialog

  • close/open lid, sleep mode

  • hotkey system

  • audio settings dialog, with volume slider and microphone settings

  • libui/gtk: remember last directory in which a ROM was opened

  • libui/gtk: attempts at fixing input config dialog crashes

  • framerate limiter toggle (abcdjdj)

  • add Linux libpcap library names (dogtopus)

  • betterer readme (Aqueminivan)

  • GX: set busy flag immediately when putting things in the FIFO, fixing possible race condition

  • GX: revise timing for SWAP_BUFFERS command

  • add flatpak manifest (cpba)


  • fix glitched lines in 3D

  • fix backwards windows

  • more accurate GX timings

  • more accurate DMA and memory timings

  • check for config/etc files in melonDS's directory explicitly

  • allow joystick axis events even when no dpad buttons are mapped

  • detect savemem type from database instead of huge messy fucky code


  • fix possible crashes when exiting

  • wifi: add basic access point melonAP (very beta)

  • fix SMULWx/SMLAWx opcodes, fixes Sims 2 music

  • add support for loading BIOS/firmware files and config file from AppData or ~/.config/melonds or from the executable directory (hcorion)

  • add 32-bit IPCSYNC reads/writes (Dirbaio)

  • add savestates

  • 3D: (hopefully) fix bug in shadow/AA interaction (visible in the MKDS character select preview, bottom border of the platform thing)


  • don't fail completely if SDL haptic init fails (bentley)

  • fail gracefully when ROM loading fails

  • support Unicode filenames under Windows

  • FPS counter is back (sorry!)

  • allow Windows file picker to navigate through shortcuts (instead of trying to load the shortcut as a ROM)

  • screen layout/sizing/scaling modes, screen gap, rotation

  • toggle for screen linear filtering

  • add support for 8bit GXSTAT accesses

  • reset IE/IF properly

  • fix sound capture/playback for things like surround


  • fix screen option menu init

  • add icon

  • add resampler with small tolerance to prevent sound clicks/pops at fullspeed


  • new UI, more stable, less windows all over the place

  • wxWidgets ditched, lost some weight

  • 2D: allow reading BLDALPHA

  • GPU: fix potential issues with VCount write

  • implement 8bit accesses to some registers

  • 2D: mosaic (not quite right for rotscaled sprites)

  • 3D: fix culling

  • allow 128KB firmwares from DSi/3DS

  • 3D: more accurate fog

  • 3D: more accurate polygon edges (but not perfect)

  • 3D: antialiasing

  • 3D: misc optimizations


  • implement access modes for certain IO registers that were unhandled

  • actually implement RCNT instead of hardcoding it

  • wifi: emulation of multiplayer cmd/reply/ack transfers

  • wifi: more accurate RFSTATUS/RFPINS

  • wifi: some games can go into multiplayer now (Pictochat, NSMB, Pokémon known working)

  • improved savemem detect heuristic

  • implement firmware write, fix SPI bugs

  • accurate emulation of 'main memory display FIFO'

  • 2D: fix render/capture order

  • 2D: implement mode6 large BG

  • 2D: fix bitmap BG sizes

  • 2D: fix rotscaled bitmap sprites

  • 3D: fix missing term in MatrixTranslate

  • 3D: fix toon highlight mode

  • 3D: fix boxtest bug

  • 3D: accurate viewport transform

  • 3D: polygon Y-sorting

  • 3D: more accurate interpolation, still not perfect

  • 3D: more accurate Z and W transforms, fix some cases of Z-fighting

  • 3D: separate polygonID attributes for opaque and translucent pixels

  • 3D: start documenting and implementing depth test edge cases

  • emulate delays for SPI transfers and div/sqrt

  • misc bugfixes/additions as usual


  • set POSTFLG when booting games directly, fixes Pokémon games and likely others

  • fix bug with cart DMA, booting a game from the firmware should be stable now

  • better emulation of cart transfer delays

  • better save type heuristics

  • support for writing to VCount

  • 2D: fix display capture blending modes

  • 2D: implement X-flip for bitmap sprites (oops)

  • 3D: fix mode3 (vertex) texcoord generation (Eledees no longer looks like your TV decoder broke)

  • 3D: fix Z-buffering

  • 3D: attempt at fixing culling, works better

  • 3D: latch all rendering-related registers upon VBlank

  • 3D: delay rendering start a bit, for games that run late

  • 3D: optional threaded renderer

  • 3D: change renderer to work per-scanline; accurate stencil buffer

  • 3D: fix alpha calculation when alphablending is disabled via DISP3DCNT

  • 3D: fog and edge marking

  • wifi: more functionality emulated, attempt at sending/receiving data

  • misc bugfixes and optimizations

  • better framerate limiter


  • preliminary sound

  • various compatibility improvements and fixes

  • various little speedups too

  • cart transfer delays emulated

  • RTC uses system time

  • wifi stub -- games requiring wifi functionality shouldn't hang anymore

  • 2D: windows

  • 2D: various fixes to display capture

  • 3D: toon/highlight shading, shadows, polygonID

  • 3D: box test, pos test, vec test


First release.

bottom of page