Read First!

The below wiki article is based on user submitted content.
Please verify all hyperlinks and terminal commands below!

See a mistake? Want to contribute? Edit this article on Github

FAQ

About Citra

What is Citra?

Citra is a work-in-progress Nintendo 3DS emulator started in early 2013. Citra can currently emulate, with varying degrees of success, a wide variety of different homebrew applications and commercial software.

What is Citra’s License?

Citra is an open-source project, licensed under the GPLv2 (or any later version). Refer to the license document for more information.

Who made Citra?

Citra has an active team of open-source developers. Over 150 people have worked hard on the project since its founding in 2014! The list of contributors can be found on GitHub.

Note: Citra is not affiliated with Nintendo in any way.

Where does the name come from?

The name is derived from CTR, which is part of the model number of the original 3DS.


Running games in Citra

How to get games on Citra?

In order to run your games, Citra requires that you dump your games, game updates, DLC and other 3DS system files from a hacked 3DS. This is the only legal way to obtain these files for use in Citra. Any other method of obtaining these files is considered piracy and therefore illegal.

For dumping your games:

For dumping your updates and DLC:

Although we provide open-source implementations for the 3DS system files in Citra, we recommend users to dump these files from your 3DS for more accuracy:

Where can I download games to use with Citra?

Short answer: You don’t. Buy games and dump them with a Nintendo 3DS.

Long answer: Downloading commercial games is illegal and thus strongly frowned upon by the Citra developers. To prevent legal issues, this includes gray areas like downloading games which you purchased earlier. You don’t necessarily need to own a 3DS yourself, as you can buy game cartridges and dump them with a friend’s console. On the other hand, copying a friend’s game dump is considered illegal. Please note that any mention or discussion of piracy on our forums or Discord channels will result in being banned from our community.

Can Citra run encrypted games?

Yes, though you’ll need to dump your 3DS’ system keys for this to work:

Can Citra run Pokémon games?

All Pokémon games now work properly. For Pokémon X & Y. Linux users building from source need to take a look at Building for Linux for building with the AAC audio decoder.

Does Citra run on an Apple silicon/M1 device?

Citra does not support Macs with M1 chipsets. Our Mac builds may run through Rosetta, but you WILL encounter various issues that we won’t provide support for. We may eventually support M1 Macs, but not at this time.

Are you planning on making an iOS Citra port?

No. We currently have no developers with an interest in making an iOS port happen.

Can Citra run [Insert retail game name here]?

Citra can, ostensibly, “play” many different games now and more will become playable as development progress further. Some games/apps, however, will not load at all – only showing a black screen. Others might only show the title screen and then freeze or crash.

See our Game Compatibility List for more info. You can also help us improve the Game Compatibility List by doing testing and reviewing the game.

You can expect some games to run slowly, though and to exhibit some gameplay and graphical glitches.

Does Citra support Wi-Fi, network connectivity or online play?

Yes, Citra supports networked local Wi-Fi, but does not support connecting to Nintendo’s servers.

Why don’t my Miis have heads/Why do my Miis have a “No-Entry” Sign as their heads?

That No-Entry sign is our open-source replacement to prevent you from crashing. For Miis to have proper heads and faces, you’ll need to dump some system files:

Does Citra have an Android port?

Yes, it has been officially released and can be downloaded via https://play.google.com/store/apps/details?id=org.citra.citra_emu

Does Citra have controller support?

Yes, you can configure your controller directly through the GUI in Emulation -> Configuration (Citra -> Preferences) -> Controls.

Can I make Citra fully portable?

Yes, go to our download page and select Manual download. Then under Nightly Build, click on your operating system’s icon to the right of the latest build available to download the build. Extract it (.7z can be extracted using Winrar or 7zip) and put it wherever you wish. Inside the extracted nightly-mingw folder, create a folder called user. This Citra should now store all of its config, save files and such inside of this user folder. Check to make sure that this user folder is in the same folder that contains citra-qt(.exe) Now you can start this Citra by launching the citra-qt executable found inside of the mingw folder.

Can I expect Citra to play [GAME] at full-speed?

Citra can run most games at variable speed, depending on your hardware configuration. However, not all games are created equally and therefore some games will run at full speed while others might suffer from slow emulation. You may also experience some slowdowns.

A few things to keep in mind when it comes to performance in Citra in general:

  1. Your CPU’s Single Thread Performance.

