NxEmu is a free, open-source Nintendo Switch emulator for Windows, written in C++ and primarily developed by N3xoX1.

The project is built around openness and transparency. All source code is publicly available on GitHub, allowing anyone to review the code, submit pull requests, report issues, suggest improvements, and contribute to the future of NxEmu.

The Legal Approach to Switch Emulation

In February 2024, Nintendo filed a lawsuit against Tropic Haze LLC, the company behind Yuzu, in federal court. The case never went to trial. Tropic Haze settled quickly, and the terms were severe:

  • Yuzu was shut down
  • Citra was also shut down, as it was connected to the same development team
  • Tropic Haze agreed to pay Nintendo $2.4 million
  • Yuzu’s websites, services, code, and related infrastructure were taken offline, transferred, or destroyed

The developers posted a brief farewell message, and that was effectively the end of both projects.

NxEmu is also a Switch emulator, and it does use some Yuzu code from different emulator subsystems, such as CPU and video. Making the project public comes with obvious legal risk, which means NxEmu has taken specific steps to avoid the same issues that made Yuzu a target.

Nintendo’s key argument was that Yuzu circumvented Nintendo’s encryption and technical protection measures. Because Switch games rely on cryptographic keys and access controls, Nintendo argued that Yuzu violated the DMCA’s anti-circumvention provisions.

The issue is not that emulation itself is illegal. The main legal risk is circumvention.

NxEmu’s strategy is simple: no decryption.

By removing all decryption logic from the emulator and codebase, NxEmu remains a “clean” environment. It provides the hardware logic for interoperability, but requires the user to provide their own already-decrypted files.

For a full breakdown of my understanding of DMCA Section 1201 and how it applies to Switch emulation, read DMCA Section 1201: A Poison Pill.

NxEmu’s History

From the initial release of the Nintendo Switch, I, N3xoX1, had wanted to build a Switch emulator. At the time, there was no way to know whether it would be possible, or whether the console would ever be hacked enough to make meaningful reverse engineering feasible. Without the ability to run tests on real hardware, accurate emulation would have been little more than guesswork.

While Nintendo was developing the Switch, it used the internal codename ‘NX’ before the official name was revealed. That is where the name NxEmu comes from: NX, the Switch codename, plus Emu, short for emulator. It was a clean, descriptive, and easy-to-remember name for the project.

Because I liked the name and knew I wanted to use it for this future emulator, I decided to put my stake in the ground and registered nxemu.com on April 13, 2017.

Since I also had no idea when or if the Switch would be hacked, I assumed that, if an entry point was ever found, it would most likely be on early firmware before Nintendo had time to patch things. With that in mind, I bought an early-release Switch and kept it aside for that purpose. I checked its firmware version, which I believe is 2.3, then put it back in the box. That particular Switch has remained untouched ever since.

Before the bootROM exploit fusée gelée was released in April 2018, I had no information how the Switch worked, beyond knowing the CPU was the same that was found on Android devices. I started to look at how the Android emulator worked and started to build a CPU emulator that could work with Android files, that version of the emulator never got very far.

Getting even the earliest pieces of NxEmu working took far longer than I expected. Before I could even get a simple demo running, Yuzu appeared on the scene. At the time, I did not fully appreciate the advantage they had. Yuzu was not starting from scratch: the Nintendo 3DS and Nintendo Switch share enough architectural similarities that the team was able to fork Citra, a project many of them had already worked on, giving them an enormous head start.

Getting a commercial game to boot was still a major achievement. It is difficult to understand just how much work that takes unless you have tried to write an emulator yourself. But even with that achievement, comparing NxEmu to Yuzu at the time felt like comparing a skateboard to a car. Both can move, but if you need to get across the city, there is only one realistic choice.

I had spent years getting to that point, but the reality was hard to ignore. As long as Yuzu existed in the state it did, NxEmu would always be in its shadow. Even if I kept going and eventually reached a milestone like running Super Mario Odyssey, it was unlikely that many people would care. Yuzu was already the emulator people knew, used, and contributed to.

Even though I put the project on hold, I would still think about it from time to time. I always wanted to go back to it, even if only to the point where someone could sit down and genuinely enjoy playing a commercial game on it.

The landscape changed entirely when Yuzu and Ryujinx were taken down by Nintendo. As I have discussed in my breakdown of DMCA 1201, I believe the flaw for those projects was not emulation itself, but how decryption was handled. Had they not included decryption, I believe there is a real chance they might still be in active development today.

With that belief, I began reconsidering NxEmu. Taking everything I had learned the first time around, I saw an opportunity to modularize the safe and legal elements from Yuzu, such as the CPU, OS, and video components, and bring them into NxEmu, giving the project a new life.

Project Goals

NxEmu is built for the person who just wants to play a game. You should be able to open it, see your library, press a button, and have it work. There should be no need for wikis, messy config files, or guessing games. The defaults should be good enough that most people never have to touch a setting, and the settings that do exist should be intuitive in what they actually do.

Making sure a game is compatible is only the first step. The real goal is to build an emulator people actually reach for: not just one that technically runs games, but one that makes playing them feel natural and pleasant. It should have a clean interface, fast startup, and nothing standing in the way of the experience. I am not just trying to make games appear to work, I want to make them actually work the way the original hardware intended.

That means resisting the temptation to paper over problems with hacks or workarounds. It is easy to use a shortcut to get a specific game running, but those shortcuts eventually cause trouble. A hack that fixes one game often breaks another, and over time the code becomes a collection of exceptions rather than a faithful model of the hardware. Accuracy matters because shortcuts compound. NxEmu should be something you can trust, not just to run a game, but to run it correctly.

At the same time, accuracy should never be an excuse for a poor experience. The two are not in conflict. A technically sound emulator can still have a clean interface and feel good to use. I want precision under the hood and simplicity on the surface. To me, the measure of success is not just how many games boot, but how well they run and how good they feel to play.

In the near term, success looks like sitting down and playing real games at a solid framerate without fighting the software to get there. That is the starting point. But the longer vision is more ambitious. The end goal is a low-level, accurate model of the Switch hardware itself. I want to understand the system deeply enough to replicate any quirks or unusual behaviour accurately.

This involves going beyond what commercial games demand. Most games never push the hardware into its stranger corners. At some stage, I would like to build test programs that can run on real hardware and on NxEmu side by side, stress-testing edge cases and giving me confidence that the emulation is actually correct. That is how NxEmu moves from just playing Switch games to preserving how the hardware works.

The code also should reflect the same values as the product. If the emulator is supposed to be trustworthy, accurate, and not held together by workarounds, then the code underneath should be the same. I am not just trying to ship something that works, but something I am proud of, built in a way that is honest about what it is doing and why.

Getting Involved

NxEmu is an open-source project, and there are several ways to help support it and help it to grow.

  • Join the Community: Stay updated on progress and chat with other users by joining NxEmu’s Discord server: https://discord.gg/hEa4hNyFWU
  • Contribute Code: If you are a developer, you can find the source code, open issues, and submit pull requests on GitHub: https://github.com/N3xoX1
  • Report Bugs: If you find a game that doesn’t work or runs poorly, submitting a clear bug report helps NxEmu find and fix the “edge cases” in the hardware.