Citra, like the 3DS, only utilizes 1 CPU core for running games. This means that your performance in Citra will depend on the Single Thread Performance of your CPU. Refer to your CPU’s benchmark in this graph. If it’s below a score of 1,800 the [GAME] might not be playable at decent speeds.

  1. Your (integrated or dedicated) GPU’s OpenGL drivers.

Your GPU’s “horsepower” isn’t terribly important to performance in Citra, as Citra is mostly a CPU heavy program. However, GPU drivers can vary widely in quality between GPU brands and operating systems. For example, historically AMD has had incredibly badly optimized OpenGL drivers on Windows (pre-driver version 22.7.1). This caused a bottleneck in Citra’s performance, even if the paired CPU’s Single Thread Rating meets or exceeds a score of 1,800. When using the same hardware on Linux though, Citra will run great due to the vastly better (Mesa) drivers.

In terms of driver performance per GPU brand:

On Windows: An NVIDIA GPU will give you the best performance, followed by AMD (driver version 22.7.1 and newer) and lastly Intel. Keep in mind that if you’re on AMD GPU hardware from before Arctic Islands/Polaris, you won’t be able to benefit from AMD’s reworked OpenGL implementation, which will result in horrible performance in Citra.

On Linux: NVIDIA, AMD and Intel all perform well in Citra. AMD here has a slight advantage over AMD’s proprietary drivers on Windows. Intel also has a small uplift in performance. Users should use the open-source Mesa drivers for both Intel and AMD. NVIDIA GPU users should stick to the proprietary drivers.

On MacOS: MacOS devices using an Intel GPU will perform decently. Those using an AMD GPU may experience similar issues as those seen on older drivers on Windows.

  1. The Citra settings you’re using.

There are a couple settings that can have a big impact on performance. By default, most settings are set to what is most performant and stable. If you’re experiencing performance issues after toggling a few settings, go to Emulation -> Configuration (Citra -> Preferences on MacOS) -> General and select Reset All Settings. This will return all the settings to their default values.

Another thing to keep in mind is that upscaling textures is relatively heavy on the GPU. Whilst most mid-range GPUs should be able to do this without any hit to the performance (within reason of course), low-end dedicated GPUs and integrated GPUs might struggle doing so.

Specifically for AMD GPU users on Windows: If you’re stuck on older drivers from before version 22.7.1, and are having issues with performance in a particular game, try disabling Hardware Shaders in Emulation -> Configuration -> Graphics -> Advanced Tab. This sometimes boosts performance in some games. This will not work for users on 22.7.1 or newer.

  1. The game you’re trying to emulate.

As mentioned earlier, not all games are created equal. Citra might run certain games better than others regardless of your hardware. Some games may also require specific workarounds to make them run at decent speeds. These types of workarounds are usually posted on our Game Compatibility List for that game.

I saw a YouTube video about [GAME]/feature, why doesn’t it work on the nightly build/Official Citra Android build?

Alternative custom branches may have not been merged into master. We only support nightly builds based on the master branch. Unofficial builds are not supported. There may be other branches that are planned to be merged, but must go through vetting first to ensure they are good contributions to the project long term. The same holds true for the official Citra Android builds.


System requirements.

Which platforms does Citra support?

We’re pleased to say that Citra works on all three major desktop operating systems and Android!

Citra is actively tested and supported on various 64-bit version of Windows (7 and up), Linux and Android (9.0 - Pie or newer). Other platforms may work, but aren’t tested by developers. We have no plans to support 32-bit operating systems officially.

MacOS support has been temporarily dropped whilst work on the graphics backend is underway. Part of that work required us to up the OpenGL 3.3 version requirement to OpenGL 4.3, which is something that MacOS doesn’t support. So until a Vulkan implementation is implemented, the last Citra MacOS build that works is Nightly 1782: Download citra-osx-20220901-d380980.tar.gz from https://github.com/citra-emu/citra-nightly/releases/tag/nightly-1782 Extract the .tar.gz file and run citra-qt.

After installing this version, make sure to not update your Citra version to a newer build, they won’t work. We will make an announcement about when it is safe to so again.

What kind of specification do I need to run Citra?

The only hard requirements for the official version of Citra is a graphics chip that supports at least OpenGL 4.3 and a 64-bit OS running on a standard PC, but you definitely want a processor with the highest possible performance per core.

What are Citra Android’s requirements?

  • A 64-bit operating system.
  • Support for OpenGL ES 3.2
  • At least Android 9.0 (Pie) or newer.

If you’re unsure whether your Android device meets the requirements, download Aida64 from the google play store. You can find the instruction set (64-bit or 32-bit) information in the CPU tab, the OpenGL ES version in the Display tab and the Android version in the Android tab.

We also recommend at least a Snapdragon 835 SoC or better. Your experience may vary greatly depending on the quality of your device’s GPU drivers.


Common issues and troubleshooting methods.

Where do I begin when attempting to troubleshoot an issue with [GAME] in Citra?

A log file is a very useful tool for recording relevant information for use in troubleshooting. It records your hardware, settings, Citra version, GPU driver versions and it gives extra information about what Citra was doing before the issue occurred. We will post some common issues below, where the information inside the log file can come in handy. This guide will tell you how to generate a usable log file: How to upload a the log file.

Citra’s log file barely has any information.

You may have an incorrect log filter configured. To reset it, go to Emulation in the menu bar, and then Configure. Then, in the Debug tab, in the Logging group, reset the Global Log Filter to *:Info.

My game is crashing, but my Citra log file is empty.

You may be clearing your log file on accident. This sequence of steps will result in your log file being overwritten:

  1. Open Citra.
  2. Play your game until it crashes or experiences the issue, closing Citra.
  3. Open Citra again.
  4. Open the log directory from Citra’s configuration window.

Since Citra was launched again in step 3, a new log was created. The correct sequence to follow is:

  1. Open Citra.
  2. Open the log directory from Citra’s configuration window.
  3. Play your game until it crashes or experiences the issue, closing Citra.

Now, without opening Citra again, you should have the correct log file. Note that in the first example, after the citra_log.txt file is overwritten, the citra_log.txt.old.txt file will retain that overwritten information. This is easy to check when looking at the file size. An “empty” log file will only have Citra’s settings recorded and nothing more. That would be around 5KB. A properly generated log file would at least be larger than that.

When I try to start [GAME], Citra crashes/freezes!

This can have many different causes. Therefore, it’s useful to have your log file at hand to see if one of the scenarios below matches what your log file recorded. Note that the log file outputs might not be identical to yours even if you have the same issue. We will point out what to look out for in your log file when we can.

A) log file output:

*Insert Citra's settings lines here*
Input  input_common/udp/client.cpp:StartCommunication:207: Starting communication with UDP input server on 127.0.0.1:26760
Frontend  citra_qt/main.cpp:GMainWindow:195: Citra Version: Nightly XXXX  | HEAD-XXXXXXX
Frontend  citra_qt/main.cpp:GMainWindow:198: Host CPU: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz
Frontend  citra_qt/main.cpp:GMainWindow:200: Host OS: Windows 10 (10.0)
Frontend  citra_qt/main.cpp:CheckForUpdates:829: Unable to start check for updates
Service.FS  core/file_sys/ncch_container.cpp:Load:242: Secure1 KeyX missing
Service.FS  core/file_sys/ncch_container.cpp:Load:342: NCCH is marked as encrypted but with decrypted exheader. Force no crypto scheme.
Frontend  citra_qt/main.cpp:BootGame:1019: Citra starting...
Audio.DSP  audio_core/hle/wmf_decoder.cpp:Impl:67: Media Foundation activated
Audio.DSP  audio_core/hle/wmf_decoder_utils.cpp:MFDecoderInit:50: Windows(R) Media Foundation found 1 suitable decoder(s)
Audio.Sink  audio_core/cubeb_sink.cpp:StateCallback:137: Cubeb Audio Stream Started
RPC_Server  core/rpc/rpc_server.cpp:RPCServer:12: Starting RPC server ...
RPC_Server  core/rpc/rpc_server.cpp:HandleRequestsLoop:113: Request handler started.
RPC_Server  core/rpc/rpc_server.cpp:RPCServer:16: RPC started.
Service.HTTP  core/hle/service/http_c.cpp:DecryptClCertA:827: ClCertA file missing

We can see that Citra attempted to boot the game: Frontend citra_qt/main.cpp:BootGame:1019: Citra starting... However, before it could do so, it crashed without recording the game’s titleID or your GPU’s drivers. This usually means that there’s an issue with Citra’s Disk Shader Cache. The Disk Shader Cache saves the shaders you encounter while you play your game(s) to your device’s storage. When you encounter the same shader again later, Citra can load that shader from the cache, instead of having to build it again. This reduces shader stutter, making gameplay smoother the longer you play. When the saved cache becomes faulty in some way, or the Disk Shader Cache isn’t functioning correctly for another reason, Citra will crash on a game’s launch with a similar log file output as shown above.

Since the currently built up shaders might be faulty, we should try deleting those first. Start up Citra, then go to File -> Open Citra Folder. Now open the shaders folder and delete the opengl folder found here. Now try your game again. If the same crash occurs afterwards, try updating your GPU driver to the latest available or reinstall it completely. If all else fails, disable the Disk Shader Cache in Emulation -> Configuration -> Graphics -> Advanced Tab.

B) Log file output:

Service.HTTP  core/hle/service/http_c.cpp:DecryptClCertA:827: ClCertA file missing
Render.OpenGL  video_core/renderer_opengl/renderer_opengl.cpp:Init:1194: GL_VERSION: 3.3.11411 Core Profile Forward-Compatible Context
Render.OpenGL  video_core/renderer_opengl/renderer_opengl.cpp:Init:1195: GL_VENDOR: ATI Technologies Inc.
Render.OpenGL  video_core/renderer_opengl/renderer_opengl.cpp:Init:1196: GL_RENDERER: AMD Radeon HD 7770
Render.OpenGL  video_core/renderer_opengl/gl_rasterizer.cpp:RasterizerOpenGL:61: Shadow might not be able to render because of unsupported OpenGL extensions.
Render.OpenGL  video_core/renderer_opengl/gl_shader_util.cpp:LoadProgram:101: Error linking shader:
Vertex shader(s) failed to link.
unexpected error.

Debug  video_core/renderer_opengl/gl_shader_util.cpp:operator():105: Assertion Failed!
Shader not linked

Shader linking errors are usually caused by old/faulty GPU drivers. If you’re already on the latest available GPU driver for your card, then try disabling Accurate Multiplication in Emulation -> Configuration -> Graphics -> Advanced Tab. Old GPU drivers tend to have issues with this setting.

C) Log file output:

Service.FS  core/file_sys/archive_selfncch.cpp:OpenRomFS:193: Unable to read RomFS
Service.FS  core/hle/service/fs/fs_user.cpp:OpenFileDirectly:129: failed to get a handle for file [Binary: 000000000000000000000000] mode=1 attributes=0
Service.ERR  core/hle/service/err_f.cpp:ThrowFatalError:169: Fatal error
Service.ERR  core/hle/service/err_f.cpp:ThrowFatalError:171: Fatal error type: Generic
Service.ERR  core/hle/service/err_f.cpp:LogGenericInfo:149: PID: 0x0000000B
Service.ERR  core/hle/service/err_f.cpp:LogGenericInfo:151: REV: 0x00000000_0x0000C8E1
Service.ERR  core/hle/service/err_f.cpp:LogGenericInfo:153: TID: 0x00000000_0x00000000
Service.ERR  core/hle/service/err_f.cpp:LogGenericInfo:155: AID: 0x00000000_0x00000000
Service.ERR  core/hle/service/err_f.cpp:LogGenericInfo:156: ADR: 0x00117EDC
Service.ERR  core/hle/service/err_f.cpp:LogGenericInfo:159: RSL: 0xC8804464
Service.ERR  core/hle/service/err_f.cpp:LogGenericInfo:160:   Level: 25
Service.ERR  core/hle/service/err_f.cpp:LogGenericInfo:161:   Summary: 4
Service.ERR  core/hle/service/err_f.cpp:LogGenericInfo:162:   Module: 17
Service.ERR  core/hle/service/err_f.cpp:LogGenericInfo:163:   Desc: 100

Service.FS core/file_sys/archive_selfncch.cpp:OpenRomFS:193: Unable to read RomFS This means that your ROM is corrupted. You’ll need to redump your game. Make sure that your Godmode9 is up-to-date and that you have enough free storage space on your SD-Card to perform the dump.

D) Log file output:

Service.FS  core/file_sys/ncch_container.cpp:OpenFile:130: Failed to open C:\Users\USER\AppData\Roaming/Citra/sdmc/Nintendo 3DS/00000000000000000000000000000000/00000000000000000000000000000000/title/0004000e/insert game ID here/content/00000000.app
Core  core/core.cpp:Load:293: Failed to load ROM (Error 1)!

This error usually occurs when you’ve incorrectly built a ROM. This can happen when using an outdated game dumping method instead of Godmode9 or when badly editing/patching a ROM file. Like when you’re patching a ROM with a ROM hack or randomization.

E) Log file output:

HW.Memory  core/memory.cpp:Read:322: unmapped Read32 @ 0x00000084 at PC 0x00332C54
HW.Memory  core/memory.cpp:Read:322: unmapped Read32 @ 0x00000088 at PC 0x00332C54
HW.Memory  core/memory.cpp:Read:322: unmapped Read32 @ 0x0000008C at PC 0x00332C54
HW.Memory  core/memory.cpp:Read:322: unmapped Read32 @ 0x00000090 at PC 0x00332C54
HW.Memory  core/memory.cpp:Read:322: unmapped Read32 @ 0x00000094 at PC 0x00332C54

This line may repeat itself over and over, making for a very big log file (sometimes also including some unmapped writes). What this usually means is one of 3 things:

  1. You have an incompatible cheat code active. The log file will tell you if there are any cheat codes active earlier in the log file: Core.Cheats core/cheats/gateway_cheat.cpp:SetEnabled:432: Cheats enabled. This might lead to weird behavior or crashes

_Disable all cheats and then restart Citra (important, otherwise they remain active). Now try your game again._

  1. Citra encountered something corrupted. This can be anything from the ROM, game updates, DLC, nand files, ect.

_It’s usually best to approach this by process of elimination; Keep individually testing every dumped file that your game uses until you find the one(s) that are causing the unmapped reads, starting with your ROM. It may be useful to set up a portable Citra version for this (instructions on doing so can be found earlier on the FAQ page)._

  1. There is a mismatch between your Citra region and the region of your game. In this case the log file usually outputs alternating unmapped reads to unmapped writes lines:
HW.Memory  core/memory.cpp:Read:322: unmapped Read32 @ 0xF94666CF at PC 0x00000000
HW.Memory  core/memory.cpp:Write:357: unmapped Write32 0x41F00000 @ 0xF94666CF at PC 0x00000000
HW.Memory  core/memory.cpp:Read:322: unmapped Read32 @ 0xF8D6B69F at PC 0x00000000
HW.Memory  core/memory.cpp:Write:357: unmapped Write32 0x009F072A @ 0xF8D6B69F at PC 0x00000000
HW.Memory  core/memory.cpp:Read:322: unmapped Read8 @ 0x00006B89 at PC 0x00000000
HW.Memory  core/memory.cpp:Write:357: unmapped Write8 0x0000008F @ 0x00006B89 at PC 0x00000000

Go to Emulation -> Configuration -> General and under the Emulation block, set Region: to Auto-select. Now try your game again.

Unmapped read/write related crashes and freezes can occur both right at the start, as well as during gameplay.

There is an error that occurs in Citra with Intel HD 40002500 integrated GPUs on Windows (and Intel HD Graphics of the same architecture (Ivy Bridge)).

These GPUs have driver bugs that will cause freezing and crashing, seemingly at random. Some users can run some versions of Citra Nightly with no issues whatsoever, but after updating to a newer, or downgrading to an older Citra version, these crashing/freezing issues start to occur. Other users can’t run any Citra Nightly version at all. The only way to fix this currently is to use Citra Nightly 1392 or older. If you’re unsure what iGPU you’re using (or what generation), right click on your Windows start button and select Device Manager. Expand the Display adapters tab. It should tell you what GPU you have. If it only says Intel HD Graphics, expand the Processors tab as well. Then google your processor name. On Intel’s product page, it should tell you what generation it is from next to the “Code Name”. If it says “Products formerly Ivy Bridge”, the above also applies to you.

There is a graphical error that occurs in Citra with Intel HD 44004600 integrated GPUs on Windows (and Intel HD Graphics of the same architecture (Haswell)).

These GPUs have driver bugs that will cause Citra to render things incorrectly, resulting in broken graphics. The only way to fix this is to disable Accurate Multiplication in Emulation -> Configuration -> Graphics -> Advanced Tab. If you’re unsure what iGPU you’re using (or what generation), right click on your Windows start button and select Device Manager. Expand the Display adapters tab. It should tell you what GPU you have. If it only says Intel HD Graphics, expand the Processors tab as well. Then google your processor name. On Intel’s product page, it should tell you what generation it is from next to the “Code Name”. If it says “Products formerly Haswell”, the above also applies to you.

[GAME] runs way too fast, how can I slow down the emulation?

Go to Emulation -> Configuration (Citra -> Preferences on MacOS) -> General, set your Emulation Speed slider to your desired speed and disable Use Alternate Speed if that is turned on.

How to solve weird audio glitches/hitches?

Go to Emulation -> Configuration (Citra -> Preferences on MacOS) -> Audio, and disable Audio Stretching.

Why does my game audio sound delayed?

This can sometimes be caused by V-Sync and/or Audio Stretching. You can find V-Sync in Emulation -> Configuration (Citra -> Preferences on MacOS) -> Graphics -> Advanced Tab, and you can find Audio Stretching in Emulation -> Configuration (Citra -> Preferences on MacOS) -> Audio

Does Citra have a speed-up/fast forward button?

Not exactly. You can set up something similar, but this will only work if your set-up can run Citra at those sped up emulation speeds to begin with.

Go to Emulation -> Configuration (Citra -> Preferences on MacOS) -> General. Set your Emulation Speed slider to what you want your regular speed to be. Then set your Use Alternate Speed slider to what you want your speed-up/fast forward speed to be. Navigate to the Controls -> Hotkey menu. Find the Toggle Alternate Speed option and double click it to change it to whatever key you want your speed-up/fast forward key to be. Press OK and enjoy.

My Citra has a gray screen, but I can hear game audio on the background (MacOS).

This is a MacOS specific bug. Resizing your Citra window should fix it.

Why are my custom textures being displayed on the wrong surfaces?

This is a bug that occurs when Custom Textures are used in conjunction with a Texture Filter. You can disable the Texture Filter in Emulation -> Configuration (Citra -> Preferences on MacOS) -> Graphics. Make sure to restart your game after disabling the option.

If you really want to use both Custom Textures and a Texture Filter at the same time, you’ll need to use Citra Nightly 1691 until the bug is fixed.

How to fix “Array Size too short” error?

This error occurs when attempting to load a Save State on a Citra version that is different from the one that it was created on. Save States aren’t compatible between different Citra versions or even between different Citra installations. It is therefore always recommended to use your in-game save files most of all for recording your progress, and to only use Save States within single gaming sessions.

If you really need to recover the progress of a particular Save State and you’ve run into this error, you’ll need to find the Citra version you created the Save State on and load it there. Then you can save in-game and continue on the newer Citra version. If you don’t know which Citra version you saved the state on, check the log file. It should detect whether a Save State was made on a different Citra version and tell you the commit hash of that version.

Citra complains about missing DLLs.

First, if you’ve downloaded any DLL files from the Internet and placed them in the Citra or a system folder, remove them first, they will not solve your problem and may cause system instability. Then download and install the x64 variant (vc_redist.x64.exe) of Visual C++ Redistributable for Visual Studio 2017 from Microsoft. If that doesn’t help, ensure you have also extracted the DLL files that come included with the Citra builds and that they are in the same directory as the executable.

A message box pops up saying the application was unable to start correctly 0xc000007b.

See above about missing DLLs. If that doesn’t help, see the first entry below this one about the requirement for those on Windows 10 N or KN to install the Windows Media Feature Pack.

Citra complains about “Entry Point Not Found/MF.dll not found”

Type winver into your Windows search bar and launch the prompt when it pops up. This should give you information about your Windows installation and update version. It should look something like this:

Microsoft Windows
Version XXXX (OS build XXXXX.XXXX)
Microsoft Corporation. All rights reserved.

The Windows 10 (Pro) (N or KN).....

If yours says that you’re on a Windows 10 N or KN version, it means that you’re using a Windows version that released without a bunch of media foundation tools. Citra requires some of those, which is why that error occurs. Thankfully, you can fix this by installing the Windows media feature pack. Microsoft changed how to do this a couple Windows 10 versions ago.

For those on Windows 10 Version 1909 (OS build 18363.XXXX) or newer:

The Media Feature Pack for N versions of Windows 10 is available for download as an Optional Feature. To install the Media Feature Pack, navigate to Settings > Apps > Apps and Features > Optional Features > Add a Feature and find the Media Feature Pack in the list of available Optional Features. Note, you will not be prompted to restart your computer, but you must restart in order to successfully complete installation of the Media Feature Pack.

For those on Windows 10 Version 1903 (OS build 18362.XXXX) or older:

Head to https://www.microsoft.com/en-us/software-download/mediafeaturepack and specify which version of Windows 10 you’re on. Then download and install the Media Feature Pack. Once installed, restart your PC if the installer doesn’t prompt you to do so. Now try running Citra again.

I’ve dumped my game but when I load it, Citra crashes/prints a bunch of gibberish to the console!

Games need to be decrypted on a 3DS before being usable in Citra (unless you dump your system keys). This is a technical limitation, and it is unlikely that it can be removed in the foreseeable future. To decrypt your games, you will need to have a 3DS system with boot9strap installed and follow one of the following guides:

What should I do if I get an error saying something like GetConfigInfoBlock: Config block 0xXXXXX with flags X and size X was not found?

Sometimes a game will freeze and you’ll get an error which looks like this in the log, usually followed by a “Fatal Error”:

Service.CFG  core\hle\service\cfg\cfg.cpp:Service::CFG::GetConfigInfoBlock:236: Config block 0xA0001 with flags 2 and size 2 was not found

If a log file with this error is read by the Citra bot, it might tell you “System configuration block 0xXXXXX appears to be corrupted.”

In this case: Start Citra, go to File -> Open Citra Folder and follow this file path: nand/data/00000000000000000000000000000000/sysdata/00010017/00000000/. Delete the config file found here. Now restart Citra and try your game again. Make sure you’re on the latest Citra version. If this does not work, then note the config block number (0xA0001 in the example) and file a bug report.

How can I fix the API ERROR 1282 OPENGL error? I can’t figure out what is causing this to happen!

This is the result of third-party application that uses overlays which might conflict with Citra. The console will print this error log:

Render.OpenGL  video_core\renderer_opengl\renderer_opengl.cpp:DebugHandler:469: API ERROR 1282: GL_INVALID_OPERATION error generated. Function glMatrixMode is deprecated and not available in preview contexts.
Render.OpenGL  video_core\renderer_opengl\renderer_opengl.cpp:DebugHandler:469: API ERROR 1282: GL_INVALID_OPERATION error generated. Function glPushMatrix is deprecated and not available in preview contexts.
Render.OpenGL  video_core\renderer_opengl\renderer_opengl.cpp:DebugHandler:469: API ERROR 1282: GL_INVALID_OPERATION error generated. Function glLoadIdentity is deprecated and not available in preview contexts.
Render.OpenGL  video_core\renderer_opengl\renderer_opengl.cpp:DebugHandler:469: API ERROR 1282: GL_INVALID_OPERATION error generated. Function glOrtho is deprecated and not available in preview contexts.

So far only MSI Afterburner is being reported to have conflicts with Citra, therefore it is advisable to close it before launching Citra.

Where is the folder for the emulated SD card?

The folder for the emulated SD card is named sdmc and can be found in Citra’s User Directory.

My issue isn’t mentioned above/I tried the fix for my issue but it didn’t work for me.

Make sure that you’re on the latest Citra Nightly version. If you’ve changed any of Citra’s settings, make sure to to go to Emulation -> Configuration -> General (Citra -> Preferences -> General on MacOS) and select Reset All Settings. If the issue still occurs, try asking for support in the Citra Discord server or on the Citra Forums.


Networking Support

What is this?

Citra’s networking support emulates the 3DS’ local Wi-Fi. On a real 3DS, this allows you to play games with people next to you. With Citra’s implementation of this feature, you can play with other people on Citra anywhere. This is not an implementation of connecting to Nintendo’s servers over Wi-Fi.

Why don’t I have this feature?

You are using an old version of Citra.

What’s the difference between public and unlisted rooms?

When you make a public room, Citra connects to the Citra Web Service, authenticates yourself using your token and username, and sends the room details. Then, the Citra Web Service will add your room to the public room listing, so when people go in the Public Game Lobby, they will see the room. Something important to note about a public room is that the Citra Web Service only hosts room listings, and not the room itself. The room will still be hosted on your computer.

When you make an unlisted room, Citra opens a room for any incoming connections, without connecting to the Citra Web Services. For other people to join the room, they will need to enter your IP manually, since they’re not going through the Public Game Browser listing.

How do I join a public room?

To join a public room, follow these steps: 1. Go to Multiplayer in the menu bar, and click Browse Public Game Lobby. 2. Set your nickname in the top left. 3. Double click on a room in the Public Room Browser dialog to join it. 4. Double click on a game in the Citra main window to start it.

How do I join a unlisted room?

To join a unlisted room, follow these steps: 1. Go to Multiplayer in the menu bar, and click Direct Connect to Room. 2. Enter the IP and port of the host you’re connecting to, your nickname, and password of the room if applicable. 3. Click connect to join the room.

How do I make a public room?

To make a public room, follow these steps: 1. If you and the people you are playing with are on different Wi-Fi networks, setup port forwarding in your router settings. 2. Go to Multiplayer in the menu bar, and click Create Room. 3. Enter the name of your room to be shown in the public listing and chat window, your preferred nickname, the game that will be played, an optional password if you need it, and the max number of players that can join the room. Unless you know you need it, you shouldn’t have to touch the port number. 4. Click Host Room to create the room.

How do I make an unlisted room?

To make an unlisted room, follow these steps: 1. If you and the people you are playing with are on different Wi-Fi networks, setup port forwarding in your router settings. 2. Go to Multiplayer in the menu bar, and click Create Room. 3. Enter the name of your room to be shown in the chat window, your preferred nickname, the game that will be played, an optional password if you need it, and the max number of players that can join the room. Unless you know you need it, you shouldn’t have to touch the port number. 4. At the bottom, set the room type combo box to Unlisted. 5. Click Host Room to create the room.

Why when I join a multiplayer room does it say that I’m “Not playing a game” even when I am?

This happens when you use Save States prior to connecting to a multiplayer room. Save States should be avoided entirely when using multiplayer.

Why does this error occur when attempting to join a multiplayer room?

Unable to connect to the host. Verify that the connection settings are correct. If you still cannot connect, contact the room hst and verify that the host is properly configured with the external port forwarded.

Citra does not host your rooms for you on our servers. This means that when you create a multiplayer room, your computer is used as the server. The room host’s router needs to be set up to allow for other users to join your room. You do that by forwarding the port that Citra uses. Port forwarding is accomplished differently depending on your router model, so we recommend consulting your router’s instruction manual to figure out how to make it work for you.

Are Download Play (DLP) features supported in Citra?

Yes, though you’ll need to dump some extra system files and enable a couple settings for it to work. You can find the instructions on how to set it up at the bottom of this page: Multiplayer.

Keep in mind that both you, and the person you’re attempting to use the Download Play feature with will need to follow the instructions for it to work.

Can I use Citra to play multiplayer together with someone on a 3DS?

No. Citra only supports local wireless features between other Citra instances through our multiplayer rooms.


Development and contributions

How can I develop or contribute to the project?

If you’re interested in contributing, fork the project here in GitHub, and then create a Pull Request when you’re ready to submit your contribution. Unless your change is trivial, however, it is strongly recommended that you join our development channel (#citra-dev @ Libera.Chat) to coordinate with the developers beforehand. Make sure to review our coding guidelines and ensure your changes follow them. If you’re looking for ideas on things to work on, try looking around our issue tracker. Some issues are tagged with the E-easy label, which means they’re smaller tasks that should be easier to get into.

I’d like to be a beta tester; how can I help?

If you try some games and run into issues like graphical glitches, freezes and especially regressions from previous versions, you can try reporting them in our issue tracker, accompanied by logs from the emulator if possible. Do not report an issue if a game simply fails to boot entirely.

Non-official builds are faster, have more features and run more games. Why don’t you work with the people who create those?

Most non-official builds are usually just a collection of different features currently being worked on by Citra contributors from the community. These features are not part of the official version (yet) because they are either broken-by-design and would possibly hinder development soon or because they are still work in progress. Also, each change will go through a review process. Features found in non-official versions are often in the review phase already and will be included in official versions about a month or two later.

If you are the author of a non-official build, make sure you still follow the license of Citra.

I think what you guys are doing is awesome! I am not a developer, but still want to support the project. What can I do?

That’s awesome! Such support is what motivates us to keep working! Stick around and keep motivating our work!

If you’re interested in donating, we would gladly accept used hardware, games for testing, or money for development/infrastructure costs. Please see our donations page for more information, or join our IRC channel (#citra @ Libera.Chat) or Discord server and contact a developer.