From 02b5afa0e90172451d765987d7540569813fb1c4 Mon Sep 17 00:00:00 2001 From: DefenderOfHyrule <11156197+DefenderOfHyrule@users.noreply.github.com> Date: Tue, 2 Jul 2024 18:58:26 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20nh-serve?= =?UTF-8?q?r/switch-guide@36837330b21d77fb516877e8d17aa77aad611acf=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- search/search_index.json | 2 +- sitemap.xml.gz | Bin 600 -> 600 bytes user_guide/all/partitioning_sd/index.html | 8 ++++---- .../all/partitioning_sd_syscfw/index.html | 8 ++++---- user_guide/all/sd_preparation/index.html | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/search/search_index.json b/search/search_index.json index 3df7a812..517302db 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":""},{"location":"#nh-switch-guide","title":"NH Switch Guide","text":"

The NH Switch Guide is a collaboration from Nintendo Homebrew's Discord community, getting you from a stock Switch to Atmosph\u00e8re.

For live support with this guide, visit us in #switch-assistance-1 or #switch-assistance-2 over at the NH-Discord server.

Prepare to set aside a minimum of an hour to follow this guide. This is specifically for you to carefully read and understand each page for safe execution for the safety and longevity of your Switch console. Some required device backups can also take around ten to thirty minutes to create, depending on your Switch model and your microSD card specifications.

"},{"location":"#what-is-custom-firmware","title":"What is Custom Firmware?","text":"

Custom FirmWare (\u201cCFW\u201d) is complex software that modifies the function of a device's operating system, also known as a system firmware. Atmosph\u00e8re, for example, patches the Switch OS (named Horizon) on the fly.

Custom firmware can be considered a holy grail in terms of device modding, as it allows nearly limitless control and freedoms than you would get with more primitive \"userland\" access. \u00a0

"},{"location":"#what-is-homebrew","title":"What is homebrew?","text":"

Homebrew refers to unofficial software written by hobbyists for locked down systems, like the Nintendo Switch. Homebrew can include original games, emulators, save-editing tools, and much, much more!

On the Switch in particular, you need CFW to run almost all available homebrew. Some first-gen (\"V1\") consoles can run homebrew for free, while all other (\"patched\") consoles require specialized hardware installation beforehand. \u00a0

"},{"location":"#what-are-custom-operating-systems","title":"What are custom operating systems?","text":"

Custom operating systems (OSes) are alternative system software installations, like Android or Linux, that install alongside the default Switch OS. These are usually perfect for powerusers who want to extend the functionality of their console beyond that of a gaming console, transforming Nintendo Switch to a full-fledged hybrid tablet or desktop. These custom OSes run completely independent of the Switch OS, meaning that anything you do in a custom OS cannot be reported back to Nintendo. Custom operating systems are not \"emulated\"; they run natively on the Switch's Tegra X1 SoC.

This guide will give you the opportunity to set aside space on your microSD to install these custom OSes onto, if you desire. It is important to note that these installations are optional; you do not need to install any custom OS in order to complete this guide and install Atmosph\u00e8re. However, it is better to decide sooner rather than later, as the installation process involves formatting your microSD card.

"},{"location":"#what-does-this-guide-install","title":"What does this guide install?","text":"

This guide has the end-goal of taking a completely unmodified Switch from stock firmware to a custom firmware named Atmosph\u00e8re.

fusee-gelee is currently the most widespread software entrypoint of launching custom firmware. It utilizes a vulnerability in the bootROM of the first-generation Switch systems, allowing us to boot the console via any payload we choose, instead of only ones that Nvidia and Nintendo authorize. The result allows full baremetal control over your console, including system storage backups, recovery, custom firmwares, and custom operating systems. \u00a0

"},{"location":"#what-can-i-do-with-custom-firmware","title":"What can I do with custom firmware?","text":"

More on this can be found later on in the guide.

"},{"location":"#what-do-i-need-to-know-before-starting","title":"What do I need to know before starting?","text":"

As previously mentioned, this guide will take a minimum of an hour to fully complete. Please responsibly set aside this time before your first run-through.

Acknowledge that EVERY time you modify your system, there is always the potential for an UNRECOVERABLE brick. A brick is a damaged device that no longer functions; something that becomes as \"useful as a brick\". On the Switch, they're rare, but still a possibility -- so make sure you read the directions carefully before performing them, and follow them EXACTLY.

This guide will work on first-generation (V1) and modchipped Switch consoles in all regions on any firmware version.

You will need one of the following in order to successfully follow this guide:

If you choose the emuMMC path introduced later in the guide, you will also need a microSD card that is at least 128 gigabytes. In this path, it'll be important to disable the Automatic Save Data Cloud function beforehand, as well as making sure the Switch is set as the primary console. If you must use a smaller microSD card, you can choose to use the sysCFW path, after assuming the risks involved.

Additionally, on a V1 \"unpatched\" Switch, you will need a way to access the ReCovery Mode (this will be further explained in the \"Entering RCM section\"). While possible with household tools, you may want to shell money out for a \"jig\" that inserts into the Joy-Con rail to reliably enable RCM.

Upon completion, you will lose no data, ending up with everything that you started with (games, Nintendo Account, saves, etc will be preserved). Your functionalities will only be enhanced.

Keep your device plugged in and charged throughout the entire process to avoid data loss or damage from an unexpected power-off.

Custom firmware is not permanently installed and does not change anything on your console simply by running it. It will be entirely unloaded upon rebooting the console. However, CFW does allow you to make permanent changes to your console at your own will, so be responsible and cautious with the abilities enabled by CFW.

It is advised that you read the entire guide from start to finish one or more times before actually running through the guide with your system.

If something doesn't make sense while you follow the guide, please reach out and ask for clarification rather than fumble around on your own. If your English isn't the best, use a translator such as Google Translate to submit your questions, so we can help.

"},{"location":"#click-the-button-below-to-get-started-with-the-guide","title":"Click the button below to get started with the guide!","text":"

Continue to Getting Started

Note: We are not currently, historically, or will we ever be, associated with Anton Retro, sthetix, Ely M., or other derivative or YouTube/TikTok guide publishers, especially any that claim relation to us.

Furthermore, we resent any implication to the contrary.

Frequently Asked Questions about this page "},{"location":"about/","title":"About","text":""},{"location":"about/#about-this-guide","title":"About this guide","text":"

This guide was written by community members of the Nintendo Homebrew Discord Server.

You can find this guide on GitHub, It is licensed under the ISC license.

"},{"location":"about/#guide-writers-maintainers","title":"Guide Writers / Maintainers","text":"

Thank you to everyone else that contributed to the guide on GitHub, but special thanks to noirscape.

"},{"location":"about/#developers","title":"Developers","text":""},{"location":"faq/","title":"FAQ","text":""},{"location":"faq/#what-firmware-versions-are-currently-hackable","title":"What firmware versions are currently hackable?","text":"

Currently two hardware revisions of the Switch exist. Any Switch bought or manufactured before the middle of 2018 has a bootrom bug that allows us to run code regardless of the firmware version on the Switch. When Nintendo updates the system, however, CFW will usually need an update to account for it. This bug cannot be fixed by Nintendo once the console leaves the factory, unless the console is sent in for repairs. This means that all current and future firmwares will be able to launch CFW through this exploit on the old hardware revision.

Any console purchased after approximately August 2018 is likely to be patched. This includes the latest units on shelves, referred to as 'red box' or 'Mariko'. Mariko is hardware patched, but may come on a vulnerable firmware. Currently the only way to know if your Switch is hackable is by trying to send the payload in RCM. Even with this exploit fixed, many Switch consoles on 8.0.1 and below will be hackable to some degree in the future (see Should I update my Firmware? for much more detailed information). The serial number on the back of the box can possibly tell you which consoles are patched and which aren't. See here for an up to date list.

"},{"location":"faq/#how-do-i-use-fusee-gelee-how-can-i-boot-into-rcm","title":"How do I use fusee-gelee? How can I boot into RCM?","text":"

To launch CFW through the fusee-gelee, the Switch needs to be in \"ReCovery Mode\"(RCM). The easiest way to enter RCM is by grounding pin 10 in the right joycon rail and holding VOL+ on boot. Several methods and designs to do this exist, see our guide for more information. Once the Switch is in RCM it needs to be connected to either a computer, phone or dongle to send the exploit and the payload.

This procedure needs to happen every time the Switch boots from a completely \"off\" state, otherwise the Switch will boot into the stock firmware.

"},{"location":"faq/#what-makes-a-good-jig-good-can-i-use-a-paperclip","title":"What makes a good jig good? Can I use a paperclip?","text":"

Most people prefer to use 3d-printed jigs to enter RCM. These jigs are made in a way that they slide into the right joycon rail and have a piece of connected wire that then bridges pin 10 and one of the grounded pins on the Switch. A lot of different designs for these jigs exist, but it is important to understand, that these jigs can damage the Switch if they are made in a bad way.

Since the wire in the jig is supposed to touch the pads inside the Switch's joycon rail, it is important to use wire that is thin, not rigid and bent/not pointy. Paperclips make for potentially dangerous jigs, as they are made out of a hard material, are rigid and pointy and can easily scratch off the pads inside the Switch. A good jig uses 32Gauge(0.2mm diameter) wire and is bent in a way that the end of the wire does not scratch the pads. You can download and 3d-print your own jig and use the pictures on this website to guide you on how to bend the wire correctly. Premade jigs can be found on online marketplaces for cheap.

"},{"location":"faq/#is-there-an-easier-way-to-enter-rcm","title":"Is there an easier way to enter RCM?","text":"

To enter RCM more comfortably a solution called \"AutoRCM\" exists. Once set up, this method will always boot the Switch into RCM, even without a jig or holding any buttons. This works by \"bricking\" the Switch in a controlled manner. The Switch detects that something is wrong and boots into RCM to get repaired. The big downside of this method is, that it is impossible to boot the Switch without a computer, phone or dongle, as it will never boot into stock firmware by itself, and that it requires an SD card with the proper CFW files on it at all times. In addition, if the battery of the Switch is completely drained, the Switch will need to charge to at least 10% in Hekate before launching Atmosphere, otherwise the Switch will refuse to boot due to the low battery. Charging in RCM is not recommended as this is very slow. AutoRCM can be reversed, but it is advised to keep a working NAND and BOOT0/1 backup before using it.

Many Android-phones are able to send the exploit to the Switch, making them a perfect portable way to launch CFW. Different designs for portable dongles exist, ranging from Raspberry Pi Zero and Arduino projects to internal dongles, that work completely autonomous. The latter should only be done by advanced users, as it requires soldering onto the Switch mainboard itself.

"},{"location":"faq/#should-i-update-my-firmware","title":"Should I update my Firmware?","text":"

If your Switch is one of the new hardware revisions that patched the exploit in RCM and you are on firmware 7.0.1 or lower, you should not update if you want to have CFW in the forseeable future.

If your Switch is one of the older hardware revisions and you don't mind having to use jigs/hardmods/AutoRCM and sending the exploit via computer, phone or dongle everytime you want to launch into CFW then it is completely safe to update. If you want the chance to maybe, one day, not have to use a external device, then it is recommended to stay on a FW as low as possible. Beware that this means that you potentially need to wait for a very long time (months to years) for this to happen, if ever. Private exploits to launch CFW over the Browser are known to exist for firmwares up to 7.0.1.

Downgrading on the Switch is possible, but it requires using AutoRCM and a custom bootloader payload to bypass the Switch's several hardware anti-downgrade mechanisms. This will not work on an unpatched system, and is practically useless for most users. On every boot the Switch firmware checks how many e-fuses have been burned and how many e-fuses the Switch expects to be burned. Major updates to the Switch, or updates in which a large vulnerability has been patched, irreversibly burn one of the Switch's 64 \"e-fuses\". If the Switch ever detects that more e-fuses have been burned than expected (meaning a downgrade happened), it will refuse to boot. Replacing e-fuses is not an option. You can find more information about fuses here Atmosph\u00e8reis maintained to support the latest firmware updates on unpatched units. The situation for patched and new units is as follows:

A method to update without burning e-fuses exists, but, like downgrading, it forces you to use AutoRCM and sending the exploit via USB every time, as booting into the stock firmware even once would instantly burn the e-fuse. Note that other anti-downgrade mechanisms exist, making it for example impossible to boot game carts on a firmware below 4.1/9.0.0 if the Switch has ever launched a game on firmware 4.1+/9.0.0+. This can only be worked around by completely disabling the game cart slot while on 4.1/9.0.0 or greater, which is similarly impractical for most users.

"},{"location":"faq/#is-it-safe-to-use-homebrew-will-i-get-banned","title":"Is it safe to use homebrew? Will I get banned?","text":"

The Switch comes with a lot of telemetry, and has been called a \"telemetry monster\" by several prominent developers. As long as the Switch is connected to the internet, Nintendo gets a report about a lot of different actions and states and has the option to log or act on them. Even if the Switch is offline and connects to the internet at a later point, Nintendo still recieves information about what happened while the Switch was disconnected.

To disable some of this telemetry, it is advised to disable the sending of error reports in the System Settings of the Switch. Additionally if you live in the EU you can set the \"do not share\" option on Nintendo's website to prevent your Switch from sending a lot of telemetry, although the effectiveness of this is questionable.

Nintendo still receives a lot of information, even with those options disabled. We also cannot know if Nintendo decides to look for something in the logs and ban people in retrospect. They have also shown to expand their telemetry options with every other firmware update.

Currently all bans have been for very obvious and intrusive actions, specifically:

Atmosph\u00e8re stops some, but not all of Nintendo's telemetry, and prevents crash reports from being sent. This means Nintendo can't tell if anything, including homebrew or modded games crashed, and Atmosph\u00e8re dumps the crash log to the microSD card to help homebrew developers. However, Nintendo still receives information about what is being played, and general system report information.

Atmosph\u00e8re is not a silver bullet, and this does not mean that Nintendo won't decide to ban people for harmless homebrew in the future. If you are scared to get banned then don't use homebrew for now. Atmosph\u00e8re now supports emuMMC (emuNAND): a copy of Switch system software, run entirely from the microSD card instead. This erases ban risks due to the fact that emuMMC is run in a quarantined, offline state, not touching the internal memory. You are still able to boot into original firmware to play online.

For patched units reliant on deja-vu, sysNAND will always have to be on a firmware below 4.1. For Switch versions from 5.0 to 7.0.1 deja-vu isn't quite out yet but will come eventually. (Also please note that firmwares 8.0.0+ will never work with deja-vu) You can use an updated emuMMC dedicated to online/clean play, while your sysNAND is used offline for custom firmware.

We do not recommend the use of ReiNX or SX OS for many reasons, primary among them that they use lots of assets from Atmosph\u00e8re and offer no real benefit that Atmosph\u00e8re does not offer anyway. We also do not recommend Kosmos, as its large amount of extras on top of regular Atmosph\u00e8re make it difficult to troubleshoot strange issues. All of these alternative CFWs also tend to use non-conventional setups which can cause issues that make it difficult to troubleshoot, which is another reason we prefer using Atmosphere. Additionally, it is advised to use 90DNS which blocks connections to any Nintendo servers. If you use an emuNAND for CFW and keep your sysNAND clean for playing online, you should use 90DNS on your emuNAND. Note: Keeping your emuNAND \"dirty\" and your sysNAND \"clean\" pertains primarily to those using the RCM exploit. Users employing Nereba or Caffeine will do the opposite.

"},{"location":"faq/#what-formats-can-homebrew-come-in","title":"What formats can homebrew come in","text":"

Homebrew can come in two different formats, namely in nro files and in bin files.

Homebrew risks Be careful with launching downloaded homebrew! If you don't know the source, it's best not to launch it. Homebrew can potentially damage your system! Atmosph\u00e8re provides protections against common bricking methods, but these are not guaranteed to always work!

"},{"location":"faq/#what-microsd-cardformat-should-i-use","title":"What microSD card/format should I use?","text":"

microSD cards that are 32GB or smaller can be used for homebrew, but are not recommended as these will not permit you to have a full NAND dump and/or an emuMMC on them.

The recommended microSD card size is 128GB. This will permit you to make a full NAND dump as well as having enough space to run an emuNAND in the future while also having adequate space for homebrew.

The recommended filesystem format is FAT32. While the Switch supports exFAT through an additional update from Nintendo, this filesystem is prone to corruption and as a result is not advisable.

"},{"location":"faq/#fake-microsd-cards","title":"Fake microSD cards","text":"

Do not buy microSD cards from sites like eBay. These microSD cards are often fake and do not have the advertised amount of storage and will result in data corruption if used. Amazon has had some problems with fake microSD cards, so we recommend buying them at a physical store. Even on trustworthy sites, always, always check reviews on a product before buying!!

If you suspect your microSD card is fake or damaged, see the instructions here to verify the integrity of your microSD card.

"},{"location":"faq/#my-homebrew-apps-are-not-showing-up-in-the-homebrew-menu","title":"My Homebrew apps are not showing up in the Homebrew menu!","text":"

This is an issue primarily affecting macOS users, but may occur on other devices as well. If you are able to launch the homebrew menu, but you are not seeing some or any of your Homebrew apps, you may need to unset the archive bit with Hekate.

  1. Inject the Hekate payload using your favorite payload injector.
  2. Click on Tools on the top menu bar.
  3. In the bottom left corner click on Arch Bit \u2022 AutoRCM \u2022 Touch \u2022 Pkg1/2.
  4. Click on Fix Archive bit - this might take a while.
  5. Press Close in the top right corner.
  6. Press Home in the top menu bar to get back from where you started.
  7. Follow the instructions at the Launching CFW page here to launch Atmosphere.
"},{"location":"fusee_gelee/","title":"Fusee gelee","text":""},{"location":"fusee_gelee/#vulnerability-disclosure-fusee-gelee","title":"Vulnerability Disclosure: Fus\u00e9e Gel\u00e9e","text":"

This report documents Fus\u00e9e Gel\u00e9e, a coldboot vulnerability that allows full, unauthenticated arbitrary code execution from an early bootROM context via Tegra Recovery Mode (RCM) on NVIDIA's Tegra line of embedded processors. As this vulnerability allows arbitrary code execution on the Boot and Power Management Processor (BPMP) before any lock-outs take effect, this vulnerability compromises the entire root-of-trust for each processor, and allows exfiltration of secrets e.g. burned into device fuses.

Quick vitals: \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Reporter: Katherine Temkin (@ktemkin) Affiliation: ReSwitched (https://reswitched.tech) E-mail: k@ktemkin.com Affects: Tegra SoCs, independent of software stack Versions: believed to affect Tegra SoCs released prior to the T186 / X2 Impact: early bootROM code execution with no software requirements, which can lead to full compromise of on-device secrets where USB access is possible Disclosure public disclosure planned for June 15th, 2018"},{"location":"fusee_gelee/#vulnerability-summary","title":"Vulnerability Summary","text":"

The USB software stack provided inside the boot instruction rom (IROM/bootROM) contains a copy operation whose length can be controlled by an attacker. By carefully constructing a USB control request, an attacker can leverage this vulnerability to copy the contents of an attacker-controlled buffer over the active execution stack, gaining control of the Boot and Power Management processor (BPMP) before any lock-outs or privilege reductions occur. This execution can then be used to exfiltrate secrets and to load arbitrary code onto the main CPU Complex (CCPLEX) \"application processors\" at the highest possible level of privilege (typically as the TrustZone Secure Monitor at PL3/EL3).

"},{"location":"fusee_gelee/#public-disclosure-notice","title":"Public Disclosure Notice","text":"

This vulnerability is notable due to the significant number and variety of devices affected, the severity of the issue, and the immutability of the relevant code on devices already delivered to end users. This vulnerability report is provided as a courtesy to help aid remediation efforts, guide communication, and minimize impact to users.

As other groups appear to have this or an equivalent exploit-- including a group who claims they will be selling access to an implementation of such an exploit-- it is the author and the ReSwitched team's belief that prompt public disclosure best serves the public interest. By minimizing the information asymmetry between the general public and exploit-holders and notifying the public, users will be able to best assess how this vulnerability impacts their personal threat models.

Accordingly, ReSwitched anticipates public disclosure of this vulnerability: * If another group releases an implementation of the identified vulnerability; or * On June 15th, 2018, whichever comes first.

"},{"location":"fusee_gelee/#vulnerability-details","title":"Vulnerability Details","text":"

The core of the Tegra boot process is approximated by the following block of pseudo-code, as obtained by reverse-engineering an IROM extracted from a vulnerable T210 system:

// If this is a warmboot (from \"sleep\"), restore the saved state from RAM.\nif (read_scratch0_bit(1)) {\n  restore_warmboot_image(&load_addr);\n}\n// Otherwise, bootstrap the processor.\nelse\n{\n  // Allow recovery mode to be forced by a PMC scratch bit or physical straps.\n  force_recovery = check_for_rcm_straps() || read_scratch0_bit(2);\n\n  // Determine whether to use USB2 or USB3 for RCM.\n  determine_rcm_usb_version(&usb_version);\n  usb_ops = set_up_usb_ops(usb_version);\n  usb_ops->initialize();\n\n  // If we're not forcing recovery, attempt to load an image from boot media.\n  if (!force_recovery)\n  {\n    // If we succeeded, don't fall back into recovery mode.\n    if (read_boot_configuration_and_images(&load_addr) == SUCCESS) {\n      goto boot_complete;\n    }\n  }\n\n  // In all other conditions\n  if (read_boot_images_via_usb_rcm(<snip>, &load_addr) != SUCCESS) {\n     /* load address is poisoned here */\n  }\n}\n\nboot_complete:\n  /* apply lock-outs, and boot the program at address load_address  */\n

Tegra processors include a USB Recovery Mode (RCM), which we can observe to be activated under a number of conditions: * If the processor fails to find a valid Boot Control Table (BCT) + bootloader on its boot media; * If processor straps are pulled to a particular value e.g. by holding a button combination; or * If the processor is rebooted after a particular value is written into a power management controller scratch register.

USB recovery mode is present in all devices, including devices that have been production secured. To ensure that USB recovery mode does not allow unauthenticated communications, RCM requires all recovery commands be signed using either RSA or via AES-CMAC.

The bootloader's implementation of the Tegra RCM protocol is simple, and exists to allow loading a small piece of code (called the miniloader or applet) into the bootloader's local Instruction RAM (IRAM). In a typical application, this applet is nvtboot-recovery, a stub which allows further USB communications to bootstrap a system or to allow system provisioning.

The RCM process is approximated by the following pseudo-code, again obtained via reverse engineering a dumped IROM from a T210:

// Significantly simplified for clarity, with error checking omitted where unimportant.\nwhile (1) {\n  // Repeatedly handle USB standard events on the control endpoint EP0.\n  usb_ops->handle_control_requests(current_dma_buffer);\n\n  // Try to send the device ID over the main USB data pipe until we succeed.\n  if ( rcm_send_device_id() == USB_NOT_CONFIGURED ) {\n    usb_initialized = 0;\n  }\n  // Once we've made a USB connection, accept RCM commands on EP1.\n  else {\n    usb_initialized = 1;\n\n    // Read a full RCM command and any associated payload into a global buffer.\n    // (Error checking omitted for brevity.)\n    rcm_read_command_and_payload();\n\n    // Validate the received RCM command; e.g. by checking for signatures\n    // in RSA or AES_CMAC mode, or by trivially succeeding if we're not in\n    // a secure mode.\n    rc = rcm_validate_command();\n    if (rc != VALIDATION_PASS) {\n      return rc;\n    }\n\n    // Handle the received and validated command.\n    // For a \"load miniloader\" command, this sanity checks the (validated)\n    // miniloader image and takes steps to prevent re-use of signed data not\n    // intended to be used as an RCM command.\n    rcm_handle_command_complete(...);\n  }\n}\n

It is important to note that a full RCM command and its associated payload are read into 1) a global buffer, and 2) the target load address, respectively, before any signature checking is done. This effectively grants the attacker a narrow window in which they control a large region of unvalidated memory.

The largest vulnerability surface area occurs in the rcm_read_command_and_payload function, which accepts the RCM command and payload packets via a USB bulk endpoint. For our purposes, this endpoint is essentially a simple pipe for conveyance of blocks of binary data separate from standard USB communications.

The rcm_read_command_and_payload function actually contains several issues-- of which exactly one is known to be exploitable:

uint32_t total_rxd  = 0;\nuint32_t total_to_rx = 0x400;\n\n// Loop until we've received our full command and payload.\nwhile (total_rxd < total_to_rx) {\n  // Switch between two DMA buffers, so the USB is never DMA'ing into the same\n  // buffer that we're processing.\n  active_buffer = next_buffer;\n  next_buffer   = switch_dma_buffers();\n\n  // Start a USB DMA transaction on the RCM bulk endpoint, which will hopefully\n  // receive data from the host in the background as we copy.\n  usb_ops->start_nonblocking_bulk_read(active_buffer, 0x1000);\n\n  // If we're in the first 680-bytes we're receiving, this is part of the RCM\n  // command, and we should read it into the command buffer.\n  if ( total_rxd < 680 ) {\n    /* copy data from the DMA buffer into the RCM command buffer until we've\n       read a full 680-byte RCM command */\n\n    // Once we've received the first four bytes of the RCM command,\n    // use that to figure out how much data should be received.\n    if ( total_rxd >= 4 )\n    {\n      // validate:\n      //  -- the command won't exceed our total RAM\n      //     (680 here, 0x30000 in upper IRAM)\n      //  -- the command is >= 0x400 bytes\n      //  -- the size ends in 8\n      if ( rcm_command_buffer[0] >= 0x302A8u\n              || rcm_command_buffer[0] < 0x400u\n              || (rcm_command_buffer[0] & 0xF) != 8 ) {\n        return ERROR_INVALID_SIZE;\n      } else  {\n        left_to_rx = *((uint32_t *)rcm_command_buffer);\n      }\n    }\n  }\n\n  /* copy any data _past_ the command into a separate payload\n     buffer at 0x40010000 */\n  /* -code omitted for brevity - */\n\n  // Wait for the DMA transaction to complete.\n  // [This is, again, simplified to convey concepts.]\n  while(!usb_ops->bulk_read_complete()) {\n\n    // While we're blocking, it's still important that we respond to standard\n    // USB packets on the control endpoint, so do that here.\n    usb_ops->handle_control_requests(next_buffer);\n  }\n}\n

Astute readers will notice an issue unrelated to the Fus\u00e9e Gel\u00e9e exploit: this code fails to properly ensure DMA buffers are being used exclusively for a single operation. This results in an interesting race condition in which a DMA buffer can be simultaneously used to handle a control request and a RCM bulk transfer. This can break the flow of RCM, but as both operations contain untrusted data, this issue poses no security risk.

To find the actual vulnerability, we must delve deeper, into the code that handles standard USB control requests. The core of this code is responsible for responding to USB control requests. A control request is initiated when the host sends a setup packet, of the following form:

Field \u00a0 \u00a0 \u00a0 \u00a0 Size \u00a0 \u00a0 Description direction 1b if '1', the device should respond with data type 2b specifies whether this request is of a standard type or not recipient 5b encodes the context in which this request should be considered; for example, is this about a DEVICE or about an ENDPOINT? request 8b specifies the request number value 16b argument to the request index 16b argument to the request length 16b specifies the maximum amount of data to be transferred

As an example, the host can request the status of a device by issuing a GET_STATUS request, at which point the device would be expected to respond with a short setup packet. Of particular note is the length field of the request, which should limit -- but not exclusively determine-- the maximum amount of data that should be included in the response. Per the specification, the device should respond with either the amount of data specified or the amount of data available, whichever is less.

The bootloader's implementation of this behavior is conceptually implemented as follows:

// Temporary, automatic variables, located on the stack.\nuint16_t status;\nvoid *data_to_tx;\n\n// The amount of data available to transmit.\nuint16_t size_to_tx   = 0;\n\n // The amount of data the USB host requested.\nuint16_t length_read  = setup_packet.length;\n\n/* Lots of handler cases have omitted for brevity. */\n\n// Handle GET_STATUS requests.\nif (setup_packet.request == REQUEST_GET_STATUS)\n{\n  // If this is asking for the DEVICE's status, respond accordingly.\n  if(setup_packet.recipient == RECIPIENT_DEVICE) {\n      status     = get_usb_device_status();\n      size_to_tx = sizeof(status);\n  }\n  // Otherwise, respond with the ENDPOINT status.\n  else if (setup_packet.recipient == RECIPIENT_ENDPOINT){\n      status     = get_usb_endpoint_status(setup_packet.index);\n      size_to_tx = length_read; // <-- This is a critical error!\n  }\n  else {\n    /* ... */\n  }\n\n  // Send the status value, which we'll copy from the stack variable 'status'.\n  data_to_tx = &status;\n}\n\n// Copy the data we have into our DMA buffer for transmission.\n// For a GET_STATUS request, this copies data from the stack into our DMA buffer.\nmemcpy(dma_buffer, data_to_tx, size_to_tx);\n\n// If the host requested less data than we have, only send the amount requested.\n// This effectively selects min(size_to_tx, length_read).\nif (length_read < size_to_tx) {\n  size_to_tx = length_read;\n}\n\n// Transmit the response we've constructed back to the host.\nrespond_to_control_request(dma_buffer, length_to_send);\n

In most cases, the handler correctly limits the length of the transmitted responses to the amount it has available, per the USB specification. However, in a few notable cases, the length is incorrectly always set to the amount requested by the host: * When issuing a GET_CONFIGURATION request with a DEVICE recipient. * When issuing a GET_INTERFACE request with a INTERFACE recipient. * When issuing a GET_STATUS request with a ENDPOINT recipient.

This is a critical security error, as the host can request up to 65,535 bytes per control request. In cases where this is loaded directly into size_to_tx, this value directly sets the extent of the memcpy that follows-- and thus can copy up to 65,535 bytes into the currently selected dma_buffer. As the DMA buffers used for the USB stack are each comparatively short, this can result in a very significant buffer overflow.

To validate that the vulnerability is present on a given device, one can try issuing an oversized request and watch as the device responds. Pictured below is the response generated when sending a oversized GET_STATUS control request with an ENDPOINT recipient to a T124:

A compliant device should generate a two-byte response to a GET_STATUS request-- but the affected Tegra responds with significantly longer response. This is a clear indication that we've run into the vulnerability described above.

To really understand the impact of this vulnerability, it helps to understand the memory layout used by the bootROM. For our proof-of-concept, we'll consider the layout used by the T210 variant of the affected bootROM:

The major memory regions relevant to this vulnerability are as follows: * The bootROM's execution stack grows downward from 0x40010000; so the execution stack is located in the memory immediately preceding that address. * The DMA buffers used for USB are located at 0x40005000 and 0x40009000, respectively. Because the USB stack alternates between these two buffers once per USB transfer, the host effectively can control which DMA buffer is in use by sending USB transfers. * Once the bootloader's RCM code receives a 680-byte command, it begins to store received data in a section of upper IRAM located at address 0x40010000, and can store up to 0x30000 bytes of payload. This address is notable, as it is immediately past the end of the active execution stack.

Of particular note is the adjacency of the bootROM's execution stack and the attacker-controlled RCM payload. Consider the behavior of the previous pseudo-code segment on receipt of a GET_STATUS request to the ENDPOINT with an excessive length. The resulting memcpy: * copies up to 65,535 bytes total; * sources data from a region starting at the status variable on the stack and extending significantly past the stack -- effectively copying mostly from the attacker-controllable RCM payload buffer * targets a buffer starting either 0x40005000 or 0x40009000, at the attacker's discretion, reaching addresses of up to 0x40014fff or 0x40018fff

This is a powerful copy primitive, as it copies from attacker controlled memory and into a region that includes the entire execution stack:

This would be a powerful exploit on any platform; but this is a particularly devastating attack in the bootROM environment, which does not: * Use common attack mitigations such as stack canaries, ostensibly to reduce complexity and save limited IRAM and IROM space. * Apply memory protections, so the entire stack and all attacker controlled buffers can be read from, written to, and executed from. * Employ typical 'application-processor' mitigation strategies such as ASLR.

Accordingly, we now have: 1. The capability to load arbitrary payloads into memory via RCM, as RCM only validates command signatures once payload receipt is complete. 2. The ability to copy attacker-controlled values over the execution stack, overwriting return addresses and redirecting execution to a location of our choice.

Together, these two abilities give us a full arbitrary-code execution exploit at a critical point in the Tegra's start-up process. As control flow is hijacked before return from read_boot_images_via_usb_rcm, none of the \"lock-out\" operations that precede normal startup are executed. This means, for example, that the T210 fuses-- and the keydata stored within them-- are accessible from the attack payload, and the bootROM is not yet protected.

"},{"location":"fusee_gelee/#exploit-execution","title":"Exploit Execution","text":"

The Fus\u00e9e Launcher PoC exploits the vulnerability described on the T210 via a careful sequence of interactions: 1. The device is started in RCM mode. Device specifics will differ, but this is often via a key-combination held on startup. 2. A host computer is allowed to enumerate the RCM device normally. 3. The host reads the RCM device's ID by reading 16 bytes from the EP1 IN. 4. The host builds an exploit payload, which is comprised of: 1. An RCM command that includes a maximum length, ensuring that we can send as much payload as possible without completing receipt of the RCM payload. Only the length of this command is used prior to validation; so we can submit an RCM command that starts with a maximum length of 0x30298, but which fills the remaining 676 bytes of the RCM command with any value. 2. A set of values with which to overwrite the stack. As stack return address locations vary across the series, it's recommended that a large block composed of a single entry-point address be repeated a significant number of times, so one can effectively replace the entire stack with that address. 3. The program to be executed (\"final payload\") is appended, ensuring that its position in the binary matches the entry-point from the previous step. 4. The payload is padded to be evenly divisible by the 0x1000 block size to ensure the active block is not overwritten by the \"DMA dual-use\" bug described above. 5. The exploit payload is sent to the device over EP1 OUT, tracking the number of 0x1000-byte \"blocks\" that have been sent to the device. If this number is even, the next write will be issued to the lower DMA buffer (0x40005000); otherwise, it will be issued to the upper DMA buffer (0x40009000). 6. If the next write would target the lower DMA buffer, issue another write of a full 0x1000 bytes to move the target to the upper DMA buffer, reducing the total amount of data to be copied. 7. Trigger the vulnerable memcpy by sending a GET_STATUS IN control request with an ENDPOINT recipient, and a length long enough to smash the desired stack region, and preferably not longer than required.

A simple host program that triggers this vulnerability is included with this report: see fusee-launcher.py. Note the restrictions on its function in the following section.

"},{"location":"fusee_gelee/#proof-of-concept","title":"Proof of Concept","text":"

Included with this report is a set of three files: * fusee-launcher.py -- The main proof-of-concept accompanying this report. This python script is designed to launch a simple binary payload in the described bootROM context via the exploit. * intermezzo.bin -- This small stub is designed to relocate a payload from a higher load address to the standard RCM load address of 0x40010000. This allows standard RCM payloads (such as nvtboot-recover.bin) to be executed. * fusee.bin -- An example payload for the Nintendo Switch, a representative and well-secured device based on a T210. This payload will print information from the device's fuses and protected IROM to the display, demonstrating that early bootROM execution has been achieved.

Support note: Many host-OS driver stacks are reluctant to issue unreasonably large control requests. Accordingly, the current proof-of-concept includes code designed to work in the following environments: * 64-bit linux via xhci_hcd. The proof-of-concept can manually submit large control requests, but does not work with the common ehci_hcd drivers due to driver limitations. A rough rule of thumb is that a connection via a blue / USB3 SuperSpeed port will almost always be handled by xhci_hcd. * macOS. The exploit works out of the box with no surprises or restrictions on modern macOS.

Windows support would require addition of a custom kernel module, and thus was beyond the scope of a simple proof-of-concept.

To use this proof-of-concept on a Nintendo Switch: 1. Set up an Linux or macOS environment that meets the criteria above, and which has a working python3 and pyusb as well as libusb installed. 2. Connect the Switch to your host PC with a USB A -> USB C cable. 3. Boot the Switch in RCM mode. There are three ways to do this, but the first-- unseating its eMMC board-- is likely the most straightforward: 1. Ensure the Switch cannot boot off its eMMC. The most straightforward way to to this is to open the back cover and remove the socketed eMMC board; corrupting the BCT or bootloader on the eMMC boot partition would also work. 2. Trigger the RCM straps. Hold VOL_UP and short pin 10 on the right JoyCon connector to ground while engaging the power button. 3. Set bit 2 of PMC scratch register zero. On modern firmwares, this requires EL3 or pre-sleep BPMP execution. 4. Run the fusee-launcher.py with an argument of fusee.bin. (This requires intermezzo.bin to be located in the same folder as fusee-launcher.py.)

```\nsudo python3 ./fusee-launcher.py fusee.bin\n```\n

If everything functions correctly, your Switch should be displaying a collection of fuse and protected-IROM information:

"},{"location":"fusee_gelee/#recommended-mitigations","title":"Recommended Mitigations","text":"

In this case, the recommended mitigation is to correct the USB control request handler such that it always correctly constrains the length to be transmitted. This has to be handled according to the type of device:

It seems likely that OEMs producing T210-based devices may move to T214 solutions; it is the hope of the author that the T214's bootROM shares immunity with the T186. If not, patching the above is a recommended modification to the mask ROM and/or ipatches of the T214, as well.

"},{"location":"extras/","title":"Extras","text":"

Several extra guides that are not required for basic usage can be found here.

They are listed in the sidebar as well.

"},{"location":"extras/#commonly-used-guides","title":"Commonly used guides:","text":""},{"location":"extras/adding_udev/","title":"Linux - Run payload injector without root","text":"

This section details how to add an udev rule to let you send a payload to your Switch without needing to use sudo.

The following instructions only work if you have a system that implements udev. Most modern distros come with systemd already installed, which includes a udev implementation.

Do the following instructions while your Switch is not connected to your computer.

For Arch Linux users:

The package android-udev includes rules that will also allow for payload injection to work without root. Do note this also allows Android specific commands such as adb and fastboot to also work without root (as is the intention of it.)

"},{"location":"extras/adding_udev/#option-1-manually-adding-rules-and-group","title":"Option 1: Manually adding rules and group","text":"

The following instructions are not for beginners. Only do this if you understand what you are doing.

"},{"location":"extras/adding_udev/#creating-a-new-group","title":"Creating a new group","text":"

To start, we will create a new group and add ourselves to it. The group the Nintendo Switch device will be owned by on Linux will be set to this group.

  1. Open a terminal.
  2. Enter the following command: sudo groupadd nintendo_switch.
  3. Enter your password when prompted.
  4. Enter the following command: sudo usermod -a -G nintendo_switch $USER. Make sure that the G is capitalized!
  5. Close the terminal.
"},{"location":"extras/adding_udev/#adding-a-udev-rule","title":"Adding a udev rule","text":"

Next we're gonna add a new udev rule. udev is a device manager for the linux kernel. The rule we're gonna specify is that if the Switch is connected in RCM, the group the Switch belongs to will be the group we made in the previous section.

  1. Open a terminal.
  2. Change to the root user with the following command: sudo -i. Enter your password when prompted.
  3. Enter the following command: mkdir -p /etc/udev/rules.d.
  4. Enter the following command: echo 'SUBSYSTEMS==\"usb\", ATTRS{manufacturer}==\"NVIDIA Corp.\", ATTRS{product}==\"APX\", GROUP=\"nintendo_switch\"' > /etc/udev/rules.d/10-switch.rules.
  5. Enter the following command: udevadm control --reload.
  6. Enter the following command: udevadm trigger.
  7. Logout and log back in.

You should now be able to run the payload sender without having to use sudo.

"},{"location":"extras/adding_udev/#option-2-installing-a-package-with-the-rules","title":"Option 2: Installing a package with the rules","text":"

These rules will actually allow ANY user to access your Switch via USB, not only your user.

You may just follow the instructions at nx-udev, or if you're on Ubuntu / Debian:

  1. Download nx-udev_latest_all.deb.
  2. Open a terminal in the same directory as your download.
  3. Run sudo dpkg -i nx-udev_latest_all.deb to install the package

You should now be able to run the payload injector and homebrew with USB communication without having to use sudo.

"},{"location":"extras/alternate_bootsetups/","title":"Alternate boot setups","text":"

If you need to troubleshoot something, or need to try a different boot setup, read on.

Do I need any of these?

Unless you are experiencing problems with booting or Atmosph\u00e8re itself, it's strongly recommended to use the main guide instead of these. They are provided for the sake of completeness.

"},{"location":"extras/alternate_bootsetups/#chainloading-fusee-from-hekate","title":"Chainloading Fusee from Hekate","text":""},{"location":"extras/alternate_bootsetups/#instructions","title":"Instructions:","text":"
  1. Insert your Switch's microSD card into your PC.
  2. Copy the contents of the Atmosphere .zip file to the root of your microSD card.
  3. Copy the bootloader folder from the Hekate .zip file to the root of your microSD card.
  4. Copy fusee.bin to the sd:/bootloader/payloads folder on your microSD card.
  5. The setup is complete, you can inject the Hekate payload (Unpatched Switch users) or place the Hekate payload on the root of your microSD card and rename it to payload.bin (Modchipped Switch users).
  6. Navigate to and select Payloads > fusee.bin.
"},{"location":"extras/alternate_bootsetups/#using-fusee-without-hekate","title":"Using Fusee without Hekate","text":"

This method will not work for Modchipped Switch users.

"},{"location":"extras/alternate_bootsetups/#instructions_1","title":"Instructions:","text":"
  1. Insert your Switch's microSD card into your PC.
  2. Copy the contents of the Atmosphere .zip file to the root of your microSD card.
  3. The setup is complete, you can inject the fusee.bin payload.
"},{"location":"extras/autorcm/","title":"AutoRCM","text":""},{"location":"extras/autorcm/#autorcm","title":"AutoRCM","text":"

AutoRCM causes the console to believe it is bricked, and will automatically launch RCM upon boot for recovery purposes, without needing a jig. As RCM is a recovery mode from repair specialists, this is an intended feature from the device developer, though is also considered a softbrick. If you aren't careful, misuse of AutoRCM can lead to real damage, especially with units that cannot inject custom RCM payloads (like Mariko hardware). Please take care when using it. Please keep in mind that the console can no longer boot on its own, so you'll need a PC, phone, or other payload injector to start the console after a coldboot.

If you don't have a BOOT0/1 backup yet...

You really want to kill your console, huh? If you haven't made a BOOT0/1 backup yet, it is recommended to make one right now.

  1. Boot into Hekate
  2. Go to Tools, and select Backup eMMC
  3. Then tap eMMC BOOT0 & BOOT1 and let the process complete.
"},{"location":"extras/autorcm/#disadvantages-of-autorcm","title":"Disadvantages of AutoRCM","text":"

There are some disadvantages you should consider before installing AutoRCM:

"},{"location":"extras/autorcm/#advantages-of-autorcm","title":"Advantages of AutoRCM","text":"

AutoRCM can be used for good as well:

Other information...

"},{"location":"extras/autorcm/#enabling-autorcm","title":"Enabling AutoRCM","text":"

If, despite all of the information above, you still wish to enable AutoRCM, and understand the risks, do the following:

  1. Boot into Hekate
  2. Go to Tools
  3. At the bottom of the page, tap Arch Bit \u2022 AutoRCM \u2022 Touch \u2022 Pkg1/2
  4. Then tap AutoRCM. It will show a little ON next to the option once you have done this.
"},{"location":"extras/blocking_nintendo/","title":"Blocking Nintendo servers","text":"

This page will help you set up a method to block all communication with Nintendo. This will stop any updates and reporting to Nintendo, but it will prevent use of the eShop and online games.

"},{"location":"extras/blocking_nintendo/#instructions-ams-dns-redirection","title":"Instructions (AMS DNS redirection)","text":"

You can configure Atmosph\u00e8re to automatically redirect any requests directed to Nintendo to nothing instead. Documentation about this feature can be found here. The section below will help you set up DNS redirection on your emummc. Note that this will only apply when you are using cfw.

"},{"location":"extras/blocking_nintendo/#what-you-need","title":"What you need:","text":""},{"location":"extras/blocking_nintendo/#setup","title":"Setup:","text":"
  1. Enter RCM and inject the Hekate payload.
  2. Navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  3. Enter the atmosphere folder.
  4. If it doesn't exist already, create a folder named hosts in the atmosphere folder.
  5. Copy the emummc.txt file into the hosts folder.
  6. Eject the UMS device safely from within your computer's operating system and boot into CFW.

Verify functionality

You can verify the functionality of the DNS redirection by booting into emummc (or sysmmc if you applied the config to sys), and powering off after.

A report will be generated in sd:/atmosphere/logs called dns_mitm_startup.log. If this starts with the following, the dns redirection is active

"},{"location":"extras/blocking_nintendo/#instructions-90dns","title":"Instructions (90DNS)","text":"

You can add a custom DNS to your WiFi connection that will block all communication with Nintendo's servers. We will be using 90DNS, a community-run custom DNS server. If you prefer, you can run your own DNS server following the instructions on the GitLab repository.

Enter the console's System Settings, and then proceed to the Internet tab. From here:

"},{"location":"extras/blocking_nintendo/#setting-up-a-new-connection-via-wi-fi","title":"Setting up a new connection via Wi-Fi","text":"

Open WiFi networks without a password

Not all WiFi networks require a password to connect. If your network does not use one, you can use the Manual Setup option, located at the very bottom of the Internet Settings screen below all other WiFi networks.

  1. Select your WiFi network from the list of networks.
  2. Enter an incorrect password that is 8 characters long and press OK.
  3. After a few moments of attempting to connect, the console will display a connection error.
  4. Press OK to close the error message.
  5. Press Close when it offers to display more details about the error.
  6. When asked if you want to re-enter the password, pick View Settings.
  7. Change DNS Settings to Manual.
  8. Pick the server that is the closest to your location out of the below chart and enter its Primary and Secondary DNS into your connection settings.
  9. Enter the correct password for your WiFi connection.
  10. Save the settings and test the connection.

"},{"location":"extras/blocking_nintendo/#editing-an-existing-wifi-connection","title":"Editing an existing WiFi connection","text":"
  1. Select your existing WiFi network from the list of networks.
  2. Select Change Settings.
  3. Pick the server that is the closest to your location out of the below chart and enter its Primary and Secondary DNS into your connection settings.
  4. Save the settings and test the connection.

"},{"location":"extras/blocking_nintendo/#using-homebrew-to-set-90dns-on-all-existing-wifi-networks","title":"Using homebrew to set 90DNS on all existing WiFi networks","text":"
  1. Download switch-90dns-setter and put it in the /switch folder.
  2. Launch CFW and open the homebrew menu.
  3. Launch 90DNS Setter.
  4. Press X to apply 90DNS to all WiFi networks.
  5. Press Y to reboot the Switch.
  6. Check in system settings if networks have a custom DNS applied.
Location Primary DNS Secondary DNS Europe (Server located in France) 163.172.141.219 207.246.121.77 America (Server located in the USA) 207.246.121.77 163.172.141.219

Example for a 90DNS connection with the Europe settings:

"},{"location":"extras/blocking_nintendo/#testing-if-you-can-reach-nintendo","title":"Testing if you can reach Nintendo","text":""},{"location":"extras/blocking_nintendo/#testing-via-the-eshop-stock","title":"Testing via the eShop (Stock)","text":"
  1. Open the eShop. Wait until it either opens or displays an error.
  2. If it displays \"Unable to display page.\", you seem to have blocked Nintendo's servers.
"},{"location":"extras/blocking_nintendo/#testing-via-a-homebrew-app-cfw","title":"Testing via a homebrew app (CFW)","text":"
  1. Download the latest release of the 90DNS Tester
  2. Place the Switch_90DNS_tester.nro in the switch folder on your SD.
  3. Enter the homebrew menu and run the 90DNS Tester.
  4. After the test finished it should look similar to the below picture, with every nintendo domain being blocked.
"},{"location":"extras/game_modding/","title":"Game modding with LayeredFS","text":"

LayeredFS, a tool built into Atmosphere, allows you to (temporarily) replace a game's assets with your own, modified assets as long as you're booted into CFW.

"},{"location":"extras/game_modding/#usage-instructions","title":"Usage instructions","text":"

Check the section below to find your mod's folder/file structure, then install your mod accordingly.

Checking folder/file structures

Atmosphere 0.9.4 and below

Note: On Atmosph\u00e8re 0.9.4 and below, contents is called titles

In the image below, you can see a Batman skin mod being used in The Legend of Zelda: Breath of the Wild. In this example, the title ID and mod installation directory would be sd:/atmosphere/contents/0100509005AF2000/.

"},{"location":"extras/game_modding/#additional-notes","title":"Additional notes","text":"

The romfs folder contains modified assets in the way the game would normally read them. romfs stands for \"romFileSystem\", which is quite literally what the filesystem (folder and file structure) of the game you're modding consists of internally.

If you want to disable mods on launch of a game, hold the L button before launching the game and launch the game normally, L is the default button to do this. This will disable all modifications (like cheats and mods) that you have configured for your game.

While most games only require Atmosphere's LayeredFS to enable game modding, there are some games that may require more specialized setup. For example:

"},{"location":"extras/game_modding/#troubleshooting","title":"Troubleshooting","text":""},{"location":"extras/game_modding/#my-game-crashes-upon-launch","title":"My game crashes upon launch!","text":"

If your game crashes during launch, hold the L button to see if disabling all modifications for your game solves the issue. If so, delete the most recently added mod(s) for your game.

"},{"location":"extras/game_modding/#my-mods-arent-showing-up-in-game","title":"My mods aren't showing up in-game!","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"extras/glossary/","title":"Glossary of common hacking terms","text":"

This section is dedicated to explaining a number of common terms that are used when hacking the Nintendo Switch as well as linking a number of resources that can help fledgling developers or curious users.

"},{"location":"extras/glossary/#hacking-terms","title":"Hacking terms","text":"

The following list is in alphabetical order.

"},{"location":"extras/glossary/#resources","title":"Resources","text":"

The resources below are for users and developers interested in developing Homebrew or for those that want to get a more technical understanding of the various concepts.

"},{"location":"extras/installing_android/","title":"Installing Android","text":"

This page will detail the setup of Switchroot Android (Android 11) for the Nintendo Switch.

Have you partitioned your microSD card?

This page assumes that you've followed our guide to set up Atmosph\u00e8re. Before starting, your microSD card needs partitions for Android set up via Hekate. If you didn't do so, see this page to install Android alongside Atmosph\u00e8re. If you don't want to use Switch CFW and only Android, check the Official Switchroot Documentation instead. If you already have Android fully installed, do not follow this guide, as your current installation would be erased.

Looking for Android 10?

An unfortunate bug with clocking on Android 11 results in degraded performance for Erista (v1) units on Android 11. Android 10 installation is not covered here, but there is a guide on the Switchroot Wiki. However, Android 11 is the currently supported version and uses much more updated drivers.

Looking for Android 14?

Recently, Android 14 was released for the Switch. You can follow the official LineageOS guide to install Android 14.

The Switch lacks a cell modem; simply installing Android does not grant your Switch access to cell towers. This means, unlike most Android devices, you will not be able to make emergency phone calls, and you will still need Wi-Fi to access the Internet. You can, however, natively run Android programs and games.

This page will also not detail things such as rooting and overclocking; external links to these types of additions can be found in the Power User Guides section at the bottom of this page.

"},{"location":"extras/installing_android/#requirements","title":"Requirements:","text":""},{"location":"extras/installing_android/#instructions","title":"Instructions:","text":""},{"location":"extras/installing_android/#step-0-preparation","title":"Step 0: Preparation","text":"

If you have official Joy-Con controllers, you can set up auto-pairing so undocking them seamlessly connects to the console regardless of what OS is running. To make this work, boot HOS, ensure both work undocked (pair them), then reboot to Hekate. Select Nyx Options followed by Dump Joy-Con BT. You should see \"Found 2 out of 2 Joy-Con pairing data!\"

Have a Switch Lite?

You should poke the dump button in Hekate anyway -- this will dump factory stick and IMU calibration for use in Android.

"},{"location":"extras/installing_android/#step-1-downloading-files","title":"Step 1: Downloading Files","text":"

Download the latest .7z release archive from the official Switchroot download site--choose nx-atv... for Android TV (more console-like experience) or nx-tab... for standard Android (a more standard Android tablet experience). Both are usable with controllers and docking, but only tab supports proper touch input.

If you prefer TWRP recovery...

...you can download twrp.img from the extras folder.

"},{"location":"extras/installing_android/#step-2-arranging-the-microsd-card","title":"Step 2: Arranging the microSD Card","text":"

Are you using a V1 or V2 Switch (standard models)?

These models have a poorly designed microSD card reader and repeated removals/reinsertions can eventually cause the reader to fail. Please use Hekate SD UMS to transfer files instead of removing the microSD card from your Switch!

Extract the archive to the root of the microSD card (the FAT32 partition). The microSD card file structure should look more or less like this:

root\n|- bootloader\n|  |- ini\n|  |  |- ...\n|  |- payloads\n|  |  |- ...\n|  |- res\n|  |  |- ...\n|  |- sys\n|  |  |- ...\n|- Nintendo (if you use Horizon)\n|  |- ...\n|- switchroot\n|  |- android\n|  |  |- ...\n|  |- install\n|  |  |- ...\n|- lineage-18.1-[date]-UNOFFICIAL-[device].zip\n

If you downloaded TWRP...

...you have to replace /switchroot/install/recovery.img with twrp.img. No need to rename the file, just swap it out.

"},{"location":"extras/installing_android/#step-3-flashing-android","title":"Step 3: Flashing Android","text":"

Open the Hekate partition manager (located in Tools > Partition SD Card) and select Flash Android at the bottom of your screen. All three images should be found and successfully flashed. Select the option to reboot to recovery.

Once in recovery, select Factory Reset followed by Format Data. This does not delete anything here, but rather is used to prepare your data partitions for flashing. Ignore any errors that may appear. Return to the main menu and select Apply Update followed by Select from SWITCH SD. Find and select the lineage-18.1... zip in the list, and wait for it to finish.

Did the zip fail to flash?

Your microSD card is probably bad... Take a look at Hekate's microSD card info, and consider buying a better card.

If you are using TWRP...

Good luck... TWRP is for advanced users; no user support will be provided. TWRP is provided for power users who have a specific need for it.

Once done, reboot the system when prompted -- Android is now installed!

"},{"location":"extras/installing_android/#post-install","title":"Post-Install","text":""},{"location":"extras/installing_android/#tips-and-tricks","title":"Tips and Tricks","text":""},{"location":"extras/installing_android/#power-user-guides","title":"Power User Guides","text":"

To learn more about using the Switch Configuration App and overclocking, see the Switch Configuration App section. Furthermore, you can check out the INI guide as well.

"},{"location":"extras/installing_android/#need-help","title":"Need Help?","text":"

Join the Switchroot Discord server.

This page was made in collaboration with makinbacon21 on Discord. See the collapsible section below for the Switchroot guide maintainers.

Switchroot Project Staff (Android / Linux)

If you'd like, you can donate to the people who made this project possible using these links.

"},{"location":"extras/installing_linux/","title":"Installing Linux 4 Switch","text":"

Have you partitioned your microSD card?

This guide assumes that you've followed the NH-Server guide up until this point, your microSD card should be partitioned accordingly. If you didn't do so, see this page of our guide.

Linux 4 Switch is a sister project to Switchroot Android--it uses a similar kernel but provides a variety of Linux distributions.The available distributions at this time are:

Looking for Arch?

Unfortunately, L4S Arch Linux is deprecated following an xorg ABI change that breaks compatibility with the Tegra210 BSP.

"},{"location":"extras/installing_linux/#the-installation","title":"The installation","text":"

To install an L4S distribution, follow the official guide starting from 0. Linux Distributions.

This page was made in collaboration with makinbacon21 on Discord. See the collapsible section below for the L4S guide maintainers.

L4S Project Staff (Android / Linux)

If you'd like, you can donate to the people who made this project possible using these links.

"},{"location":"extras/nandrestore/","title":"Restoring a NAND Backup","text":""},{"location":"extras/nandrestore/#restore-a-nand-backup-to-the-switch","title":"Restore a NAND backup to the Switch","text":"

Warning:

"},{"location":"extras/nandrestore/#what-you-need","title":"What you need:","text":""},{"location":"extras/nandrestore/#instructions","title":"Instructions:","text":"

Before we start, check if you have a tree of folders called backup/[8 Character NAND id]/restore on your microSD card.

If you don't see a backup or [8 Character NAND id] folder on your microSD card:

This means you do not have a nand backup, it is highly recommended you make one as soon as possible. Follow the steps below to make one.

  1. Launch the latest Hekate payload on your Switch.
  2. Navigate to Tools > Backup eMMC > eMMC BOOT0 & BOOT1 and let it do its thing.
  3. Wait for the process to complete. When it's completed, you now have a backup/[8 Character NAND id]/restore folder on your microSD card. Continue with step 1 of the instructions below.
  1. Enter RCM and inject the Hekate payload.
  2. Navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  3. Copy your rawnand.bin (combined or in 15 or 30 parts), BOOT0, and BOOT1 to the backup/[8 Character NAND id]/restore folder on the microSD card.
  4. Eject the UMS device safely from within your computer's operating system.
  5. Navigate to Tools > Restore eMMC. Select Restore eMMC BOOT0 & BOOT1. Wait for this process to complete.
  6. In that same menu, select eMMC RAW GPP and wait for the process to complete.

If you're downgrading using your NAND backup

If the security version you were on before you performed the NAND restore is HIGHER than the NAND backup itself, you have to enable autoRCM to not get stuck in a boot crash.

A system update is considered a security version when a fuse is burned, you can check which versions burn fuses here.

If you were in AutoRCM before you upgraded to a newer security version (and still were after the upgrade) you don't have to do this.

  1. In Hekate's main menu, navigate to Tools and go to the bottom of the page where you will find a button called Archive bit - AutoRCM
  2. Select the AutoRCM buttom and you will see ON written next to it. This means it is enabled.
"},{"location":"extras/rcm_injectors/","title":"RCM Payload Injectors","text":"

There are currently multiple RCM payload injectors available from multiple different companies and individuals. These devices remove the need to use a computer or smartphone when hacking an unpatched Switch. Each injector has its own advantages and disadvantages, listed below:

Name Manufacturer RCM Jig Included? RCM Jig Storage? Standard Payload (.bin) Support? Payload on SD Support? Multi-Payload Support? Battery Life Recharge Time Price (USD) Misc Info AceNS (Old) Ace3DS Team \u2714\ufe0f \u274c \u2714\ufe0f \u274c \u2714\ufe0f N/A (Capacitors) 10 seconds $18.00\u200b (Discontinued) Not Recommended: Overpriced clone of the RCMLoader Zero AceNS (New) Ace3DS Team \u2714\ufe0f \ufe0f \u2714\ufe0f \u2714\ufe0f \u274c \u2714\ufe0f 45mAh LiPo (~1000 injections) 1 hour $17.50 Not Recommended: Overpriced clone of the RCMLoader One AceNS Pro Ace3DS Team \u2714\ufe0f \u2714\ufe0f \u2714\ufe0f \u2714\ufe0f (Required) \u274c 45mAh LiPo (~1000 injections) 1 hour $42.90 Not Recommended: Overpriced clone of the RCMLoader One with multiple features missing DragonInjector MatinatorX \u2714\ufe0f \u2714\ufe0f \u2714\ufe0f \u2714\ufe0f (Required) \u2714\ufe0f 40mAh CR1612 (~4000 injections) Non-Rechargeable (Replacable) $30.00\u200b (Discontinued) Fits in the Switch's gamecard slot NS-Atmosphere Generic \u2714\ufe0f \u2714\ufe0f \u274c \u274c \u274c 150mAh LiPo (>1000 injections) >1 hour $13.15 Not Recommended: Unsafe jig, overly bulky, changing payload requires installing a program, lack of .bin support complicates usage R4S R4i-SDHC Team \u2714\ufe0f \u274c \u2714\ufe0f \u2714\ufe0f \u274c 120mAh LiPo (~1000 injections) 1 hour $19.99 RCMLoader Zero Xkit \u2714\ufe0f \u274c \u2714\ufe0f \u274c \ufe0f \u2714\ufe0f N/A (Capacitors) 10 seconds $5.99\u200b (Discontinued) RCMLoader One Xkit \u2714\ufe0f \u2714\ufe0f \u2714\ufe0f \u274c \u2714\ufe0f 45mAh LiPo (~1000 injections) 1 hour $9.99 SX Gear Team Xecuter \u2714\ufe0f \u274c \u274c \u2714\ufe0f (Required) \u274c N/A (Supercapacitors) 5-10 seconds $24.95 Not Recommended: Lack of .bin support complicates usage SX Pro Team Xecuter \u2714\ufe0f \u274c \u274c \u2714\ufe0f (Required) \u274c N/A (Supercapacitors) 5-10 seconds $49.99 Not Recommended: Lack of .bin support complicates usage"},{"location":"extras/showing_file_extensions/","title":"Showing File Name Extensions on Windows 10/11","text":"

By default, Microsoft Windows 10 and 11 do not show file extensions for known file types. This can result in problems when you need to rename files.

"},{"location":"extras/showing_file_extensions/#instructions-for-windows-10","title":"Instructions for Windows 10:","text":"
  1. Open a new File Explorer window.
  2. Switch to the View tab/ribbon.
  3. On this tab, if the File name extensions checkbox is not ticked, put a check/tick mark in it by clicking it.
"},{"location":"extras/showing_file_extensions/#instructions-for-windows-11","title":"Instructions for Windows 11:","text":"
  1. Open a new File Explorer window.
  2. Click the View hamburger menu/dropdown menu.
  3. Go to Show at the bottom and ensure that File name extensions is ticked.
"},{"location":"extras/transfer_sd/","title":"Changing microSD cards","text":"

The goal of this page is to transfer the contents from one microSD card to another one. The method to do this will differ, depending on whether you're using a partition based emuMMC on your microSD card or not.

We will be using hekate to both backup and restore the emuMMC, so make sure that you have its latest files on your microSD card already.

"},{"location":"extras/transfer_sd/#instructions","title":"Instructions:","text":"

You should first check whether you have a file or partition based emuMMC:

  1. Enter RCM and inject the Hekate payload.
  2. Tap on the emuMMC button.
  3. Under emuMMC Info & Selection, check the text next to Type.
"},{"location":"extras/transfer_sd/#if-you-are-using-a-file-based-emummc-or-are-using-no-emummc-at-all","title":"If you are using a file based emuMMC or are using no emuMMC at all:","text":"
  1. Enter RCM and inject the Hekate payload.
  2. Navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  3. Copy the contents of your microSD card somewhere to your PC.
  4. Access your new microSD card via a microSD card reader or similar.
  5. Format your new microSD card to FAT32 if it isn\u2019t already.
  6. Copy the files from your PC or directly from your old microSD card to your new microSD card.
  7. Eject the UMS device safely from within your computer's operating system.
"},{"location":"extras/transfer_sd/#if-you-are-using-a-partition-based-emummc","title":"If you are using a partition based emuMMC:","text":"

Space for the backup

You need at least 30GB (or 60GB if using an OLED Switch) of free space to be able to restore the emuMMC!

  1. Enter RCM and inject the Hekate payload.
  2. In the main menu, tap on Tools, then Backup eMMC and set SD emuMMC Raw Partition at the bottom of your screen to ON.
  3. Backup both SD emuMMC BOOT0 & BOOT1 and SD emuMMC RAW GPP (Note: SD emuMMC RAW GPP may take a while).
  4. Once both are done, go back to the main menu, navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  5. If Windows asks you to format a drive, discard it and open the accessible drive containing the contents of your microSD card.
  6. Copy the contents of your old microSD card somewhere to your PC.
  7. Follow the Preparing Hekate section at the bottom of this page (Unpatched Switch users only) to prepare your new SD card with Hekate's files.
  8. Follow only steps 1-3 on this page to partition the new microSD card for an emuMMC setup.
  9. After it\u2019s done, boot into Hekate and navigate to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  10. Copy the backup you made of your old microSD card on your PC to your new microSD card.
  11. Navigate to /backup/<some characters>/emummc on your microSD card and move BOOT0, BOOT1 and the rawnand.bin.xx files to /backup/<some characters>/restore/emummc.
  12. Eject the UMS device safely from within your computer's operating system.
  13. Tap on Tools, Restore eMMC, set SD emuMMC Raw Partition at the bottom of your screen to ON.
  14. Restore the backup by tapping on both SD emuMMC BOOT0 & BOOT1 and SD emuMMC RAW GPP (Note: SD emuMMC RAW GPP may take a while).
  15. Your emuMMC is now restored on the new microSD card and you should be able to launch it from Launch -> Atmosphere FSS0 emuMMC in Hekate.
"},{"location":"extras/updating/","title":"Keeping your system up-to-date","text":"

This page documents how you can keep your system up-to-date.

After following our guide, your system will consist of three core elements that can be updated. Atmosphere, Hekate and your system firmware.

"},{"location":"extras/updating/#updating-atmosphere","title":"Updating Atmosphere","text":"

When updating Atmosph\u00e8re, always make sure to read the release notes. They may list important changes and modifications to your system.

Updating from below Atmosph\u00e8re 1.0.0

If you update from below Atmosph\u00e8re 1.0.0, there are additional steps to follow. You will have to delete the sept folder from your microSD, delete fusee-secondary.bin from your atmosphere folder and update your Hekate config file: hekate_ipl.ini in the bootloader folder.

When a new version of Atmosph\u00e8re releases, you can update Atmosph\u00e8re by following these steps:

  1. Enter RCM and inject the Hekate payload.
  2. Navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  3. Download the latest release of Atmosphere (Download the atmosphere-(version)-master-(version)+hbl-(version)+hbmenu-(version).zip release of Atmosphere.)
  4. Copy the contents of the Atmosphere .zip file to the root of your microSD card.
  5. Eject the UMS device safely from within your computer's operating system.
  6. (If your Hekate is not on the latest version) update Hekate via the steps below.
"},{"location":"extras/updating/#updating-hekate","title":"Updating Hekate","text":"

When updating Hekate always make sure to read the release notes. They may list important changes and modifications to your system.

When a new version of Hekate releases, you can update by following these steps:

  1. Enter RCM and inject the Hekate payload.
  2. Navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  3. Download the latest version of Hekate (Download the hekate_ctcaer_(version).zip release of hekate).
  4. Copy the bootloader folder from the Hekate .zip file to the root of your microSD card. If you are asked to overwrite or merge files while copying, say yes to merge/overwrite them.
  5. Eject the UMS device safely from within your computer's operating system.
  6. Go back to Hekate's main menu and press Reload > Reload to reload Hekate from your microSD card.
  7. From here, you're done and you can boot into CFW.
"},{"location":"extras/updating/#updating-your-firmware","title":"Updating your firmware","text":"

Always check before updating your system firmware if the latest version of Atmosph\u00e8re as well as the latest version of Hekate support the firmware version you are updating towards.

In addition, updating to or past some firmwares update the gamecard firmware. Reference the table below for information about these.

Updating from Updating towards Updates gamecard firmware Below 4.0.0 Below 4.0.0 No Below 4.0.0 4.0.0 or above Yes On or above 4.0.0, but below 9.0.0 At least 4.1.0 but below 9.0.0 No On or above 4.0.0, but below 9.0.0 9.0.0 or above Yes On or above 9.0.0, but below 11.0.0 At least 9.1.0 but below 11.0.0 No On or above 9.0.0, but below 11.0.0 11.0.0 or above Yes On or above 11.0.0 but below 12.0.0 At least 11.0.1 but below 12.0.0 No On or above 11.0.0 but below 12.0.0 12.0.0 or above Yes On or above 12.0.0 Latest supported Atmosph\u00e8re & Hekate revision No

If at least one of the versions you are updating towards also updates the gamecard firmware, you will not be able to downgrade below that version without making the gamecard slot unusable until you update.

Atmosphere (and Hekate) come bundled with patches that automatically disable the gamecard slot if it is detected that the system has an older gamecard firmware that would be updated. If you boot into RCM on each boot (for example by using AutoRCM), this means that the gamecard slot will not be updated and you can downgrade below that version. If this happens, you will not be able to use the gamecard slot as long as you are on the newer firmware.

Otherwise, you can safely update your system firmware through the system settings.

Note about autoRCM

If you have autoRCM enabled and you're updating your system while in stock firmware, updating will disable autoRCM and you will need to enter RCM manually to boot custom firmware again. To prevent autoRCM from being disabled, boot CFW on sysMMC and update through settings from there, as booting without AutoRCM will burn any preserved fuses.

"},{"location":"extras/updating/#about-emummc","title":"About emuMMC","text":"

sysMMC and emuMMC have separate system firmwares and need to be updated separately.

If you keep your emuMMC offline, you will have to use a gamecard to update your system firmware, synchronize it with another Nintendo Switch or dump an updated firmware from your sysMMC.

"},{"location":"extras/updating/#updating-emummc-by-dumping-an-updated-firmware-from-your-sysmmc","title":"Updating emuMMC by dumping an updated firmware from your sysMMC","text":"

Do you have an eMMC backup yet?

Please do not start this guide without doing a RAW GPP and a BOOT 0/1 eMMC backup!

You can learn how to make one here.

Downgrading

This guide is made for updating your emuMMC. It is not for downgrading. Downgrading at all, sysMMC or emuMMC, is not recommended and not worth it. Downgrading is also very dangerous and can lead to serious complications even when performed correctly.

"},{"location":"extras/updating/#what-you-need","title":"What you need:","text":""},{"location":"extras/updating/#preparing-your-microsd-card","title":"Preparing your microSD card","text":"
  1. Boot into Hekate.
  2. Go to Tools > USB Tools > SD Card and connect your Switch to your PC via USB.
  3. Download the latest release of TegraExplorer.bin and place it sd:/bootloader/payloads.

Make sure your sysMMC is updated before moving onto the instructions below.

"},{"location":"extras/updating/#dumping-your-sysmmc-firmware","title":"Dumping your sysMMC firmware","text":"
  1. Make sure your sysMMC is up to date. If your sysMMC is not up-to-date, boot into Stock or sysCFW and update it through the System Settings.
  2. Inject TegraExplorer.bin using your favourite payload injector (Like you would with Hekate).
  3. Using the joystick and the A buttons, select FirmwareDump.te, then select Dump sysmmc.
  4. Wait about 1-2 minutes for the script to dump your firmware.
  5. When the script finishes, press any button.
  6. Select Reboot to bootloader/update.bin.
"},{"location":"extras/updating/#updating-your-emummc-with-daybreak","title":"Updating your emuMMC with Daybreak","text":"
  1. In Hekate go to Launch -> Atmosphere FSS0 emuMMC.
  2. Once booted, hold R while launching a game to boot into the homebrew menu.
  3. Find Daybreak in the homebrew menu and launch it.
  4. Tap on Install and navigate to sd:/tegraexplorer/Firmware/<latest firmware number>.
  5. Tap on Continue and then Preserve settings.
  6. If it is available choose Install (FAT32 + exFAT), otherwise Install (FAT32) and then Continue.
  7. Wait until Daybreak completes installing the dumped firmware.
  8. Once it completes, it will ask if you want to reboot. Tap Reboot.
  9. Once rebooted, launch into emuMMC and verify your system works. You can verify your system has been properly updated in Settings -> System.
"},{"location":"homebrew/","title":"Homebrew","text":""},{"location":"homebrew/#information","title":"Information","text":"

This page summarizes the included Homebrew apps and additional Homebrew you can check out.

"},{"location":"homebrew/#the-guide-includes-a-few-homebrew-apps-by-default-these-apps-are","title":"The guide includes a few Homebrew apps by default, these apps are:","text":""},{"location":"homebrew/#terminologies","title":"Terminologies","text":"

Homebrew is a general term, the term can be used for Homebrew apps (.nro files) or in the form of background processes, called \"sysmodules\". The Switch natively has sysmodules built into its firmware but you can run additional Homebrew sysmodules that can add functionality to your Switch. In the section below, you can find additional and commonly used Homebrew apps and sysmodules.

Homebrew apps are stored in sd:/switch by default and Homebrew sysmodules are stored in sd:/atmosphere/contents by default.

"},{"location":"homebrew/#additional-homebrew-appssysmodules","title":"Additional Homebrew apps/sysmodules:","text":""},{"location":"homebrew/edizon/","title":"Games cheats","text":""},{"location":"homebrew/edizon/#edizon","title":"EdiZon","text":"

For cheats management, EdiZon and/or EdiZon-SE (up to date and offers more features) are recommended. They offer support for Atmosphere's cheat engine, providing an easy way to download new cheats, as well as toggle them on or off.

"},{"location":"homebrew/edizon/#installation-requirements","title":"Installation requirements:","text":"

EdiZon overlay

EdiZon also offers a Tesla-Menu overlay, however, the official EdiZon overlay is no longer maintained and will result in Atmosphere crashing when trying to use the EdiZon overlay on firmware version 16.0.0+. The maintained EdiZon overlay can be found here.

Installation instructions (EdiZon):Installation instructions (EdiZon-SE):
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Put the EdiZon.nro in sd:/switch.
  4. Boot into CFW.
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. If your archive manager allows for it, you can also simply open the .zip file directly.
  5. Copy the contents of the (extracted) .zip file to the root of your microSD card.
  6. Optional: You can verify if you've installed EdiZon-SE correctly, you should have a folder called 054e4f4558454000 (EdiZon-SE) in sd:/atmosphere/contents and an EdiZon.nro file in sd:/switch/EdiZon.
  7. Boot into CFW.
"},{"location":"homebrew/edizon/#usage-instructions","title":"Usage instructions","text":"

Atmosph\u00e8re looks for cheats to load in the contents sub-folder of the atmosphere folder. The template it looks for is sd:/atmosphere/contents/<title_id>/cheats/<build_id>.txt. You need to create the <title_id> folder and sub-folders manually:

Note: On Atmosph\u00e8re 0.9.4 and below contents is called titles.

Once the title is launched while in Atmosphere, your cheats should be applied.

"},{"location":"homebrew/edizon/#preventing-cheats-from-being-enabled-by-default","title":"Preventing cheats from being enabled by default","text":"

To prevent cheats from being enabled by default, you can change your Atmosph\u00e8re configuration by following the steps below.

  1. Copy system_settings.ini from sd:/atmosphere/config_templates to sd:/atmosphere/config if it's not already there.
  2. Open the system_settings.ini file with a text editor and edit the line ; dmnt_cheats_enabled_by_default = u8!0x1 to dmnt_cheats_enabled_by_default = u8!0x0.

By default, holding the L button while launching a game will disable any game modification.

Here the Title ID of the game (TID) is 0100646009FBE000 and the Build ID of the game (BID) is 0B9A75586BC1A6C6. Cheats are loaded from sd:/atmosphere/contents/0100646009FBE000/cheats/0B9A75586BC1A6C6.txt in this example.

"},{"location":"homebrew/edizon/#additional-information","title":"Additional information:","text":"

For more in-depth details about Atmosphere's cheat engine, you can refer to this page.

"},{"location":"homebrew/edizon/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/edizon/#edizon-isnt-showing-up-when-i-open-the-homebrew-menu","title":"EdiZon isn't showing up when I open the Homebrew menu!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/ftpd/","title":"FTPD","text":""},{"location":"homebrew/ftpd/#ftpd","title":"FTPD","text":"

FTPD is simply an FTP server for the Switch, it can be used to transfer files wirelessly to- and from- your microSD card.

"},{"location":"homebrew/ftpd/#usage-requirements","title":"Usage requirements:","text":""},{"location":"homebrew/ftpd/#usage-instructions","title":"Usage instructions:","text":"

Note

This section assumes that the device running the FTP client and your Switch are connected to the same network. If it's not, make sure they are connected to the same network before continuing.

  1. Launch the FTPD Homebrew app from the Homebrew menu.
  2. Open your FTP client of choice.
  3. Add a new connection and in the Host field of your FTP client, put in the IP address of your Switch mentioned in the top left of FTPD.
  4. Type in port 5000 for the port and attempt to connect to your Switch.
  5. You should now be able to access your microSD card wirelessly and transfer files to- and from- the microSD card.
"},{"location":"homebrew/ftpd/#ftpds-main-menu","title":"FTPD's main menu:","text":""},{"location":"homebrew/ftpd/#additional-information","title":"Additional information:","text":"

FTPD can also run in the form of a background process (sysmodule), called sys-ftpd. It can be found here, usage and configuration options are mentioned there as well.

"},{"location":"homebrew/goldleaf/","title":"Goldleaf","text":""},{"location":"homebrew/goldleaf/#goldleaf","title":"Goldleaf","text":"

Goldleaf is primarily a very extensive file and console content manager.

"},{"location":"homebrew/goldleaf/#common-use-cases-for-goldleaf-are","title":"Common use cases for Goldleaf are:","text":"

And a lot more, which you can view on Goldleaf's Github repository here.

"},{"location":"homebrew/goldleaf/#goldleaf-screenshots","title":"Goldleaf screenshots:","text":""},{"location":"homebrew/jksv/","title":"Save Management","text":""},{"location":"homebrew/jksv/#jksv","title":"JKSV","text":"

For save management, JKSV is recommended. It can be used to back up and restore game saves to your microSD card.

"},{"location":"homebrew/jksv/#backing-up-save-data-using-jksv","title":"Backing up save data using JKSV","text":""},{"location":"homebrew/jksv/#instructions","title":"Instructions:","text":"
  1. Launch JKSV from the homebrew menu.
  2. Select your Switch user on the left side with the A button.
  3. Select your desired game and press A to select it.
  4. Press A again to create a new save backup
  5. Enter a name for the save data folder containing the save data and press + or OK.
  6. Wait for it to finish backing up your save data.
"},{"location":"homebrew/jksv/#restoring-save-data-using-jksv","title":"Restoring save data using JKSV","text":""},{"location":"homebrew/jksv/#instructions_1","title":"Instructions:","text":"
  1. Launch JKSV from the homebrew menu.
  2. Select your Switch user on the left side with the A button.
  3. Select your desired game and press A to select it.
  4. Hover over the save data folder containing the save data you want and press Y.
  5. Hold the A button to restore the save data, keep holding it until it's finished.
"},{"location":"homebrew/jksv/#jksv-documentation","title":"JKSV Documentation","text":"

Please read JKSV's homepage for information on how to use it.

"},{"location":"homebrew/jksv/#checkpoint","title":"Checkpoint","text":"

Checkpoint is also a save manager. It can be used to back up and restore game saves to your microSD card. It also has the ability to share save data over FTP and WiFi.

"},{"location":"homebrew/jksv/#checkpoint-documentation","title":"Checkpoint Documentation","text":"

Please read Checkpoint's homepage for information on how to use it.

"},{"location":"homebrew/ldn_mitm/","title":"ldn_mitm","text":""},{"location":"homebrew/ldn_mitm/#information","title":"Information","text":"

ldn_mitm is a sysmodule that allows you to route the local wireless ad-hoc network traffic of the Switch via the network your Switch is connected to, essentially allowing \"LAN\" functionality between consoles and emulators using ldn_mitm. The official Github repository for ldn_mitm can be found here.

"},{"location":"homebrew/ldn_mitm/#common-use-cases-for-ldn_mitm","title":"Common use cases for ldn_mitm:","text":""},{"location":"homebrew/ldn_mitm/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/ldn_mitm/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. Copy the contents of the (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/ldn_mitm/#basic-usage-instructions","title":"Basic usage instructions","text":"

You can enable/disable ldn_mitm by opening the Homebrew menu, opening ldn_mitm's config app and pressing Y to toggle ldn_mitm.

"},{"location":"homebrew/ldn_mitm/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/ldn_mitm/#my-switch-crashes-on-boot-after-i-installed-ldn_mitm","title":"My Switch crashes on boot after I installed ldn_mitm!:","text":"

Cause: If your Switch crashes with Error std::abort (0xFFE) and Title ID 4200000000000010, you're using a version of ldn_mitm that's incompatible with your Atmosphere version. The expected Atmosphere version is mentioned on each release page of an ldn_mitm release.

"},{"location":"homebrew/ldn_mitm/#ldn_mitm-isnt-working","title":"ldn_mitm isn't working!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/mission-control/","title":"MissionControl","text":""},{"location":"homebrew/mission-control/#information","title":"Information","text":"

MissionControl is a sysmodule that allows you to pair normally-unsupported controllers as if they were natively supported, like PS3, PS4, PS5 and Xbox One S/X controllers via Bluetooth. The full supported controller list can be found on the official Github repository here including pairing instructions for the supported controllers.

"},{"location":"homebrew/mission-control/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/mission-control/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. Copy the contents of the (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/mission-control/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/mission-control/#my-switch-crashes-on-boot-after-i-installed-missioncontrol","title":"My Switch crashes on boot after I installed MissionControl!:","text":"

Cause: If your Switch crashes with Error std::abort (0xFFE) and Title ID 010000000000BD00, you're using a version of MissionControl that's incompatible with your Atmosphere version. The expected Atmosphere version is mentioned on each release page of a MissionControl release.

"},{"location":"homebrew/mission-control/#missioncontrol-isnt-working","title":"MissionControl isn't working!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/nx-shell/","title":"NX-Shell","text":""},{"location":"homebrew/nx-shell/#nx-shell","title":"NX-Shell","text":"

NX-Shell is a file manager.

"},{"location":"homebrew/nx-shell/#common-use-cases-for-nx-shell","title":"Common use cases for NX-Shell","text":"

For more information, you can check out NX-Shell's Github repository here.

"},{"location":"homebrew/nx-shell/#nx-shell-screenshots","title":"NX-Shell screenshots:","text":""},{"location":"homebrew/nxtheme-installer/","title":"Theming","text":"

Using NXTheme Installer, you can install and create unique styles and layouts for your Switch Home Menu.

"},{"location":"homebrew/nxtheme-installer/#index","title":"Index","text":""},{"location":"homebrew/nxtheme-installer/#installing-a-theme","title":"Installing a theme","text":"

Community Themes

If you want to use community made themes, for example from the r/NXThemes subreddit or Themezer, you can follow the guide below to install a community provided .nxtheme file.

"},{"location":"homebrew/nxtheme-installer/#what-you-need","title":"What you need:","text":""},{"location":"homebrew/nxtheme-installer/#instructions","title":"Instructions:","text":"
  1. Download NXThemesInstaller.nro and put it in sd:/switch.
  2. Copy the .nxtheme files to the themes folder on your microSD card (It is recommended you put them into their own folders, e.g. sd:/themes/awesome_theme/awesome.nxtheme).
  3. Boot into sysCFW/emuMMC and launch the Homebrew Menu, then launch NXThemes Installer with an internet connection.
  4. If you get prompted about extracting your home menu data, do so.
  5. You should now see the main menu of NXTheme Installer, the Themes tab is where you will find your themes. To install them, press the folder name of your theme and go through each home menu section to install the desired theme for that section (e.g. going to /awesome_theme and selecting your theme for the specific menu you want to change, do the same for the other menus).
  6. Reboot into CFW via the Reboot tab to see the changes.

An example of a Home Menu theme being installed

"},{"location":"homebrew/nxtheme-installer/#making-a-theme","title":"Making a theme","text":"WindowsMac / Linux / ChromeOS"},{"location":"homebrew/nxtheme-installer/#what-you-need_1","title":"What you need:","text":"

The latest release of Switch Theme Injector

"},{"location":"homebrew/nxtheme-installer/#making-the-theme","title":"Making the theme","text":"
  1. Unzip ReleaseVx.x.zip to somewhere on your PC's drive.
  2. Open up the SwitchThemes.exe app. Navigate to NXTheme Builder.
  3. Select a Home menu part, A 720p image and a Layout patch. Click on Build NXTheme after selecting your home menu part, image and layout patch.
  4. Fill out the details in the window that pops up. After filling out this window and clicking ok, you will get asked where to save the NXTheme file. Save this file to a temporary folder.
  5. Repeat step 3 and 4 for every Home Menu part of the Switch you want to modify.
"},{"location":"homebrew/nxtheme-installer/#making-the-theme_1","title":"Making the theme","text":"

Make sure that the images you want to use are 1280x720 and in JPG!

  1. Navigate to Exelix's Web Injector.
  2. Select a Theme Target you want to edit. After this, click the Open an Image button and select your background image.
  3. Choose a theme name and an author name and optionally a different layout, then click build NxTheme.
  4. Your browser will prompt you to download a file. Save this file to a temporary folder.
  5. Repeat step 2 to 4 for every Home Menu part of the Switch you want to modify.
"},{"location":"homebrew/nxtheme-installer/#installing-a-custom-font","title":"Installing a custom font","text":"
  1. Put a font with the .ttf file type into the themes folder (It is recommended you put them into their own folders, e.g. sd:/themes/cool_font/font.ttf).
  2. Boot into sysCFW/emuMMC, launch the Homebrew Menu and launch NXThemes Installer.
  3. You should now see the main menu of NXTheme Installer, the Themes tab is where you will find your font(s).
  4. Install your desired font by selecting the .ttf file in the font folder you created.
  5. Reboot into CFW via the Reboot tab to see the changes.
"},{"location":"homebrew/nxtheme-installer/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/nxtheme-installer/#my-switch-crashes-on-boot-after-i-installed-a-theme","title":"My Switch crashes on boot after I installed a theme!:","text":"

Cause 1: You didn't install the required theme patches for your firmware version. You can remove your installed custom theme data by navigating to sd:/atmosphere/contents and deleting the 01000000000001000 folder.

Cause 2: You didn't extract your home menu data when prompted. You can remove your installed custom theme data by navigating to sd:/atmosphere/contents and deleting the 01000000000001000 folder.

Cause 3: You installed a bad theme. You can remove them by navigating to sd:/atmosphere/contents and deleting the 01000000000001000 folder.

"},{"location":"homebrew/nxtheme-installer/#my-switch-crashes-on-boot-after-i-installed-a-font","title":"My Switch crashes on boot after I installed a font!:","text":"

Cause 1: You installed a font that was too large in file size (maximum file size being 1.9MB). You can remove your installed custom font data by navigating to sd:/atmosphere/contents and deleting the 0100000000000811 folder.

Cause 2: You installed a font that wasn't the right file type (e.g. .otf). You can remove your installed custom font data by navigating to sd:/atmosphere/contents and deleting the 0100000000000811 folder.

"},{"location":"homebrew/nxtheme-installer/#the-nxtheme-installer-crashes-when-i-launch-it","title":"The NXTheme installer crashes when I launch it:","text":"

This is probably due to the archive bit being set on either the app or the .nxtheme files. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/sys-botbase/","title":"sys-botbase","text":""},{"location":"homebrew/sys-botbase/#information","title":"Information","text":"

sys-botbase is an advanced sysmodule that allows users to interact with their Switch remotely, to \"remote control\" their Switch. This remote control allows users to create automated tasks, simulate button presses, simulate touchscreen input and read/write to the memory of the Switch while in-game.

"},{"location":"homebrew/sys-botbase/#common-use-cases-for-sys-botbase","title":"Common use cases for sys-botbase:","text":""},{"location":"homebrew/sys-botbase/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/sys-botbase/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. Copy the contents of each (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/sys-botbase/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/sys-botbase/#my-switch-crashes-on-boot-after-i-installed-sys-botbase","title":"My Switch crashes on boot after I installed sys-botbase!:","text":"

Cause: While it's almost impossible for this to happen, if your Switch crashes with Error 2001-0123 (0xf601) and Title ID 430000000000000B, you're using a version of sys-botbase that's incompatible with your Atmosphere version.

"},{"location":"homebrew/sys-botbase/#sys-botbase-isnt-working","title":"sys-botbase isn't working!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/sys-clk/","title":"sys-clk","text":""},{"location":"homebrew/sys-clk/#information","title":"Information","text":"

sys-clk is a sysmodule that allows you to overclock the hardware of your Switch. The usage, configuration and clock speed information can be found on the official Github repository here

Limits of sys-clk

sys-clk has limits for a reason, which is to not damage the hardware of your Switch. Using any modified version of sys-clk puts your Switch at risk of hardware failure. We do not support any modified version of sys-clk nor should you ever touch them. Overclocking is not something you should be doing 24/7 as overclocking in general will always degrade/wear out the hardware of your Switch faster and you should know what you're doing if you do decide to do so.

"},{"location":"homebrew/sys-clk/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/sys-clk/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. Copy the contents of the (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/sys-clk/#basic-usage-instructions","title":"Basic usage instructions","text":"

Open the Homebrew menu and open sys-clk's manager app. This app allows you to change the global clock speeds or clock speeds based on title.

"},{"location":"homebrew/sys-clk/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/sys-clk/#my-switch-crashes-on-boot-after-i-installed-sys-clk","title":"My Switch crashes on boot after I installed sys-clk!:","text":"

Cause: If your Switch crashes on boot, make sure you're using the latest release of sys-clk. If it continues to crash afterwards, see the troubleshooting step at the bottom of this page.

"},{"location":"homebrew/sys-clk/#my-switch-crashes-while-using-sys-clk","title":"My Switch crashes while using sys-clk!:","text":"

Cause: You're either using a modified version of sys-clk and pushing the hardware of your Switch too far or your console is overheating. The cooling system of the Switch is not the best and overheating can be a cause of dried up thermal paste/lack of thermal paste. Overclock with caution and be careful, monitor the temperatures of your Switch using a Tesla-Menu overlay like Status-Monitor-Overlay (requires Tesla-Menu).

"},{"location":"homebrew/sys-clk/#sys-clk-isnt-working","title":"sys-clk isn't working!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/sys-con/","title":"sys-con","text":""},{"location":"homebrew/sys-con/#information","title":"Information","text":"

sys-con is a sysmodule that allows you to use normally-unsupported controllers as if they were natively supported, like PS3, PS4, PS5 and Xbox One S/X controllers via USB. The full supported feature and controller list can be found on the official Github repository here including usage instructions and configuration options.

"},{"location":"homebrew/sys-con/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/sys-con/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. Copy the contents of the (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/sys-con/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/sys-con/#my-switch-crashes-on-boot-after-i-installed-sys-con","title":"My Switch crashes on boot after I installed sys-con!:","text":"

Cause: While it's almost impossible for this to happen, if your Switch crashes with Error code 2162-0002 (0x4a2) and Title ID 690000000000000D, you're using a version of sys-con that's incompatible with your Switch firmware version. The expected firmware version is mentioned on each release page of a sys-con release.

"},{"location":"homebrew/sys-con/#sys-con-isnt-working","title":"sys-con isn't working!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/sysdvr/","title":"SysDVR","text":""},{"location":"homebrew/sysdvr/#information","title":"Information","text":"

SysDVR is a sysmodule that allows you to stream the screen of your Switch (while in-game/in an application) to your PC via the network or USB.

"},{"location":"homebrew/sysdvr/#sysdvr","title":"SysDVR","text":"

Installation, usage, configuration and extensive troubleshooting information can be found on the SysDVR Wiki.

"},{"location":"homebrew/sysdvr/#sysdvr-screenshots","title":"SysDVR screenshots:","text":""},{"location":"homebrew/tesla-menu/","title":"Tesla-Menu","text":""},{"location":"homebrew/tesla-menu/#information","title":"Information","text":"

Tesla-Menu is an overlay menu developed by WerWolv, Tesla-Menu is comparable to Rosalina menu on the 3DS and its purpose is to be able to load community made overlays for Homebrew apps and sysmodules that can be accessed at any time. Below you can find common use cases for Tesla-Menu. The official Github page for Tesla-Menu can be found here.

Dependencies

Tesla-Menu is dependent on a sysmodule called nx-ovlloader, this sysmodule is responsible for loading ovlmenu.ovl from sd:/switch/.overlays.

"},{"location":"homebrew/tesla-menu/#common-use-cases-for-tesla-menu","title":"Common use cases for Tesla-Menu:","text":""},{"location":"homebrew/tesla-menu/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/tesla-menu/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract both .zip files to a location on your computer.
  4. Copy the contents of each (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/tesla-menu/#opening-tesla-menu","title":"Opening Tesla-Menu","text":"

Tesla-Menu can be opened by pressing L + R Stick press (R3) + DPAD down, assuming you use the default configuration.

"},{"location":"homebrew/tesla-menu/#commonly-used-tesla-menu-overlays","title":"Commonly used Tesla-Menu overlays","text":""},{"location":"homebrew/tesla-menu/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/tesla-menu/#my-switch-crashes-on-boot-after-i-installed-tesla-menunx-ovlloader","title":"My Switch crashes on boot after I installed Tesla-Menu/nx-ovlloader!:","text":"

Cause: If your Switch crashes with Error code 2001-0123 (0xf601) and Title ID 420000000007E51A, you didn't successfully install Tesla-Menu or you aren't using the latest release of Tesla-Menu, re-follow the installation instructions above.

"},{"location":"homebrew/tesla-menu/#my-switch-crashes-when-i-open-an-overlay-via-tesla-menu","title":"My Switch crashes when I open an overlay via Tesla-Menu!:","text":"

Cause: If your Switch crashes with Error code 2001-0123 (0xf601) and Title ID 420000000007E51A, the overlay you're trying to open/use isn't up to date. Check its source repository for updates.

"},{"location":"homebrew/tesla-menu/#tesla-menu-is-only-showing-while-on-the-main-menu-and-not-in-game","title":"Tesla-Menu is only showing while on the main menu and not in-game!:","text":"

Cause: This issue will only happen when the Switch is docked, ensure that you've set the \"Screen size\" in System Settings > TV Output to 100%. Adjust your TV/monitor to fit the entirety of the screen of your Switch using its OSD (On Screen Display) or remote.

"},{"location":"homebrew/tesla-menu/#tesla-menu-isnt-opening-when-i-press-the-correct-button-combination","title":"Tesla-Menu isn't opening when I press the correct button combination!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"user_guide/getting_started/","title":"Getting Started","text":"

About modchipped Switch console users

If you already know you have a modchipped Switch console, you can skip ahead to the Modchip Introduction page.

"},{"location":"user_guide/getting_started/#finding-your-serial-number","title":"Finding your serial number","text":"

In the RCM path, we'll first determine if your Switch is vulnerable to fusee-gelee, the exploit we will be using to launch CFW.

The fusee-gelee vulnerability was discovered independently by different Switch hacking teams, who all independently released versions of the exploit in April 2018. Nintendo and NVIDIA were informed 90 days before these releases, and patched consoles were launched by mid-2018. NVIDIA publicly acknowledged the flaw in April as well. In July 2019, Nintendo announced updated consoles: the Switch Lite (HDH-001), and a new model of original Switch (HAC-001(-01)/\"V2\") with better battery life. Both of these new models use the Tegra X1+ (also known as Mariko, the T214, and T210B01) with a brand-new bootROM, and cannot currently be hacked without a modchip.

Patched and Mariko units can be identified by their serial number. This number can be found in the Settings applet at System -> Serial Information. You can also find it on the bottom of the console, adjacent to the charging port. However, it is always more accurate to use the serial reported in Settings instead, especially if you aren't the original owner of the console.

"},{"location":"user_guide/getting_started/#determining-if-your-switch-is-vulnerable","title":"Determining if your Switch is vulnerable","text":"

The community has crowdsourced a list of known serial numbers which are vulnerable to fusee-gelee.

Notice

If you are unsure if your serial is patched, you can test your console yourself following the instructions here.

"},{"location":"user_guide/getting_started/#serial-list","title":"Serial list","text":"

The following information is based on this GBATemp thread.

Serial Numbers Unpatched Potentially patched Patched XAW1 XAW10000000000 to XAW10074000000 XAW10074000000 to XAW10120000000 XAW10120000000 and up XAW4 XAW40000000000 to XAW40011000000 XAW40011000000 to XAW40012000000 XAW40012000000 and up XAW7 XAW70000000000 to XAW70017800000 XAW70017800000 to XAW70030000000 XAW70030000000 and up XAJ1 XAJ10000000000 to XAJ10020000000 XAJ10020000000 to XAJ10030000000 XAJ10030000000 and up XAJ4 XAJ40000000000 to XAJ40046000000 XAJ40046000000 to XAJ40060000000 XAJ40060000000 and up XAJ7 XAJ70000000000 to XAJ70040000000 XAJ70040000000 to XAJ70050000000 XAJ70050000000 and up XAK1 N/A XAK10000000000 and up N/A

If your serial number is not listed above, your device is not vulnerable to the fusee-gelee exploit.

"},{"location":"user_guide/getting_started/#version-table","title":"Version Table","text":"

Note

While the \"New\" Switch (HAC-001(-01)'s earliest possible firmware is 7.0.1, it is not vulnerable to d\u00e9j\u00e0 vu, the exploit used by Nereba and Caffeine, because of hardware differences from the \"old\" Switch (HAC-001).

Firmware Version Unpatched Switch systems (HAC-001) Patched Switch systems (HAC-001) \"New\" Switch (HAC-001(-01) Switch Lite (HDH-001) 1.0.0 Nereba or RCM N/A N/A N/A 2.0.0 - 3.0.2 Caffeine or RCM N/A N/A N/A 4.0.0 - 4.1.0 Caffeine or RCM Caffeine N/A N/A 5.0.0 - 7.0.0 RCM Modchip / Wait for CFW N/A N/A 7.0.1 RCM Modchip (no software exploit) Modchip (no software exploit) N/A 8.0.1 RCM Modchip (no software exploit) Modchip (no software exploit) Modchip (no software exploit) 8.1.0 and up RCM Modchip (no software exploit) Modchip (no software exploit) Modchip (no software exploit)

About Mariko Switch models

All Mariko (V2) Switch models (HAC-001(-01), HDH-001, HEG-001) are currently unhackable via software. If Modchip is listed as a method for your console model, then that means the device is currently unhackable without a hardware modification (modchip). If there are theoretical exploits that may lead to CFW or homebrew for that device, you also have the choice to \"wait\" for their release. These exploits may (and will likely) never launch and there is NO ETA, so what you choose to do is up to you. This guide assumes you have a functional modchip installation if you do have a Patched console.

"},{"location":"user_guide/getting_started/#console-preparation","title":"Console Preparation","text":""},{"location":"user_guide/getting_started/#important","title":"Important","text":"

Before setting up for homebrew, install at least one eShop title to utilize \"title takeover\", an Atmosph\u00e8re feature that allows homebrew to use more resources than they would normally have. Try downloading a free game (like Fallout Shelter), application (like YouTube), or a game demo (like 10 Second Run RETURNS). Running the Homebrew Menu via a game cartridge is an alternative, but requires the game to be inserted any time you want to launch the Homebrew Menu. Generally, title takeover doesn't permanently alter the donor game or application. Once you obtain any bootable title, you are prepared to continue on with the guide.

Frequently Asked Questions about this page "},{"location":"user_guide/getting_started/#if-your-switch-is-not-patched-click-the-button-below-to-follow-the-rcm-path-of-the-guide","title":"If your Switch is not patched, click the button below to follow the RCM path of the guide.","text":"

Continue to RCM

"},{"location":"user_guide/getting_started/#if-your-switch-is-patched-and-modchipped-click-the-button-below-to-follow-the-modchip-path-of-the-guide","title":"If your Switch is patched and modchipped, click the button below to follow the Modchip path of the guide.","text":"

Continue to Modchip introduction

"},{"location":"user_guide/all/cfw_environment/","title":"Choosing an Environment","text":""},{"location":"user_guide/all/cfw_environment/#cfw-on-sysmmc-vs-cfw-on-emummc","title":"CFW on sysMMC vs. CFW on emuMMC","text":"

A \"CFW Environment\" describes the context in which you are using custom firmware (CFW). As a reminder, custom firmware is never permanently installed, and runs independently on top of the system firmware. This means that you never have to commit to where you want to use custom firmware.

Atmosph\u00e8re temporarily patches HOS (HorizonOS, operating system of the switch) to enable customisations. You can choose what version of HOS it patches, each time you turn on your system. Each option has its own benefits and drawbacks.

Generally, sys- refers to the physical storage chip (sysMMC/eMMC) inside of your Switch. It stands for \"system\".

Generally, emu- refers to a virtual version of the eMMC (internal storage), running from a microSD card. It stands for \"emulated\".

For more information on terminology, please refer to the glossary.

You get to decide! Your choices are between using the internal storage or emulated storage. We will go over the advantages and disadvantages of either decision below.

"},{"location":"user_guide/all/cfw_environment/#emummc-cfw-recommended","title":"emuMMC CFW (Recommended)","text":""},{"location":"user_guide/all/cfw_environment/#cfw-on-emummc-has-the-following-benefits","title":"CFW on emuMMC has the following benefits:","text":""},{"location":"user_guide/all/cfw_environment/#the-following-drawbacks","title":"The following drawbacks:","text":""},{"location":"user_guide/all/cfw_environment/#and-the-following-considerations","title":"And the following considerations:","text":"

No parity between sysMMC and emuMMC (Game installs, save data, and system settings will be separated when you boot between the two)

"},{"location":"user_guide/all/cfw_environment/#in-particular-here-are-just-some-popular-use-cases-for-cfw-on-emummc","title":"In particular, here are just some popular use-cases for CFW on emuMMC:","text":"

If you prefer foolproofing, and a separation between official features and custom features, you may consider using CFW on emuMMC. In this guide, emuMMC is assumed to be utilised for offline play.

About this path

This path of the guide also includes sysCFW as launch option.

To proceed with CFW on emuMMC, click on the button below:

Continue with the emuMMC path

"},{"location":"user_guide/all/cfw_environment/#syscfw-cfw-on-sysmmc","title":"sysCFW (CFW on sysMMC)","text":""},{"location":"user_guide/all/cfw_environment/#cfw-on-sysmmc-has-the-following-benefits","title":"CFW on sysMMC has the following benefits:","text":""},{"location":"user_guide/all/cfw_environment/#the-following-drawbacks_1","title":"The following drawbacks:","text":""},{"location":"user_guide/all/cfw_environment/#in-particular-here-are-just-some-popular-use-cases-for-syscfw","title":"In particular, here are just some popular use-cases for sysCFW:","text":"

If you prefer snappiness, online play, and a seamless transition between official features and custom features, you may consider using CFW on sysMMC. In this guide, sysMMC is assumed to be utilised for online play.

To proceed with CFW on sysMMC, click on the button below:

Continue with the sysCFW path

"},{"location":"user_guide/all/cfw_environment/#modchip-instability","title":"Modchip Instability","text":"

About Modchipped Switch console users

Modchips directly infiltrate communication with the internal storage chip. Due to this, there are slight chances of NAND backups being tainted with corrupted data. If a bad backup is restored to sysNAND, the console can be bricked, and a modchip alone won't be able to fix it. To be safe, we recommend setting up an emuMMC on a console with a modchip, verify BOOT0/1 backups using tools like NXNandManager (Windows) or test NAND backups by running them as emuMMCs before you flash them to the sysNAND.

Frequently Asked Questions about this page "},{"location":"user_guide/all/launching_cfw/","title":"Launching CFW","text":"

Now that the preparation work is out of the way, we're finally ready to launch custom firmware on the Switch.

Unlike systems such as the DSi, Wii, or 3DS, Switch CFW is currently volatile. It will only work as long as your Switch is on. As soon as your Switch completely loses power for any reason (shutting down, battery dying, etc.), CFW will no longer be active and you will need to follow these instructions again.

Keep emuMMC offline at all times

Your emuMMC (emuNAND) should never connect to Nintendo. For online play, eShop browsing, or any other Nintendo online activity, use your sysNAND. Using both emuMMC and sysNAND online will likely result in a ban.

Instructions for emuMMCInstructions for sysCFW

Rebooting to Hekate

Once booted into CFW, you can easily get back to Hekate by holding the power button, and selecting Restart in the power menu or by using the \"reboot to payload\" homebrew app in the homebrew menu. (Note that while the Reboot to Payload app app does not work on modchipped Switch consoles, those already automatically run payloads upon reboot in the first place by default.)

"},{"location":"user_guide/all/launching_cfw/#instructions","title":"Instructions:","text":"
  1. From Hekate's Home menu, navigate to the Launch menu.
  2. Find Atmosphere FSS0 emuMMC and launch it.

Hekate is now booting into your emuMMC. To verify that your emuMMC launched properly, open System Settings and navigate to System. You should see AMS next to the version number (AMS indicating that you're booted into Atmosphere), as well as an E at the end (indicating you are booted into emuMMC).

"},{"location":"user_guide/all/launching_cfw/#instructions_1","title":"Instructions:","text":"
  1. From Hekate's Home menu, navigate to the Launch menu.
  2. Find Atmosphere FSS0 sysMMC and launch it.

Hekate is now booting into sysCFW. To verify that sysCFW launched properly, open System Settings and navigate to System. You should see AMS next to the version number (AMS indicating that you're booted into Atmosphere), as well as an S at the end (indicating you are booted into sysCFW).

"},{"location":"user_guide/all/launching_cfw/#launching-the-homebrew-menu","title":"Launching the Homebrew Menu","text":"

You will now be able to launch the Homebrew Menu by opening the album or by holding the R button while launching any game (including demos/cartridges), or application (e.g. YouTube/Hulu). If R is not held, the game or application will launch like normal.

A note about using the album for the Homebrew Menu

"},{"location":"user_guide/all/launching_cfw/#about-the-included-homebrew-apps","title":"About the included Homebrew apps","text":"

See the Homebrew tab for information about what the included Homebrew apps do and if you want to check out more Homebrew apps and read about sysmodules like MissionControl, ldn_mitm, sys-con and more.

If you wish to install more homebrew apps, place them (.nro files) in the switch folder on your microSD card.

"},{"location":"user_guide/all/launching_cfw/#installing-androidlinux","title":"Installing Android/Linux","text":"

If you've partitioned your microSD card for preparation of Android/Linux earlier, you can continue with the installation of Android/Linux here with the guides below:

Android installation guide Linux installation guide

Frequently Asked Questions about this page "},{"location":"user_guide/all/making_essential_backups/","title":"Making Essential Backups","text":""},{"location":"user_guide/all/making_essential_backups/#making-a-nand-backup","title":"Making a NAND Backup","text":"

Important

A NAND backup is crucial to have, it's a full backup of the internal storage of your Switch and can be used to restore the device to a working state in case of emergencies. DO NOT SKIP THIS STEP

Once the backup is finished, keep it somewhere safe. The best backup is the one you have but never need, and the worst backup is the one you need but never made. To save space, it's recommended to compress the end-result with a .zip file or something similar.

It's highly recommended that you use an microSD card that is formatted to FAT32 and has at least 32 gigabytes of space free. This will still work on smaller cards, but it's not ideal.

"},{"location":"user_guide/all/making_essential_backups/#instructions","title":"Instructions:","text":"
  1. Enter RCM and inject the Hekate payload.
  2. Use the touch screen or Joy-Cons to navigate to Tools > Backup eMMC.
  3. Tap on eMMC BOOT0 & BOOT1
  4. Tap on Close to continue, then tap on eMMC RAW GPP
  5. Go to the top right and press Close > Home.
  6. Navigate to Tools > USB tools > SD card and plug your Switch into your PC via USB.
  7. Copy the backup folder on your microSD card to a safe location on your PC.
  8. Once done, you may delete the backup folder from the root of your microSD card and eject the UMS device safely from within your computer's operating system, then return to Hekate's Home menu.
About microSD cards with less than 32GB of free space"},{"location":"user_guide/all/making_essential_backups/#on-fat32-formatted-microsd-cards-or-cards-that-have-less-than-32-gigabytes-of-space-available-the-nand-backup-will-be-split-into-1-or-2-gigabyte-parts","title":"On FAT32 formatted microSD cards or cards that have less than 32 gigabytes of space available, the NAND backup will be split into 1 or 2 gigabyte parts.","text":"

Hekate will stop producing these parts when it runs out of space. When this happens, do the following:

  1. Press OK when Hekate tells you to back up your stuff.
  2. Press Close > Close > USB Tools > SD Card and connect your Switch to your PC via USB.
  3. Your microSD card should now be accessible on your PC, move the backup folder on the root of your microSD card to a safe location on your PC.
  4. Eject the UMS device safely from within your computer's operating system and close the UMS window in Hekate.
  5. Press Close > Backup eMMC > eMMC RAW GPP and continue backing up your NAND.
  6. Repeat step 2-5 until the NAND is completely dumped.
  7. Once done, return to Hekate's Home menu.
"},{"location":"user_guide/all/making_essential_backups/#booting-into-cfw","title":"Booting into CFW","text":" Frequently Asked Questions about this page "},{"location":"user_guide/all/partitioning_sd/","title":"Partitioning the microSD Card and creating the emuMMC","text":""},{"location":"user_guide/all/partitioning_sd/#what-you-need","title":"What you need:","text":"

Partitioning WILL wipe all data on your SD card!

Hekate will prompt you to back it up with UMS before you begin, but in case you miss it, go to Tools > USB tools > SD card and plug your switch into your PC via USB, and backup the contents of your SD card. If you don't mind redownloading all the games stored on the SD card, you may skip this.

"},{"location":"user_guide/all/partitioning_sd/#instructions","title":"Instructions:","text":"
  1. Navigate to Tools > Partition SD card
  2. Set the emuMMC (RAW) slider to 29 FULL in the middle of the bar.
  3. Navigate to Next Step at the bottom right, then select Start in the menu that appears.
  4. From hekate's Home menu, navigate to emuMMC > Create emuMMC > SD Partition > Part 1 and wait for Hekate to complete creating the emuMMC.
  5. Close the emuMMC creation menu by navigating to the Close button, then navigate to Change emuMMC > SD RAW 1 and press the Close button twice in the top right to return to hekate's Home menu.
  6. Once done, go to Tools > USB tools > SD card and plug your Switch into your PC via USB.
  7. Continue with the next step of the guide.

Your microSD card is not showing up or Windows complaining about an unreadable drive

If you get the issue that Windows says the microSD card is unreadable and wants to format it, do not format! This is likely your emuMMC partition. After partitioning your SD, your microSD will show up as 2 drives on your PC. Use the accessible drive. If your microSD card isn't showing up at all, ensure that you're using a USB cable capable of data transfer and that, if you use Windows, Windows has assigned a drive letter to the FAT32 partition of your SD. If you still experience errors, join the NH-Discord server for support.

Continue to SD Preparations

"},{"location":"user_guide/all/partitioning_sd_syscfw/","title":"Formatting and/or partitioning the microSD Card","text":""},{"location":"user_guide/all/partitioning_sd_syscfw/#what-you-need","title":"What you need:","text":"

Partitioning WILL wipe all data on your SD card!

Hekate will prompt you to back it up with UMS before you begin, but in case you miss it, go to Tools > USB tools > SD card and plug your switch into your PC via USB, and backup the contents of your SD card. If you don't mind redownloading all the games stored on the SD card, you may skip this.

"},{"location":"user_guide/all/partitioning_sd_syscfw/#instructions","title":"Instructions:","text":"
  1. Navigate to Tools > Partition SD card
  2. Navigate to Next Step at the bottom right, then select Start in the menu that appears.
  3. Once done, go to Hekate's Home menu and then Tools > USB tools > SD card and plug your Switch into your PC via USB.
  4. Continue with the next step of the guide.

Your microSD card is not showing up

If your microSD card isn't showing up at all, ensure that you're using a USB cable capable of data transfer and that if you use Windows, Windows has assigned a drive letter to the FAT32 partition of your microSD card. If you still experience errors, join the NH-Discord server for support.

Continue to SD Preparations

"},{"location":"user_guide/all/sd_preparation/","title":"microSD Card preparations","text":""},{"location":"user_guide/all/sd_preparation/#information","title":"Information","text":"

We will now place the required files for the Atmosph\u00e8re custom firmware and some additional homebrew files on the microSD card.

Atmosphere has its own bootloader, called fusee. For the purposes of this guide we will be using Hekate instead, so that we can back up the system's NAND (internal storage) and take advantage of other advanced features in the future.

File name extensions

If you use Windows, you should enable file name extensions before continuing. See this link for a guide on how to do this.

"},{"location":"user_guide/all/sd_preparation/#what-you-need","title":"What you need:","text":""},{"location":"user_guide/all/sd_preparation/#instructions","title":"Instructions:","text":"
  1. Navigate to the accessible drive.
  2. Copy the contents of the Atmosph\u00e8re.zip file to the root of your microSD card.
  3. Copy the bootloader folder from the Hekate .zip file to the root of your microSD card.
  4. Copy the bootloader folder from the bootlogos.zip file to the root of your microSD card.
  5. Copy hekate_ipl.ini to the bootloader folder on your microSD card.
  6. Create a folder named hosts inside the atmosphere folder on your microSD card, and put emummc.txt in it.
  7. Copy JKSV.nro, ftpd.nro, NxThemesInstaller.nro, NX-Shell.nro and Goldleaf.nro to the switch folder on your microSD card.
  8. If you were already using your microSD card as a storage device for your games and backed up the Nintendo folder before partitioning your microSD card, please place it back on the root of your microSD card now.

    About emummc.txt

    Putting the emummc.txt file provided by this guide into /atmosphere/hosts will prevent your emuMMC (emuNAND) from connecting to Nintendo. Not doing this will likely result in a ban.

    Your microSD card should look similar to the image below. The Nintendo folder will not be present if your Switch has not already booted with the microSD card inserted and the emuMMC folder will not be present if you're following the sysCFW path of the guide/you haven't created an emuMMC! payload.bin will not be present if you're using an unpatched Switch.

Continue to Making Essential Backups

"},{"location":"user_guide/modchip/","title":"Introduction","text":""},{"location":"user_guide/modchip/#introduction-to-modchips","title":"Introduction to Modchips","text":""},{"location":"user_guide/modchip/#prerequisites","title":"Prerequisites","text":"

A modchip is a physical modification to the motherboard of your Switch. It cannot be installed without decent microsoldering experience. You can outsource this work to people who are willing to do the job for you, or you can also view the following guide if you are willing to install one yourself.

Modchip Installation guide

Note: The above guide is not hosted or supported by NH Server; we cannot provide support for reviving consoles ruined by inexperience.

"},{"location":"user_guide/modchip/#information","title":"Information","text":"

Unlike \"unpatched\" consoles, modchips enable CFW via CPU voltage glitching, which bypass bootROM firmware verifications. It allows a payload.bin file to be launched in place of BOOT0, loaded via a modchip firmware module named sdloader. This is much different from RCM and its exploit, fusee-gelee, which \"unpatched\" consoles use. Modchips allow any console, including all patched consoles, to run CFW!

"},{"location":"user_guide/modchip/#general-knowledge","title":"General knowledge","text":"

Patched Switch consoles, except certain original V1 consoles made from 2017 to mid-2018, are immune to the fusee-gelee exploit in RCM. Attempting to inject a payload on a Patched console will be unsuccessful.

Depending on your modchip's firmware, you may not be able to boot the console without a microSD card inserted. This means without a microSD inserted at all times, your Switch becomes unusable.

If you do turn on your Switch without a microSD card inserted, you should end up at a splash screen saying something along the lines of NO SD.

About modchips and their firmware versions

Some modchip firmwares (e.g., Spacecraft-NX, Hwfly-NX and the Picofly firmware) allow bypassing sdloader by holding one - or both - of the volume buttons during power-on, enabling normal boot without a microSD card. Not all modchips support manual firmware updates.

Modchipped Switch consoles allow untethered, coldboot CFW loading, directly entering custom firmware without external devices like dongles or jigs. This is in contrast to the tethered coldboot \"RCM\" entrypoint.

Running CFW on modchipped consoles is more simplistic, as it only requires you to have payload.bin present on the root of your microSD card when you turn on the system.

Furthermore, this guide assumes you have a functional modchip installation.

"},{"location":"user_guide/modchip/#important","title":"Important","text":"

If you do decide to follow the recommended emuMMC path later in the guide, make sure you disable Automatic Save Data Cloud backups/downloads beforehand as well as making sure the Switch is set as Primary Console.

Disclaimer

We ONLY support the Picofly modchip (the RP2040 Zero development board and the \"modchip variant\" of it). Installing a modchip safely is your responsibility, so if you don't trust yourself, get someone trusted to perform the install. There is always a risk of your Switch being rendered dysfunctional when messing with its hardware without proper experience. The NH-Discord server is not for fixing bad/failed modchip installations. We can give advice and installation tips for the installation as long as it's for a Picofly modchip.

Continue to Preparing Hekate

Frequently Asked Questions about this page "},{"location":"user_guide/modchip/preparing_hekate/","title":"Payload and bootloader folder placement","text":"

To get ready for formatting and/or partitioning your microSD card, we will need to prepare and place the required files on the microSD card.

Following the guide will delete everything on your microSD card!

Later in the guide, you will be formatting and/or partitioning your microSD card. This means that all data on the microSD card will be lost. Now is a good time to back up all of its data to a safe place (for example, on your PC or external drive) so that you can restore it later. You can do this by following the instructions below.

"},{"location":"user_guide/modchip/preparing_hekate/#what-you-need","title":"What you need:","text":""},{"location":"user_guide/modchip/preparing_hekate/#instructions","title":"Instructions:","text":"
  1. Extract the Hekate .zip to a location on your computer.
  2. Insert your microSD card into your computer.
  3. Copy the Nintendo folder (and any other important data) from the root of your microSD card to a safe space on your device.
  4. Inside of the extracted Hekate folder, you will find the bootloader folder and the hekate_ctcaer_(version).bin payload.
  5. Copy the bootloader folder and hekate_ctcaer_(version).bin payload to the root of your microSD card.
  6. Rename the hekate_ctcaer_(version).bin payload to payload.bin
  7. Insert your microSD card back into your Switch, then turn it on.
  8. You should now be loaded into the Hekate GUI (Nyx), pictured below, within seconds.

Warning

If your Switch does not load into the Hekate GUI, or shows a No SD Card/No Payload screen when turning on the console, ensure that you inserted your microSD card and that Hekate's payload.bin is on the root of the microSD card.

Continue to choosing your CFW environment

Frequently Asked Questions about this page

Q: Can I use a microSD card with existing data, or does it need to be formatted specifically for this process? A: It is recommended that you use a microSD that is already formatted as FAT32 before starting. In addition, it is important that the microSD card does not have any data from other Switch consoles already on it.

Q: What makes Hekate the recommended choice in this guide? A: Hekate is a polished, multi-purpose bootloader for the Switch. It has the tools to facilitate simple usage of custom firmware and custom operating systems, and aids with organisation and formatting later on in this guide.

Q: How do you pronounce \"Hekate\"? A: Hekate comes from Greek. The most commonly accepted pronunciations are \"HEK-ate\", \"HEK-uh-tee\", and \"hek-AH-tay\".

Q: What role does the /bootloader folder play in the overall functionality of Hekate? A: The bootloader folder contains crucial parts of Hekate that can't fit in the injectable RCM/modchip payload, such as Nyx; Hekate's touch-enabled GUI. If you start Hekate without these files on your microSD, Hekate's functionality will be severely limited.

Q: How often should I check for updates to Hekate, and what benefits do newer releases bring to the process? A: Nintendo Homebrew's #announcements channel will automatically poll for updates to Atmosph\u00e8re and Hekate, letting you know when updates are available for them. In general, you'll want to look for updates whenever a major Switch system update is launched, as major updates will stop Horizon from booting until Hekate and Atmosph\u00e8re are updated accordingly.

Q: Does this process have any effect on the Switch's system or data? A: No, nothing in the guide has had any permanent effect on the Switch so far.

"},{"location":"user_guide/rcm/","title":"RCM","text":""},{"location":"user_guide/rcm/#about-rcm","title":"About RCM","text":"

RCM (short for ReCovery Mode) is a pre-boot mode for Tegra processors that allows NVIDIA and Nintendo to send the Switch tiny programs for various internal uses. On unpatched consoles, once a payload was sent, then quickly copied into the memory buffer behind the stack, it overflowed the memory buffer into the stack. This leads to a \"smashed stack\" and unsigned code execution within a bootROM context, giving us access to nearly everything on the console. We use it here to launch Atmosph\u00e8re.

If you choose the emuMMC path introduced later in the guide, it'll be important to disable the Automatic Save Data Cloud function beforehand, as well as making sure the Switch is set as the primary console.

Continue to Entering RCM

Frequently Asked Questions about this page "},{"location":"user_guide/rcm/entering_rcm/","title":"Entering RCM","text":""},{"location":"user_guide/rcm/entering_rcm/#entering-rcm","title":"Entering RCM","text":"

The Switch's Tegra X1 processor has a recovery mode referred to shorthand as RCM, intended to be useless for end-users. Fortunately, due to the fusee-gelee vulnerability, this special mode acts as our gateway into CFW.

Methods to enter RCM can require nothing more than household items (not recommended) to affordable tools ($5-10) available on platforms like AliExpress and Amazon. Avoid the \"metal bridge\" or \"paperclip method\" as it can damage your console. You can also consider 3D printing necessary tools.

Patched Switch

Note that patched units can enter RCM, but it is not possible to send a payload on those systems. Also note that RCM is a different recovery mode than the one accessed by holding Volume Up, Volume Down and powering on your console.

Information about the methods below

The order of methods on this page is in the order of ease. The easiest method to immediately accomplish is the RCM Jig method. The most advanced/difficult methods are mentioned in the other tabs and should not be attempted by most people as they require voiding your warranty and/or soldering. USING A PAPERCLIP OR TIN FOIL CAN/WILL DAMAGE YOUR CONSOLE, DO NOT DO THIS!

"},{"location":"user_guide/rcm/entering_rcm/#instructions","title":"Instructions:","text":"
  1. Power off the Switch and short the pins on the Joy-Con rail using one of the methods listed below.
  2. While holding the Volume Up button, press the Power button once while holding Volume Up.
  3. Once your Switch is in RCM, remove the RCM jig (if applicable) and continue with the next page of the guide by clicking on the button at the bottom of this page.
RCM JigSoldered Joy-Con Pads - Physical RCM ButtonSoldered Joy-Con Pads - 7 & 10Soldered Joy-Con Pads - 9 & 10Bent Joy-Con Pins (Not recommended)

Some jig designs use paperclips, inheriting the same risks as the \"metal bridge\" / \"paperclip method\" and should not be done.

Once you have successfully entered RCM, you can take the jig out of the Joy-Con rail.

This method is similar to the \"metal bridge\" / \"paperclip method\", but is more reliable and safer in many cases. Jigs hold a wire in place so the correct pins (10 and a ground) are reliably shorted.

This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart.

This method comes to us from the mind of pbanj on Discord. All pictures of this method in action were provided by him, with some supplementary images provided by eip618 on Discord.

The goal of this method is to open the right Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however you will be soldering wires to pins 7 and 10 (shown below) and wiring them to the \"rail release button\" at the top back of the right Joy-Con.

This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart.

The goal of this method is to open the right handed Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however the goal is to solder pins 7 and 10 (shown below) together with a surface-mount 0805 10k resistor. Apart from using a physical switch/button, this is currently considered the safest method that involves soldering to pads.

This method will result in the right Joy-Con being seen as \"detached\" while physically connected to the Switch, so it will not be able to charge. This method may result in the Joy-Con being permanently detected as wireless if you update the Joy-Con firmware while this mod is installed. In the latter case, fixing this requires opening up the Joy-Con and reseating the battery. It is recommended to solder pads 7 and 10 together with a resistor instead.

This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart.

The goal of this method is to open the right Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however the goal is to solder pads 9 and 10 (seen below) together. This can either be done using a small wire, or directly bridging the pads with solder.

This method will result in the right Joy-Con being detected as in wireless mode while attached to the Switch, and this method may result in the Joy-Con being permanently detected as wireless if you update the Joy-Con firmware while this mod is installed. In the latter case, fixing this requires opening up the Joy-Con and reseating the battery.

This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart.

The goal of this method is to open the right handed Joy-Con to the point that you can reach the contact pads easily, and use a thin object such as a knife to gently bend pin 9 and 10 (shown below) slightly up and towards each other so they touch, shorting them.

Continue to Sending a Payload

"},{"location":"user_guide/rcm/entering_rcm/#the-rcm-jig-pictured-below-is-the-model-we-recommend","title":"The RCM jig pictured below is the model we recommend:","text":"

Making your own RCM Jig

If you plan on making your own jig, the second image lays out the right Joy-Con pad out on the console. Make sure your jig NEVER touches pin 4. Pin 4 provides 5 volts of power to the Joy-Con, and can permanently damage the rail or console if shorted.

"},{"location":"user_guide/rcm/entering_rcm/#joycon-pad-pinout","title":"JoyCon pad pinout:","text":"

In order to start this method you will want to take two lengths of wire, and wrap one end of each into a small circle.

"},{"location":"user_guide/rcm/entering_rcm/#wire-reference","title":"Wire reference:","text":"

You will then want to take the circular end of one of the wires and add a small amount of solder, keeping it mostly flat (ONLY DO THIS TO ONE OF THE WIRES!). You will then glue this wire down to the below point on the rail release button. Make sure glue doesn't cover the top of the solder/wire as it will act as a contact point. Also, ensure that you leave enough space for the button to function correctly. Try pushing the button from the outside and observing its travel path so that you can see where and how you should safely glue the solder glob.

"},{"location":"user_guide/rcm/entering_rcm/#joy-con-button","title":"Joy-Con button:","text":""},{"location":"user_guide/rcm/entering_rcm/#joy-con-button_1","title":"Joy-Con button:","text":"

The first wire should now be in place as seen by the green circle below. The second wire does not need any solder, instead you will hold it in place using the screw as shown by the red circle in the picture below.

"},{"location":"user_guide/rcm/entering_rcm/#joy-con-button-in-place","title":"Joy-Con button in place:","text":"

Pressing the Joy-Con button in you should now notice the solder point you created making contact with the piece of metal held in by the screw. Once you have these elements in place you want to connect one wire to pad 7 and the other to pad 10 (it doesn't matter which is which). After that you have successfully created an RCM button on your Joycon. You will now need to hold down the Joycon release button when attempting to boot RCM.

"},{"location":"user_guide/rcm/entering_rcm/#successful-installation","title":"Successful installation:","text":""},{"location":"user_guide/rcm/entering_rcm/#joycon-pad-pinout_1","title":"JoyCon pad pinout:","text":"

Here is an example from stuck_pixel from the ReSwitched Discord server.

"},{"location":"user_guide/rcm/entering_rcm/#successful-installation_1","title":"Successful installation:","text":""},{"location":"user_guide/rcm/entering_rcm/#joycon-pad-pinout_2","title":"JoyCon pad pinout:","text":"

Below is an example from yami0666 from our Discord server.

"},{"location":"user_guide/rcm/entering_rcm/#successful-soldering-job","title":"Successful soldering job:","text":""},{"location":"user_guide/rcm/entering_rcm/#joycon-pinout","title":"JoyCon pinout:","text":"

Here is an example from sonlen on our Discord server.

"},{"location":"user_guide/rcm/entering_rcm/#bent-joy-con-pins","title":"Bent Joy-Con pins:","text":""},{"location":"user_guide/rcm/sending_payload/","title":"Sending a Payload","text":"

If you are here to test if your Switch is patched

Make sure you have put your device into RCM and downloaded Hekate. Once finished, if your console is not patched, continue with the \"Preparing Hekate\" section at the bottom of the page.

Now that the device is in RCM, we will need to send it a payload. The methods are mostly the same but slightly differ depending on what hardware you have available.

WindowsLinuxMacAndroidChromebook

If nothing happens after you send the payload

If your console's screen remains black after you've sent Hekate (or any other payload), it's possible your payload was corrupted, or that your console is patched. If your payload injector program shows that zero or 0x0000 bytes were sent, then it is patched. This isn't a one-time glitch or up for debate; it is patched. Consider an alternate method that isn't via RCM.

"},{"location":"user_guide/rcm/sending_payload/#what-you-need","title":"What you need:","text":""},{"location":"user_guide/rcm/sending_payload/#instructions","title":"Instructions:","text":"
  1. Install and run TegraRcmGUI.
  2. Navigate to the Settings tab, then press Install Driver and follow the on-screen instructions.
  3. Connect your Switch in RCM to your PC using the USB cable.
  4. Navigate to the Payload tab of TegraRcmGUI.
  5. Press the file button next to Inject payload, and navigate to and select the hekate_ctcaer_X.X.X.bin file.
  6. Click Inject payload to launch the payload you selected.
"},{"location":"user_guide/rcm/sending_payload/#driver-installation-with-zadig","title":"Driver installation with Zadig","text":"

Follow these steps if you face issues when installing the driver with TegraRcmGUI. You will need the latest version of Zadig.

  1. Launch Zadig. In the Options menu, be sure that List All Devices is enabled.
  2. Connect your Switch in RCM to your PC using the USB cable.
  3. In Zadig, select \"APX\" in the device list.
  4. Select libusbK (v3.1.0.0) in the driver list.
  5. Click Install Driver and wait for the installation to finish.
"},{"location":"user_guide/rcm/sending_payload/#what-you-need_1","title":"What you need:","text":""},{"location":"user_guide/rcm/sending_payload/#instructions_1","title":"Instructions:","text":"
  1. Download and run the payload injector from your terminal. You will need to run the injector as root, unless you follow the instructions at Linux injection without root.
  2. Connect your Switch in RCM to your PC using the USB cable.
  3. Run fusee-nano with: ./fusee-nano /path/to/hekate-ctcaer_X.X.X.bin
"},{"location":"user_guide/rcm/sending_payload/#what-you-need_2","title":"What you need:","text":""},{"location":"user_guide/rcm/sending_payload/#instructions_2","title":"Instructions:","text":"
  1. Download the latest release of CrystalRCM.
  2. Connect your Switch in RCM to your PC using the USB cable, make sure it's also detected in CrystalRCM.
  3. Mount the CrystalRCM.(version).dmg file, open the mounted disk image in File Explorer and copy the CrystalRCM.app file inside of the mounted disk image to any location on your Mac.
  4. Open the CrystalRCM.app app, then click Payload... and select the hekate_ctcaer_X.X.X.bin file.
  5. Once selected, click Push!. The payload should now be injected successfully.
"},{"location":"user_guide/rcm/sending_payload/#what-you-need_3","title":"What you need:","text":""},{"location":"user_guide/rcm/sending_payload/#instructions_3","title":"Instructions:","text":"
  1. Copy the hekate_ctcaer .bin file from the Hekate .zip file to a location on your phone.
  2. Launch Rekado on your phone.
  3. Navigate to Payloads (Signified by a downwards arrow with a line), then press the + button at the bottom right.
  4. Navigate to your hekate_ctcaer .bin file and tap it to add it to Rekado's menu.
  5. Optional, but recommended: Navigate to Rekado's settings in the top right and enable Hide bundled.
  6. Connect your Switch in RCM to your phone using the USB cable.
  7. If prompted, grant Rekado access to the Switch.
  8. Select the hekate_ctcaer_X.X.X.bin file in the dialog that pops up.
"},{"location":"user_guide/rcm/sending_payload/#what-you-need_4","title":"What you need:","text":"

About USB-C

If your Chromebook has a USB-C port, do note that this will not work using a C-C cable.

"},{"location":"user_guide/rcm/sending_payload/#instructions_4","title":"Instructions:","text":"
  1. Go to the injection website and scroll all the way down
  2. Select the \"Upload Payload\" option and upload the hekate_ctcaer_X.X.X.bin file from the Hekate .zip file.
  3. Connect your Switch in RCM to your Chromebook using the USB cable.
  4. Select \"Do the thing\". A pop-up will appear. Click the APX option.
  5. Press the Connect button and the payload will be injected.
"},{"location":"user_guide/rcm/sending_payload/#preparing-hekate","title":"Preparing Hekate","text":"

We will prepare the microSD card for formatting/partitioning before going to the next page. Removing the microSD card while in Hekate is safe so turning off the console is not necessary and keeping it on will save time that would be spent reinjecting the payload.

Following the guide will delete everything on your microSD card!

Later in the guide, you will be formatting and/or partitioning your microSD card. This means that all data on the microSD card will be lost. Now is a good time to back up all of its data to a safe place (for example, on your PC or external drive) so that you can restore it later. You can do this by following the instructions below.

"},{"location":"user_guide/rcm/sending_payload/#what-you-need_5","title":"What you need:","text":""},{"location":"user_guide/rcm/sending_payload/#instructions_5","title":"Instructions:","text":"
  1. Without turning your Switch off, remove the microSD card from the Switch.
  2. Insert your microSD card into your computer.
  3. Copy the Nintendo folder (and any other important data) from the root of your microSD card to a safe space on your device.
  4. Extract the Hekate .zip to a location on your computer
  5. Inside the extracted Hekate folder you will find a folder named bootloader.
  6. Copy the bootloader folder to the root of your microSD card.
  7. Put your microSD card back into your Switch.
  8. Use volume up and volume down to navigate the Hekate menu. Hover over 'reload' and press the power button to select. Your screen should now have the Hekate GUI (Nyx) pictured below.

Continue to choosing your CFW environment

"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":""},{"location":"#nh-switch-guide","title":"NH Switch Guide","text":"

The NH Switch Guide is a collaboration from Nintendo Homebrew's Discord community, getting you from a stock Switch to Atmosph\u00e8re.

For live support with this guide, visit us in #switch-assistance-1 or #switch-assistance-2 over at the NH-Discord server.

Prepare to set aside a minimum of an hour to follow this guide. This is specifically for you to carefully read and understand each page for safe execution for the safety and longevity of your Switch console. Some required device backups can also take around ten to thirty minutes to create, depending on your Switch model and your microSD card specifications.

"},{"location":"#what-is-custom-firmware","title":"What is Custom Firmware?","text":"

Custom FirmWare (\u201cCFW\u201d) is complex software that modifies the function of a device's operating system, also known as a system firmware. Atmosph\u00e8re, for example, patches the Switch OS (named Horizon) on the fly.

Custom firmware can be considered a holy grail in terms of device modding, as it allows nearly limitless control and freedoms than you would get with more primitive \"userland\" access. \u00a0

"},{"location":"#what-is-homebrew","title":"What is homebrew?","text":"

Homebrew refers to unofficial software written by hobbyists for locked down systems, like the Nintendo Switch. Homebrew can include original games, emulators, save-editing tools, and much, much more!

On the Switch in particular, you need CFW to run almost all available homebrew. Some first-gen (\"V1\") consoles can run homebrew for free, while all other (\"patched\") consoles require specialized hardware installation beforehand. \u00a0

"},{"location":"#what-are-custom-operating-systems","title":"What are custom operating systems?","text":"

Custom operating systems (OSes) are alternative system software installations, like Android or Linux, that install alongside the default Switch OS. These are usually perfect for powerusers who want to extend the functionality of their console beyond that of a gaming console, transforming Nintendo Switch to a full-fledged hybrid tablet or desktop. These custom OSes run completely independent of the Switch OS, meaning that anything you do in a custom OS cannot be reported back to Nintendo. Custom operating systems are not \"emulated\"; they run natively on the Switch's Tegra X1 SoC.

This guide will give you the opportunity to set aside space on your microSD to install these custom OSes onto, if you desire. It is important to note that these installations are optional; you do not need to install any custom OS in order to complete this guide and install Atmosph\u00e8re. However, it is better to decide sooner rather than later, as the installation process involves formatting your microSD card.

"},{"location":"#what-does-this-guide-install","title":"What does this guide install?","text":"

This guide has the end-goal of taking a completely unmodified Switch from stock firmware to a custom firmware named Atmosph\u00e8re.

fusee-gelee is currently the most widespread software entrypoint of launching custom firmware. It utilizes a vulnerability in the bootROM of the first-generation Switch systems, allowing us to boot the console via any payload we choose, instead of only ones that Nvidia and Nintendo authorize. The result allows full baremetal control over your console, including system storage backups, recovery, custom firmwares, and custom operating systems. \u00a0

"},{"location":"#what-can-i-do-with-custom-firmware","title":"What can I do with custom firmware?","text":"

More on this can be found later on in the guide.

"},{"location":"#what-do-i-need-to-know-before-starting","title":"What do I need to know before starting?","text":"

As previously mentioned, this guide will take a minimum of an hour to fully complete. Please responsibly set aside this time before your first run-through.

Acknowledge that EVERY time you modify your system, there is always the potential for an UNRECOVERABLE brick. A brick is a damaged device that no longer functions; something that becomes as \"useful as a brick\". On the Switch, they're rare, but still a possibility -- so make sure you read the directions carefully before performing them, and follow them EXACTLY.

This guide will work on first-generation (V1) and modchipped Switch consoles in all regions on any firmware version.

You will need one of the following in order to successfully follow this guide:

If you choose the emuMMC path introduced later in the guide, you will also need a microSD card that is at least 128 gigabytes. In this path, it'll be important to disable the Automatic Save Data Cloud function beforehand, as well as making sure the Switch is set as the primary console. If you must use a smaller microSD card, you can choose to use the sysCFW path, after assuming the risks involved.

Additionally, on a V1 \"unpatched\" Switch, you will need a way to access the ReCovery Mode (this will be further explained in the \"Entering RCM section\"). While possible with household tools, you may want to shell money out for a \"jig\" that inserts into the Joy-Con rail to reliably enable RCM.

Upon completion, you will lose no data, ending up with everything that you started with (games, Nintendo Account, saves, etc will be preserved). Your functionalities will only be enhanced.

Keep your device plugged in and charged throughout the entire process to avoid data loss or damage from an unexpected power-off.

Custom firmware is not permanently installed and does not change anything on your console simply by running it. It will be entirely unloaded upon rebooting the console. However, CFW does allow you to make permanent changes to your console at your own will, so be responsible and cautious with the abilities enabled by CFW.

It is advised that you read the entire guide from start to finish one or more times before actually running through the guide with your system.

If something doesn't make sense while you follow the guide, please reach out and ask for clarification rather than fumble around on your own. If your English isn't the best, use a translator such as Google Translate to submit your questions, so we can help.

"},{"location":"#click-the-button-below-to-get-started-with-the-guide","title":"Click the button below to get started with the guide!","text":"

Continue to Getting Started

Note: We are not currently, historically, or will we ever be, associated with Anton Retro, sthetix, Ely M., or other derivative or YouTube/TikTok guide publishers, especially any that claim relation to us.

Furthermore, we resent any implication to the contrary.

Frequently Asked Questions about this page "},{"location":"about/","title":"About","text":""},{"location":"about/#about-this-guide","title":"About this guide","text":"

This guide was written by community members of the Nintendo Homebrew Discord Server.

You can find this guide on GitHub, It is licensed under the ISC license.

"},{"location":"about/#guide-writers-maintainers","title":"Guide Writers / Maintainers","text":"

Thank you to everyone else that contributed to the guide on GitHub, but special thanks to noirscape.

"},{"location":"about/#developers","title":"Developers","text":""},{"location":"faq/","title":"FAQ","text":""},{"location":"faq/#what-firmware-versions-are-currently-hackable","title":"What firmware versions are currently hackable?","text":"

Currently two hardware revisions of the Switch exist. Any Switch bought or manufactured before the middle of 2018 has a bootrom bug that allows us to run code regardless of the firmware version on the Switch. When Nintendo updates the system, however, CFW will usually need an update to account for it. This bug cannot be fixed by Nintendo once the console leaves the factory, unless the console is sent in for repairs. This means that all current and future firmwares will be able to launch CFW through this exploit on the old hardware revision.

Any console purchased after approximately August 2018 is likely to be patched. This includes the latest units on shelves, referred to as 'red box' or 'Mariko'. Mariko is hardware patched, but may come on a vulnerable firmware. Currently the only way to know if your Switch is hackable is by trying to send the payload in RCM. Even with this exploit fixed, many Switch consoles on 8.0.1 and below will be hackable to some degree in the future (see Should I update my Firmware? for much more detailed information). The serial number on the back of the box can possibly tell you which consoles are patched and which aren't. See here for an up to date list.

"},{"location":"faq/#how-do-i-use-fusee-gelee-how-can-i-boot-into-rcm","title":"How do I use fusee-gelee? How can I boot into RCM?","text":"

To launch CFW through the fusee-gelee, the Switch needs to be in \"ReCovery Mode\"(RCM). The easiest way to enter RCM is by grounding pin 10 in the right joycon rail and holding VOL+ on boot. Several methods and designs to do this exist, see our guide for more information. Once the Switch is in RCM it needs to be connected to either a computer, phone or dongle to send the exploit and the payload.

This procedure needs to happen every time the Switch boots from a completely \"off\" state, otherwise the Switch will boot into the stock firmware.

"},{"location":"faq/#what-makes-a-good-jig-good-can-i-use-a-paperclip","title":"What makes a good jig good? Can I use a paperclip?","text":"

Most people prefer to use 3d-printed jigs to enter RCM. These jigs are made in a way that they slide into the right joycon rail and have a piece of connected wire that then bridges pin 10 and one of the grounded pins on the Switch. A lot of different designs for these jigs exist, but it is important to understand, that these jigs can damage the Switch if they are made in a bad way.

Since the wire in the jig is supposed to touch the pads inside the Switch's joycon rail, it is important to use wire that is thin, not rigid and bent/not pointy. Paperclips make for potentially dangerous jigs, as they are made out of a hard material, are rigid and pointy and can easily scratch off the pads inside the Switch. A good jig uses 32Gauge(0.2mm diameter) wire and is bent in a way that the end of the wire does not scratch the pads. You can download and 3d-print your own jig and use the pictures on this website to guide you on how to bend the wire correctly. Premade jigs can be found on online marketplaces for cheap.

"},{"location":"faq/#is-there-an-easier-way-to-enter-rcm","title":"Is there an easier way to enter RCM?","text":"

To enter RCM more comfortably a solution called \"AutoRCM\" exists. Once set up, this method will always boot the Switch into RCM, even without a jig or holding any buttons. This works by \"bricking\" the Switch in a controlled manner. The Switch detects that something is wrong and boots into RCM to get repaired. The big downside of this method is, that it is impossible to boot the Switch without a computer, phone or dongle, as it will never boot into stock firmware by itself, and that it requires an SD card with the proper CFW files on it at all times. In addition, if the battery of the Switch is completely drained, the Switch will need to charge to at least 10% in Hekate before launching Atmosphere, otherwise the Switch will refuse to boot due to the low battery. Charging in RCM is not recommended as this is very slow. AutoRCM can be reversed, but it is advised to keep a working NAND and BOOT0/1 backup before using it.

Many Android-phones are able to send the exploit to the Switch, making them a perfect portable way to launch CFW. Different designs for portable dongles exist, ranging from Raspberry Pi Zero and Arduino projects to internal dongles, that work completely autonomous. The latter should only be done by advanced users, as it requires soldering onto the Switch mainboard itself.

"},{"location":"faq/#should-i-update-my-firmware","title":"Should I update my Firmware?","text":"

If your Switch is one of the new hardware revisions that patched the exploit in RCM and you are on firmware 7.0.1 or lower, you should not update if you want to have CFW in the forseeable future.

If your Switch is one of the older hardware revisions and you don't mind having to use jigs/hardmods/AutoRCM and sending the exploit via computer, phone or dongle everytime you want to launch into CFW then it is completely safe to update. If you want the chance to maybe, one day, not have to use a external device, then it is recommended to stay on a FW as low as possible. Beware that this means that you potentially need to wait for a very long time (months to years) for this to happen, if ever. Private exploits to launch CFW over the Browser are known to exist for firmwares up to 7.0.1.

Downgrading on the Switch is possible, but it requires using AutoRCM and a custom bootloader payload to bypass the Switch's several hardware anti-downgrade mechanisms. This will not work on an unpatched system, and is practically useless for most users. On every boot the Switch firmware checks how many e-fuses have been burned and how many e-fuses the Switch expects to be burned. Major updates to the Switch, or updates in which a large vulnerability has been patched, irreversibly burn one of the Switch's 64 \"e-fuses\". If the Switch ever detects that more e-fuses have been burned than expected (meaning a downgrade happened), it will refuse to boot. Replacing e-fuses is not an option. You can find more information about fuses here Atmosph\u00e8reis maintained to support the latest firmware updates on unpatched units. The situation for patched and new units is as follows:

A method to update without burning e-fuses exists, but, like downgrading, it forces you to use AutoRCM and sending the exploit via USB every time, as booting into the stock firmware even once would instantly burn the e-fuse. Note that other anti-downgrade mechanisms exist, making it for example impossible to boot game carts on a firmware below 4.1/9.0.0 if the Switch has ever launched a game on firmware 4.1+/9.0.0+. This can only be worked around by completely disabling the game cart slot while on 4.1/9.0.0 or greater, which is similarly impractical for most users.

"},{"location":"faq/#is-it-safe-to-use-homebrew-will-i-get-banned","title":"Is it safe to use homebrew? Will I get banned?","text":"

The Switch comes with a lot of telemetry, and has been called a \"telemetry monster\" by several prominent developers. As long as the Switch is connected to the internet, Nintendo gets a report about a lot of different actions and states and has the option to log or act on them. Even if the Switch is offline and connects to the internet at a later point, Nintendo still recieves information about what happened while the Switch was disconnected.

To disable some of this telemetry, it is advised to disable the sending of error reports in the System Settings of the Switch. Additionally if you live in the EU you can set the \"do not share\" option on Nintendo's website to prevent your Switch from sending a lot of telemetry, although the effectiveness of this is questionable.

Nintendo still receives a lot of information, even with those options disabled. We also cannot know if Nintendo decides to look for something in the logs and ban people in retrospect. They have also shown to expand their telemetry options with every other firmware update.

Currently all bans have been for very obvious and intrusive actions, specifically:

Atmosph\u00e8re stops some, but not all of Nintendo's telemetry, and prevents crash reports from being sent. This means Nintendo can't tell if anything, including homebrew or modded games crashed, and Atmosph\u00e8re dumps the crash log to the microSD card to help homebrew developers. However, Nintendo still receives information about what is being played, and general system report information.

Atmosph\u00e8re is not a silver bullet, and this does not mean that Nintendo won't decide to ban people for harmless homebrew in the future. If you are scared to get banned then don't use homebrew for now. Atmosph\u00e8re now supports emuMMC (emuNAND): a copy of Switch system software, run entirely from the microSD card instead. This erases ban risks due to the fact that emuMMC is run in a quarantined, offline state, not touching the internal memory. You are still able to boot into original firmware to play online.

For patched units reliant on deja-vu, sysNAND will always have to be on a firmware below 4.1. For Switch versions from 5.0 to 7.0.1 deja-vu isn't quite out yet but will come eventually. (Also please note that firmwares 8.0.0+ will never work with deja-vu) You can use an updated emuMMC dedicated to online/clean play, while your sysNAND is used offline for custom firmware.

We do not recommend the use of ReiNX or SX OS for many reasons, primary among them that they use lots of assets from Atmosph\u00e8re and offer no real benefit that Atmosph\u00e8re does not offer anyway. We also do not recommend Kosmos, as its large amount of extras on top of regular Atmosph\u00e8re make it difficult to troubleshoot strange issues. All of these alternative CFWs also tend to use non-conventional setups which can cause issues that make it difficult to troubleshoot, which is another reason we prefer using Atmosphere. Additionally, it is advised to use 90DNS which blocks connections to any Nintendo servers. If you use an emuNAND for CFW and keep your sysNAND clean for playing online, you should use 90DNS on your emuNAND. Note: Keeping your emuNAND \"dirty\" and your sysNAND \"clean\" pertains primarily to those using the RCM exploit. Users employing Nereba or Caffeine will do the opposite.

"},{"location":"faq/#what-formats-can-homebrew-come-in","title":"What formats can homebrew come in","text":"

Homebrew can come in two different formats, namely in nro files and in bin files.

Homebrew risks Be careful with launching downloaded homebrew! If you don't know the source, it's best not to launch it. Homebrew can potentially damage your system! Atmosph\u00e8re provides protections against common bricking methods, but these are not guaranteed to always work!

"},{"location":"faq/#what-microsd-cardformat-should-i-use","title":"What microSD card/format should I use?","text":"

microSD cards that are 32GB or smaller can be used for homebrew, but are not recommended as these will not permit you to have a full NAND dump and/or an emuMMC on them.

The recommended microSD card size is 128GB. This will permit you to make a full NAND dump as well as having enough space to run an emuNAND in the future while also having adequate space for homebrew.

The recommended filesystem format is FAT32. While the Switch supports exFAT through an additional update from Nintendo, this filesystem is prone to corruption and as a result is not advisable.

"},{"location":"faq/#fake-microsd-cards","title":"Fake microSD cards","text":"

Do not buy microSD cards from sites like eBay. These microSD cards are often fake and do not have the advertised amount of storage and will result in data corruption if used. Amazon has had some problems with fake microSD cards, so we recommend buying them at a physical store. Even on trustworthy sites, always, always check reviews on a product before buying!!

If you suspect your microSD card is fake or damaged, see the instructions here to verify the integrity of your microSD card.

"},{"location":"faq/#my-homebrew-apps-are-not-showing-up-in-the-homebrew-menu","title":"My Homebrew apps are not showing up in the Homebrew menu!","text":"

This is an issue primarily affecting macOS users, but may occur on other devices as well. If you are able to launch the homebrew menu, but you are not seeing some or any of your Homebrew apps, you may need to unset the archive bit with Hekate.

  1. Inject the Hekate payload using your favorite payload injector.
  2. Click on Tools on the top menu bar.
  3. In the bottom left corner click on Arch Bit \u2022 AutoRCM \u2022 Touch \u2022 Pkg1/2.
  4. Click on Fix Archive bit - this might take a while.
  5. Press Close in the top right corner.
  6. Press Home in the top menu bar to get back from where you started.
  7. Follow the instructions at the Launching CFW page here to launch Atmosphere.
"},{"location":"fusee_gelee/","title":"Fusee gelee","text":""},{"location":"fusee_gelee/#vulnerability-disclosure-fusee-gelee","title":"Vulnerability Disclosure: Fus\u00e9e Gel\u00e9e","text":"

This report documents Fus\u00e9e Gel\u00e9e, a coldboot vulnerability that allows full, unauthenticated arbitrary code execution from an early bootROM context via Tegra Recovery Mode (RCM) on NVIDIA's Tegra line of embedded processors. As this vulnerability allows arbitrary code execution on the Boot and Power Management Processor (BPMP) before any lock-outs take effect, this vulnerability compromises the entire root-of-trust for each processor, and allows exfiltration of secrets e.g. burned into device fuses.

Quick vitals: \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Reporter: Katherine Temkin (@ktemkin) Affiliation: ReSwitched (https://reswitched.tech) E-mail: k@ktemkin.com Affects: Tegra SoCs, independent of software stack Versions: believed to affect Tegra SoCs released prior to the T186 / X2 Impact: early bootROM code execution with no software requirements, which can lead to full compromise of on-device secrets where USB access is possible Disclosure public disclosure planned for June 15th, 2018"},{"location":"fusee_gelee/#vulnerability-summary","title":"Vulnerability Summary","text":"

The USB software stack provided inside the boot instruction rom (IROM/bootROM) contains a copy operation whose length can be controlled by an attacker. By carefully constructing a USB control request, an attacker can leverage this vulnerability to copy the contents of an attacker-controlled buffer over the active execution stack, gaining control of the Boot and Power Management processor (BPMP) before any lock-outs or privilege reductions occur. This execution can then be used to exfiltrate secrets and to load arbitrary code onto the main CPU Complex (CCPLEX) \"application processors\" at the highest possible level of privilege (typically as the TrustZone Secure Monitor at PL3/EL3).

"},{"location":"fusee_gelee/#public-disclosure-notice","title":"Public Disclosure Notice","text":"

This vulnerability is notable due to the significant number and variety of devices affected, the severity of the issue, and the immutability of the relevant code on devices already delivered to end users. This vulnerability report is provided as a courtesy to help aid remediation efforts, guide communication, and minimize impact to users.

As other groups appear to have this or an equivalent exploit-- including a group who claims they will be selling access to an implementation of such an exploit-- it is the author and the ReSwitched team's belief that prompt public disclosure best serves the public interest. By minimizing the information asymmetry between the general public and exploit-holders and notifying the public, users will be able to best assess how this vulnerability impacts their personal threat models.

Accordingly, ReSwitched anticipates public disclosure of this vulnerability: * If another group releases an implementation of the identified vulnerability; or * On June 15th, 2018, whichever comes first.

"},{"location":"fusee_gelee/#vulnerability-details","title":"Vulnerability Details","text":"

The core of the Tegra boot process is approximated by the following block of pseudo-code, as obtained by reverse-engineering an IROM extracted from a vulnerable T210 system:

// If this is a warmboot (from \"sleep\"), restore the saved state from RAM.\nif (read_scratch0_bit(1)) {\n  restore_warmboot_image(&load_addr);\n}\n// Otherwise, bootstrap the processor.\nelse\n{\n  // Allow recovery mode to be forced by a PMC scratch bit or physical straps.\n  force_recovery = check_for_rcm_straps() || read_scratch0_bit(2);\n\n  // Determine whether to use USB2 or USB3 for RCM.\n  determine_rcm_usb_version(&usb_version);\n  usb_ops = set_up_usb_ops(usb_version);\n  usb_ops->initialize();\n\n  // If we're not forcing recovery, attempt to load an image from boot media.\n  if (!force_recovery)\n  {\n    // If we succeeded, don't fall back into recovery mode.\n    if (read_boot_configuration_and_images(&load_addr) == SUCCESS) {\n      goto boot_complete;\n    }\n  }\n\n  // In all other conditions\n  if (read_boot_images_via_usb_rcm(<snip>, &load_addr) != SUCCESS) {\n     /* load address is poisoned here */\n  }\n}\n\nboot_complete:\n  /* apply lock-outs, and boot the program at address load_address  */\n

Tegra processors include a USB Recovery Mode (RCM), which we can observe to be activated under a number of conditions: * If the processor fails to find a valid Boot Control Table (BCT) + bootloader on its boot media; * If processor straps are pulled to a particular value e.g. by holding a button combination; or * If the processor is rebooted after a particular value is written into a power management controller scratch register.

USB recovery mode is present in all devices, including devices that have been production secured. To ensure that USB recovery mode does not allow unauthenticated communications, RCM requires all recovery commands be signed using either RSA or via AES-CMAC.

The bootloader's implementation of the Tegra RCM protocol is simple, and exists to allow loading a small piece of code (called the miniloader or applet) into the bootloader's local Instruction RAM (IRAM). In a typical application, this applet is nvtboot-recovery, a stub which allows further USB communications to bootstrap a system or to allow system provisioning.

The RCM process is approximated by the following pseudo-code, again obtained via reverse engineering a dumped IROM from a T210:

// Significantly simplified for clarity, with error checking omitted where unimportant.\nwhile (1) {\n  // Repeatedly handle USB standard events on the control endpoint EP0.\n  usb_ops->handle_control_requests(current_dma_buffer);\n\n  // Try to send the device ID over the main USB data pipe until we succeed.\n  if ( rcm_send_device_id() == USB_NOT_CONFIGURED ) {\n    usb_initialized = 0;\n  }\n  // Once we've made a USB connection, accept RCM commands on EP1.\n  else {\n    usb_initialized = 1;\n\n    // Read a full RCM command and any associated payload into a global buffer.\n    // (Error checking omitted for brevity.)\n    rcm_read_command_and_payload();\n\n    // Validate the received RCM command; e.g. by checking for signatures\n    // in RSA or AES_CMAC mode, or by trivially succeeding if we're not in\n    // a secure mode.\n    rc = rcm_validate_command();\n    if (rc != VALIDATION_PASS) {\n      return rc;\n    }\n\n    // Handle the received and validated command.\n    // For a \"load miniloader\" command, this sanity checks the (validated)\n    // miniloader image and takes steps to prevent re-use of signed data not\n    // intended to be used as an RCM command.\n    rcm_handle_command_complete(...);\n  }\n}\n

It is important to note that a full RCM command and its associated payload are read into 1) a global buffer, and 2) the target load address, respectively, before any signature checking is done. This effectively grants the attacker a narrow window in which they control a large region of unvalidated memory.

The largest vulnerability surface area occurs in the rcm_read_command_and_payload function, which accepts the RCM command and payload packets via a USB bulk endpoint. For our purposes, this endpoint is essentially a simple pipe for conveyance of blocks of binary data separate from standard USB communications.

The rcm_read_command_and_payload function actually contains several issues-- of which exactly one is known to be exploitable:

uint32_t total_rxd  = 0;\nuint32_t total_to_rx = 0x400;\n\n// Loop until we've received our full command and payload.\nwhile (total_rxd < total_to_rx) {\n  // Switch between two DMA buffers, so the USB is never DMA'ing into the same\n  // buffer that we're processing.\n  active_buffer = next_buffer;\n  next_buffer   = switch_dma_buffers();\n\n  // Start a USB DMA transaction on the RCM bulk endpoint, which will hopefully\n  // receive data from the host in the background as we copy.\n  usb_ops->start_nonblocking_bulk_read(active_buffer, 0x1000);\n\n  // If we're in the first 680-bytes we're receiving, this is part of the RCM\n  // command, and we should read it into the command buffer.\n  if ( total_rxd < 680 ) {\n    /* copy data from the DMA buffer into the RCM command buffer until we've\n       read a full 680-byte RCM command */\n\n    // Once we've received the first four bytes of the RCM command,\n    // use that to figure out how much data should be received.\n    if ( total_rxd >= 4 )\n    {\n      // validate:\n      //  -- the command won't exceed our total RAM\n      //     (680 here, 0x30000 in upper IRAM)\n      //  -- the command is >= 0x400 bytes\n      //  -- the size ends in 8\n      if ( rcm_command_buffer[0] >= 0x302A8u\n              || rcm_command_buffer[0] < 0x400u\n              || (rcm_command_buffer[0] & 0xF) != 8 ) {\n        return ERROR_INVALID_SIZE;\n      } else  {\n        left_to_rx = *((uint32_t *)rcm_command_buffer);\n      }\n    }\n  }\n\n  /* copy any data _past_ the command into a separate payload\n     buffer at 0x40010000 */\n  /* -code omitted for brevity - */\n\n  // Wait for the DMA transaction to complete.\n  // [This is, again, simplified to convey concepts.]\n  while(!usb_ops->bulk_read_complete()) {\n\n    // While we're blocking, it's still important that we respond to standard\n    // USB packets on the control endpoint, so do that here.\n    usb_ops->handle_control_requests(next_buffer);\n  }\n}\n

Astute readers will notice an issue unrelated to the Fus\u00e9e Gel\u00e9e exploit: this code fails to properly ensure DMA buffers are being used exclusively for a single operation. This results in an interesting race condition in which a DMA buffer can be simultaneously used to handle a control request and a RCM bulk transfer. This can break the flow of RCM, but as both operations contain untrusted data, this issue poses no security risk.

To find the actual vulnerability, we must delve deeper, into the code that handles standard USB control requests. The core of this code is responsible for responding to USB control requests. A control request is initiated when the host sends a setup packet, of the following form:

Field \u00a0 \u00a0 \u00a0 \u00a0 Size \u00a0 \u00a0 Description direction 1b if '1', the device should respond with data type 2b specifies whether this request is of a standard type or not recipient 5b encodes the context in which this request should be considered; for example, is this about a DEVICE or about an ENDPOINT? request 8b specifies the request number value 16b argument to the request index 16b argument to the request length 16b specifies the maximum amount of data to be transferred

As an example, the host can request the status of a device by issuing a GET_STATUS request, at which point the device would be expected to respond with a short setup packet. Of particular note is the length field of the request, which should limit -- but not exclusively determine-- the maximum amount of data that should be included in the response. Per the specification, the device should respond with either the amount of data specified or the amount of data available, whichever is less.

The bootloader's implementation of this behavior is conceptually implemented as follows:

// Temporary, automatic variables, located on the stack.\nuint16_t status;\nvoid *data_to_tx;\n\n// The amount of data available to transmit.\nuint16_t size_to_tx   = 0;\n\n // The amount of data the USB host requested.\nuint16_t length_read  = setup_packet.length;\n\n/* Lots of handler cases have omitted for brevity. */\n\n// Handle GET_STATUS requests.\nif (setup_packet.request == REQUEST_GET_STATUS)\n{\n  // If this is asking for the DEVICE's status, respond accordingly.\n  if(setup_packet.recipient == RECIPIENT_DEVICE) {\n      status     = get_usb_device_status();\n      size_to_tx = sizeof(status);\n  }\n  // Otherwise, respond with the ENDPOINT status.\n  else if (setup_packet.recipient == RECIPIENT_ENDPOINT){\n      status     = get_usb_endpoint_status(setup_packet.index);\n      size_to_tx = length_read; // <-- This is a critical error!\n  }\n  else {\n    /* ... */\n  }\n\n  // Send the status value, which we'll copy from the stack variable 'status'.\n  data_to_tx = &status;\n}\n\n// Copy the data we have into our DMA buffer for transmission.\n// For a GET_STATUS request, this copies data from the stack into our DMA buffer.\nmemcpy(dma_buffer, data_to_tx, size_to_tx);\n\n// If the host requested less data than we have, only send the amount requested.\n// This effectively selects min(size_to_tx, length_read).\nif (length_read < size_to_tx) {\n  size_to_tx = length_read;\n}\n\n// Transmit the response we've constructed back to the host.\nrespond_to_control_request(dma_buffer, length_to_send);\n

In most cases, the handler correctly limits the length of the transmitted responses to the amount it has available, per the USB specification. However, in a few notable cases, the length is incorrectly always set to the amount requested by the host: * When issuing a GET_CONFIGURATION request with a DEVICE recipient. * When issuing a GET_INTERFACE request with a INTERFACE recipient. * When issuing a GET_STATUS request with a ENDPOINT recipient.

This is a critical security error, as the host can request up to 65,535 bytes per control request. In cases where this is loaded directly into size_to_tx, this value directly sets the extent of the memcpy that follows-- and thus can copy up to 65,535 bytes into the currently selected dma_buffer. As the DMA buffers used for the USB stack are each comparatively short, this can result in a very significant buffer overflow.

To validate that the vulnerability is present on a given device, one can try issuing an oversized request and watch as the device responds. Pictured below is the response generated when sending a oversized GET_STATUS control request with an ENDPOINT recipient to a T124:

A compliant device should generate a two-byte response to a GET_STATUS request-- but the affected Tegra responds with significantly longer response. This is a clear indication that we've run into the vulnerability described above.

To really understand the impact of this vulnerability, it helps to understand the memory layout used by the bootROM. For our proof-of-concept, we'll consider the layout used by the T210 variant of the affected bootROM:

The major memory regions relevant to this vulnerability are as follows: * The bootROM's execution stack grows downward from 0x40010000; so the execution stack is located in the memory immediately preceding that address. * The DMA buffers used for USB are located at 0x40005000 and 0x40009000, respectively. Because the USB stack alternates between these two buffers once per USB transfer, the host effectively can control which DMA buffer is in use by sending USB transfers. * Once the bootloader's RCM code receives a 680-byte command, it begins to store received data in a section of upper IRAM located at address 0x40010000, and can store up to 0x30000 bytes of payload. This address is notable, as it is immediately past the end of the active execution stack.

Of particular note is the adjacency of the bootROM's execution stack and the attacker-controlled RCM payload. Consider the behavior of the previous pseudo-code segment on receipt of a GET_STATUS request to the ENDPOINT with an excessive length. The resulting memcpy: * copies up to 65,535 bytes total; * sources data from a region starting at the status variable on the stack and extending significantly past the stack -- effectively copying mostly from the attacker-controllable RCM payload buffer * targets a buffer starting either 0x40005000 or 0x40009000, at the attacker's discretion, reaching addresses of up to 0x40014fff or 0x40018fff

This is a powerful copy primitive, as it copies from attacker controlled memory and into a region that includes the entire execution stack:

This would be a powerful exploit on any platform; but this is a particularly devastating attack in the bootROM environment, which does not: * Use common attack mitigations such as stack canaries, ostensibly to reduce complexity and save limited IRAM and IROM space. * Apply memory protections, so the entire stack and all attacker controlled buffers can be read from, written to, and executed from. * Employ typical 'application-processor' mitigation strategies such as ASLR.

Accordingly, we now have: 1. The capability to load arbitrary payloads into memory via RCM, as RCM only validates command signatures once payload receipt is complete. 2. The ability to copy attacker-controlled values over the execution stack, overwriting return addresses and redirecting execution to a location of our choice.

Together, these two abilities give us a full arbitrary-code execution exploit at a critical point in the Tegra's start-up process. As control flow is hijacked before return from read_boot_images_via_usb_rcm, none of the \"lock-out\" operations that precede normal startup are executed. This means, for example, that the T210 fuses-- and the keydata stored within them-- are accessible from the attack payload, and the bootROM is not yet protected.

"},{"location":"fusee_gelee/#exploit-execution","title":"Exploit Execution","text":"

The Fus\u00e9e Launcher PoC exploits the vulnerability described on the T210 via a careful sequence of interactions: 1. The device is started in RCM mode. Device specifics will differ, but this is often via a key-combination held on startup. 2. A host computer is allowed to enumerate the RCM device normally. 3. The host reads the RCM device's ID by reading 16 bytes from the EP1 IN. 4. The host builds an exploit payload, which is comprised of: 1. An RCM command that includes a maximum length, ensuring that we can send as much payload as possible without completing receipt of the RCM payload. Only the length of this command is used prior to validation; so we can submit an RCM command that starts with a maximum length of 0x30298, but which fills the remaining 676 bytes of the RCM command with any value. 2. A set of values with which to overwrite the stack. As stack return address locations vary across the series, it's recommended that a large block composed of a single entry-point address be repeated a significant number of times, so one can effectively replace the entire stack with that address. 3. The program to be executed (\"final payload\") is appended, ensuring that its position in the binary matches the entry-point from the previous step. 4. The payload is padded to be evenly divisible by the 0x1000 block size to ensure the active block is not overwritten by the \"DMA dual-use\" bug described above. 5. The exploit payload is sent to the device over EP1 OUT, tracking the number of 0x1000-byte \"blocks\" that have been sent to the device. If this number is even, the next write will be issued to the lower DMA buffer (0x40005000); otherwise, it will be issued to the upper DMA buffer (0x40009000). 6. If the next write would target the lower DMA buffer, issue another write of a full 0x1000 bytes to move the target to the upper DMA buffer, reducing the total amount of data to be copied. 7. Trigger the vulnerable memcpy by sending a GET_STATUS IN control request with an ENDPOINT recipient, and a length long enough to smash the desired stack region, and preferably not longer than required.

A simple host program that triggers this vulnerability is included with this report: see fusee-launcher.py. Note the restrictions on its function in the following section.

"},{"location":"fusee_gelee/#proof-of-concept","title":"Proof of Concept","text":"

Included with this report is a set of three files: * fusee-launcher.py -- The main proof-of-concept accompanying this report. This python script is designed to launch a simple binary payload in the described bootROM context via the exploit. * intermezzo.bin -- This small stub is designed to relocate a payload from a higher load address to the standard RCM load address of 0x40010000. This allows standard RCM payloads (such as nvtboot-recover.bin) to be executed. * fusee.bin -- An example payload for the Nintendo Switch, a representative and well-secured device based on a T210. This payload will print information from the device's fuses and protected IROM to the display, demonstrating that early bootROM execution has been achieved.

Support note: Many host-OS driver stacks are reluctant to issue unreasonably large control requests. Accordingly, the current proof-of-concept includes code designed to work in the following environments: * 64-bit linux via xhci_hcd. The proof-of-concept can manually submit large control requests, but does not work with the common ehci_hcd drivers due to driver limitations. A rough rule of thumb is that a connection via a blue / USB3 SuperSpeed port will almost always be handled by xhci_hcd. * macOS. The exploit works out of the box with no surprises or restrictions on modern macOS.

Windows support would require addition of a custom kernel module, and thus was beyond the scope of a simple proof-of-concept.

To use this proof-of-concept on a Nintendo Switch: 1. Set up an Linux or macOS environment that meets the criteria above, and which has a working python3 and pyusb as well as libusb installed. 2. Connect the Switch to your host PC with a USB A -> USB C cable. 3. Boot the Switch in RCM mode. There are three ways to do this, but the first-- unseating its eMMC board-- is likely the most straightforward: 1. Ensure the Switch cannot boot off its eMMC. The most straightforward way to to this is to open the back cover and remove the socketed eMMC board; corrupting the BCT or bootloader on the eMMC boot partition would also work. 2. Trigger the RCM straps. Hold VOL_UP and short pin 10 on the right JoyCon connector to ground while engaging the power button. 3. Set bit 2 of PMC scratch register zero. On modern firmwares, this requires EL3 or pre-sleep BPMP execution. 4. Run the fusee-launcher.py with an argument of fusee.bin. (This requires intermezzo.bin to be located in the same folder as fusee-launcher.py.)

```\nsudo python3 ./fusee-launcher.py fusee.bin\n```\n

If everything functions correctly, your Switch should be displaying a collection of fuse and protected-IROM information:

"},{"location":"fusee_gelee/#recommended-mitigations","title":"Recommended Mitigations","text":"

In this case, the recommended mitigation is to correct the USB control request handler such that it always correctly constrains the length to be transmitted. This has to be handled according to the type of device:

It seems likely that OEMs producing T210-based devices may move to T214 solutions; it is the hope of the author that the T214's bootROM shares immunity with the T186. If not, patching the above is a recommended modification to the mask ROM and/or ipatches of the T214, as well.

"},{"location":"extras/","title":"Extras","text":"

Several extra guides that are not required for basic usage can be found here.

They are listed in the sidebar as well.

"},{"location":"extras/#commonly-used-guides","title":"Commonly used guides:","text":""},{"location":"extras/adding_udev/","title":"Linux - Run payload injector without root","text":"

This section details how to add an udev rule to let you send a payload to your Switch without needing to use sudo.

The following instructions only work if you have a system that implements udev. Most modern distros come with systemd already installed, which includes a udev implementation.

Do the following instructions while your Switch is not connected to your computer.

For Arch Linux users:

The package android-udev includes rules that will also allow for payload injection to work without root. Do note this also allows Android specific commands such as adb and fastboot to also work without root (as is the intention of it.)

"},{"location":"extras/adding_udev/#option-1-manually-adding-rules-and-group","title":"Option 1: Manually adding rules and group","text":"

The following instructions are not for beginners. Only do this if you understand what you are doing.

"},{"location":"extras/adding_udev/#creating-a-new-group","title":"Creating a new group","text":"

To start, we will create a new group and add ourselves to it. The group the Nintendo Switch device will be owned by on Linux will be set to this group.

  1. Open a terminal.
  2. Enter the following command: sudo groupadd nintendo_switch.
  3. Enter your password when prompted.
  4. Enter the following command: sudo usermod -a -G nintendo_switch $USER. Make sure that the G is capitalized!
  5. Close the terminal.
"},{"location":"extras/adding_udev/#adding-a-udev-rule","title":"Adding a udev rule","text":"

Next we're gonna add a new udev rule. udev is a device manager for the linux kernel. The rule we're gonna specify is that if the Switch is connected in RCM, the group the Switch belongs to will be the group we made in the previous section.

  1. Open a terminal.
  2. Change to the root user with the following command: sudo -i. Enter your password when prompted.
  3. Enter the following command: mkdir -p /etc/udev/rules.d.
  4. Enter the following command: echo 'SUBSYSTEMS==\"usb\", ATTRS{manufacturer}==\"NVIDIA Corp.\", ATTRS{product}==\"APX\", GROUP=\"nintendo_switch\"' > /etc/udev/rules.d/10-switch.rules.
  5. Enter the following command: udevadm control --reload.
  6. Enter the following command: udevadm trigger.
  7. Logout and log back in.

You should now be able to run the payload sender without having to use sudo.

"},{"location":"extras/adding_udev/#option-2-installing-a-package-with-the-rules","title":"Option 2: Installing a package with the rules","text":"

These rules will actually allow ANY user to access your Switch via USB, not only your user.

You may just follow the instructions at nx-udev, or if you're on Ubuntu / Debian:

  1. Download nx-udev_latest_all.deb.
  2. Open a terminal in the same directory as your download.
  3. Run sudo dpkg -i nx-udev_latest_all.deb to install the package

You should now be able to run the payload injector and homebrew with USB communication without having to use sudo.

"},{"location":"extras/alternate_bootsetups/","title":"Alternate boot setups","text":"

If you need to troubleshoot something, or need to try a different boot setup, read on.

Do I need any of these?

Unless you are experiencing problems with booting or Atmosph\u00e8re itself, it's strongly recommended to use the main guide instead of these. They are provided for the sake of completeness.

"},{"location":"extras/alternate_bootsetups/#chainloading-fusee-from-hekate","title":"Chainloading Fusee from Hekate","text":""},{"location":"extras/alternate_bootsetups/#instructions","title":"Instructions:","text":"
  1. Insert your Switch's microSD card into your PC.
  2. Copy the contents of the Atmosphere .zip file to the root of your microSD card.
  3. Copy the bootloader folder from the Hekate .zip file to the root of your microSD card.
  4. Copy fusee.bin to the sd:/bootloader/payloads folder on your microSD card.
  5. The setup is complete, you can inject the Hekate payload (Unpatched Switch users) or place the Hekate payload on the root of your microSD card and rename it to payload.bin (Modchipped Switch users).
  6. Navigate to and select Payloads > fusee.bin.
"},{"location":"extras/alternate_bootsetups/#using-fusee-without-hekate","title":"Using Fusee without Hekate","text":"

This method will not work for Modchipped Switch users.

"},{"location":"extras/alternate_bootsetups/#instructions_1","title":"Instructions:","text":"
  1. Insert your Switch's microSD card into your PC.
  2. Copy the contents of the Atmosphere .zip file to the root of your microSD card.
  3. The setup is complete, you can inject the fusee.bin payload.
"},{"location":"extras/autorcm/","title":"AutoRCM","text":""},{"location":"extras/autorcm/#autorcm","title":"AutoRCM","text":"

AutoRCM causes the console to believe it is bricked, and will automatically launch RCM upon boot for recovery purposes, without needing a jig. As RCM is a recovery mode from repair specialists, this is an intended feature from the device developer, though is also considered a softbrick. If you aren't careful, misuse of AutoRCM can lead to real damage, especially with units that cannot inject custom RCM payloads (like Mariko hardware). Please take care when using it. Please keep in mind that the console can no longer boot on its own, so you'll need a PC, phone, or other payload injector to start the console after a coldboot.

If you don't have a BOOT0/1 backup yet...

You really want to kill your console, huh? If you haven't made a BOOT0/1 backup yet, it is recommended to make one right now.

  1. Boot into Hekate
  2. Go to Tools, and select Backup eMMC
  3. Then tap eMMC BOOT0 & BOOT1 and let the process complete.
"},{"location":"extras/autorcm/#disadvantages-of-autorcm","title":"Disadvantages of AutoRCM","text":"

There are some disadvantages you should consider before installing AutoRCM:

"},{"location":"extras/autorcm/#advantages-of-autorcm","title":"Advantages of AutoRCM","text":"

AutoRCM can be used for good as well:

Other information...

"},{"location":"extras/autorcm/#enabling-autorcm","title":"Enabling AutoRCM","text":"

If, despite all of the information above, you still wish to enable AutoRCM, and understand the risks, do the following:

  1. Boot into Hekate
  2. Go to Tools
  3. At the bottom of the page, tap Arch Bit \u2022 AutoRCM \u2022 Touch \u2022 Pkg1/2
  4. Then tap AutoRCM. It will show a little ON next to the option once you have done this.
"},{"location":"extras/blocking_nintendo/","title":"Blocking Nintendo servers","text":"

This page will help you set up a method to block all communication with Nintendo. This will stop any updates and reporting to Nintendo, but it will prevent use of the eShop and online games.

"},{"location":"extras/blocking_nintendo/#instructions-ams-dns-redirection","title":"Instructions (AMS DNS redirection)","text":"

You can configure Atmosph\u00e8re to automatically redirect any requests directed to Nintendo to nothing instead. Documentation about this feature can be found here. The section below will help you set up DNS redirection on your emummc. Note that this will only apply when you are using cfw.

"},{"location":"extras/blocking_nintendo/#what-you-need","title":"What you need:","text":""},{"location":"extras/blocking_nintendo/#setup","title":"Setup:","text":"
  1. Enter RCM and inject the Hekate payload.
  2. Navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  3. Enter the atmosphere folder.
  4. If it doesn't exist already, create a folder named hosts in the atmosphere folder.
  5. Copy the emummc.txt file into the hosts folder.
  6. Eject the UMS device safely from within your computer's operating system and boot into CFW.

Verify functionality

You can verify the functionality of the DNS redirection by booting into emummc (or sysmmc if you applied the config to sys), and powering off after.

A report will be generated in sd:/atmosphere/logs called dns_mitm_startup.log. If this starts with the following, the dns redirection is active

"},{"location":"extras/blocking_nintendo/#instructions-90dns","title":"Instructions (90DNS)","text":"

You can add a custom DNS to your WiFi connection that will block all communication with Nintendo's servers. We will be using 90DNS, a community-run custom DNS server. If you prefer, you can run your own DNS server following the instructions on the GitLab repository.

Enter the console's System Settings, and then proceed to the Internet tab. From here:

"},{"location":"extras/blocking_nintendo/#setting-up-a-new-connection-via-wi-fi","title":"Setting up a new connection via Wi-Fi","text":"

Open WiFi networks without a password

Not all WiFi networks require a password to connect. If your network does not use one, you can use the Manual Setup option, located at the very bottom of the Internet Settings screen below all other WiFi networks.

  1. Select your WiFi network from the list of networks.
  2. Enter an incorrect password that is 8 characters long and press OK.
  3. After a few moments of attempting to connect, the console will display a connection error.
  4. Press OK to close the error message.
  5. Press Close when it offers to display more details about the error.
  6. When asked if you want to re-enter the password, pick View Settings.
  7. Change DNS Settings to Manual.
  8. Pick the server that is the closest to your location out of the below chart and enter its Primary and Secondary DNS into your connection settings.
  9. Enter the correct password for your WiFi connection.
  10. Save the settings and test the connection.

"},{"location":"extras/blocking_nintendo/#editing-an-existing-wifi-connection","title":"Editing an existing WiFi connection","text":"
  1. Select your existing WiFi network from the list of networks.
  2. Select Change Settings.
  3. Pick the server that is the closest to your location out of the below chart and enter its Primary and Secondary DNS into your connection settings.
  4. Save the settings and test the connection.

"},{"location":"extras/blocking_nintendo/#using-homebrew-to-set-90dns-on-all-existing-wifi-networks","title":"Using homebrew to set 90DNS on all existing WiFi networks","text":"
  1. Download switch-90dns-setter and put it in the /switch folder.
  2. Launch CFW and open the homebrew menu.
  3. Launch 90DNS Setter.
  4. Press X to apply 90DNS to all WiFi networks.
  5. Press Y to reboot the Switch.
  6. Check in system settings if networks have a custom DNS applied.
Location Primary DNS Secondary DNS Europe (Server located in France) 163.172.141.219 207.246.121.77 America (Server located in the USA) 207.246.121.77 163.172.141.219

Example for a 90DNS connection with the Europe settings:

"},{"location":"extras/blocking_nintendo/#testing-if-you-can-reach-nintendo","title":"Testing if you can reach Nintendo","text":""},{"location":"extras/blocking_nintendo/#testing-via-the-eshop-stock","title":"Testing via the eShop (Stock)","text":"
  1. Open the eShop. Wait until it either opens or displays an error.
  2. If it displays \"Unable to display page.\", you seem to have blocked Nintendo's servers.
"},{"location":"extras/blocking_nintendo/#testing-via-a-homebrew-app-cfw","title":"Testing via a homebrew app (CFW)","text":"
  1. Download the latest release of the 90DNS Tester
  2. Place the Switch_90DNS_tester.nro in the switch folder on your SD.
  3. Enter the homebrew menu and run the 90DNS Tester.
  4. After the test finished it should look similar to the below picture, with every nintendo domain being blocked.
"},{"location":"extras/game_modding/","title":"Game modding with LayeredFS","text":"

LayeredFS, a tool built into Atmosphere, allows you to (temporarily) replace a game's assets with your own, modified assets as long as you're booted into CFW.

"},{"location":"extras/game_modding/#usage-instructions","title":"Usage instructions","text":"

Check the section below to find your mod's folder/file structure, then install your mod accordingly.

Checking folder/file structures

Atmosphere 0.9.4 and below

Note: On Atmosph\u00e8re 0.9.4 and below, contents is called titles

In the image below, you can see a Batman skin mod being used in The Legend of Zelda: Breath of the Wild. In this example, the title ID and mod installation directory would be sd:/atmosphere/contents/0100509005AF2000/.

"},{"location":"extras/game_modding/#additional-notes","title":"Additional notes","text":"

The romfs folder contains modified assets in the way the game would normally read them. romfs stands for \"romFileSystem\", which is quite literally what the filesystem (folder and file structure) of the game you're modding consists of internally.

If you want to disable mods on launch of a game, hold the L button before launching the game and launch the game normally, L is the default button to do this. This will disable all modifications (like cheats and mods) that you have configured for your game.

While most games only require Atmosphere's LayeredFS to enable game modding, there are some games that may require more specialized setup. For example:

"},{"location":"extras/game_modding/#troubleshooting","title":"Troubleshooting","text":""},{"location":"extras/game_modding/#my-game-crashes-upon-launch","title":"My game crashes upon launch!","text":"

If your game crashes during launch, hold the L button to see if disabling all modifications for your game solves the issue. If so, delete the most recently added mod(s) for your game.

"},{"location":"extras/game_modding/#my-mods-arent-showing-up-in-game","title":"My mods aren't showing up in-game!","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"extras/glossary/","title":"Glossary of common hacking terms","text":"

This section is dedicated to explaining a number of common terms that are used when hacking the Nintendo Switch as well as linking a number of resources that can help fledgling developers or curious users.

"},{"location":"extras/glossary/#hacking-terms","title":"Hacking terms","text":"

The following list is in alphabetical order.

"},{"location":"extras/glossary/#resources","title":"Resources","text":"

The resources below are for users and developers interested in developing Homebrew or for those that want to get a more technical understanding of the various concepts.

"},{"location":"extras/installing_android/","title":"Installing Android","text":"

This page will detail the setup of Switchroot Android (Android 11) for the Nintendo Switch.

Have you partitioned your microSD card?

This page assumes that you've followed our guide to set up Atmosph\u00e8re. Before starting, your microSD card needs partitions for Android set up via Hekate. If you didn't do so, see this page to install Android alongside Atmosph\u00e8re. If you don't want to use Switch CFW and only Android, check the Official Switchroot Documentation instead. If you already have Android fully installed, do not follow this guide, as your current installation would be erased.

Looking for Android 10?

An unfortunate bug with clocking on Android 11 results in degraded performance for Erista (v1) units on Android 11. Android 10 installation is not covered here, but there is a guide on the Switchroot Wiki. However, Android 11 is the currently supported version and uses much more updated drivers.

Looking for Android 14?

Recently, Android 14 was released for the Switch. You can follow the official LineageOS guide to install Android 14.

The Switch lacks a cell modem; simply installing Android does not grant your Switch access to cell towers. This means, unlike most Android devices, you will not be able to make emergency phone calls, and you will still need Wi-Fi to access the Internet. You can, however, natively run Android programs and games.

This page will also not detail things such as rooting and overclocking; external links to these types of additions can be found in the Power User Guides section at the bottom of this page.

"},{"location":"extras/installing_android/#requirements","title":"Requirements:","text":""},{"location":"extras/installing_android/#instructions","title":"Instructions:","text":""},{"location":"extras/installing_android/#step-0-preparation","title":"Step 0: Preparation","text":"

If you have official Joy-Con controllers, you can set up auto-pairing so undocking them seamlessly connects to the console regardless of what OS is running. To make this work, boot HOS, ensure both work undocked (pair them), then reboot to Hekate. Select Nyx Options followed by Dump Joy-Con BT. You should see \"Found 2 out of 2 Joy-Con pairing data!\"

Have a Switch Lite?

You should poke the dump button in Hekate anyway -- this will dump factory stick and IMU calibration for use in Android.

"},{"location":"extras/installing_android/#step-1-downloading-files","title":"Step 1: Downloading Files","text":"

Download the latest .7z release archive from the official Switchroot download site--choose nx-atv... for Android TV (more console-like experience) or nx-tab... for standard Android (a more standard Android tablet experience). Both are usable with controllers and docking, but only tab supports proper touch input.

If you prefer TWRP recovery...

...you can download twrp.img from the extras folder.

"},{"location":"extras/installing_android/#step-2-arranging-the-microsd-card","title":"Step 2: Arranging the microSD Card","text":"

Are you using a V1 or V2 Switch (standard models)?

These models have a poorly designed microSD card reader and repeated removals/reinsertions can eventually cause the reader to fail. Please use Hekate SD UMS to transfer files instead of removing the microSD card from your Switch!

Extract the archive to the root of the microSD card (the FAT32 partition). The microSD card file structure should look more or less like this:

root\n|- bootloader\n|  |- ini\n|  |  |- ...\n|  |- payloads\n|  |  |- ...\n|  |- res\n|  |  |- ...\n|  |- sys\n|  |  |- ...\n|- Nintendo (if you use Horizon)\n|  |- ...\n|- switchroot\n|  |- android\n|  |  |- ...\n|  |- install\n|  |  |- ...\n|- lineage-18.1-[date]-UNOFFICIAL-[device].zip\n

If you downloaded TWRP...

...you have to replace /switchroot/install/recovery.img with twrp.img. No need to rename the file, just swap it out.

"},{"location":"extras/installing_android/#step-3-flashing-android","title":"Step 3: Flashing Android","text":"

Open the Hekate partition manager (located in Tools > Partition SD Card) and select Flash Android at the bottom of your screen. All three images should be found and successfully flashed. Select the option to reboot to recovery.

Once in recovery, select Factory Reset followed by Format Data. This does not delete anything here, but rather is used to prepare your data partitions for flashing. Ignore any errors that may appear. Return to the main menu and select Apply Update followed by Select from SWITCH SD. Find and select the lineage-18.1... zip in the list, and wait for it to finish.

Did the zip fail to flash?

Your microSD card is probably bad... Take a look at Hekate's microSD card info, and consider buying a better card.

If you are using TWRP...

Good luck... TWRP is for advanced users; no user support will be provided. TWRP is provided for power users who have a specific need for it.

Once done, reboot the system when prompted -- Android is now installed!

"},{"location":"extras/installing_android/#post-install","title":"Post-Install","text":""},{"location":"extras/installing_android/#tips-and-tricks","title":"Tips and Tricks","text":""},{"location":"extras/installing_android/#power-user-guides","title":"Power User Guides","text":"

To learn more about using the Switch Configuration App and overclocking, see the Switch Configuration App section. Furthermore, you can check out the INI guide as well.

"},{"location":"extras/installing_android/#need-help","title":"Need Help?","text":"

Join the Switchroot Discord server.

This page was made in collaboration with makinbacon21 on Discord. See the collapsible section below for the Switchroot guide maintainers.

Switchroot Project Staff (Android / Linux)

If you'd like, you can donate to the people who made this project possible using these links.

"},{"location":"extras/installing_linux/","title":"Installing Linux 4 Switch","text":"

Have you partitioned your microSD card?

This guide assumes that you've followed the NH-Server guide up until this point, your microSD card should be partitioned accordingly. If you didn't do so, see this page of our guide.

Linux 4 Switch is a sister project to Switchroot Android--it uses a similar kernel but provides a variety of Linux distributions.The available distributions at this time are:

Looking for Arch?

Unfortunately, L4S Arch Linux is deprecated following an xorg ABI change that breaks compatibility with the Tegra210 BSP.

"},{"location":"extras/installing_linux/#the-installation","title":"The installation","text":"

To install an L4S distribution, follow the official guide starting from 0. Linux Distributions.

This page was made in collaboration with makinbacon21 on Discord. See the collapsible section below for the L4S guide maintainers.

L4S Project Staff (Android / Linux)

If you'd like, you can donate to the people who made this project possible using these links.

"},{"location":"extras/nandrestore/","title":"Restoring a NAND Backup","text":""},{"location":"extras/nandrestore/#restore-a-nand-backup-to-the-switch","title":"Restore a NAND backup to the Switch","text":"

Warning:

"},{"location":"extras/nandrestore/#what-you-need","title":"What you need:","text":""},{"location":"extras/nandrestore/#instructions","title":"Instructions:","text":"

Before we start, check if you have a tree of folders called backup/[8 Character NAND id]/restore on your microSD card.

If you don't see a backup or [8 Character NAND id] folder on your microSD card:

This means you do not have a nand backup, it is highly recommended you make one as soon as possible. Follow the steps below to make one.

  1. Launch the latest Hekate payload on your Switch.
  2. Navigate to Tools > Backup eMMC > eMMC BOOT0 & BOOT1 and let it do its thing.
  3. Wait for the process to complete. When it's completed, you now have a backup/[8 Character NAND id]/restore folder on your microSD card. Continue with step 1 of the instructions below.
  1. Enter RCM and inject the Hekate payload.
  2. Navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  3. Copy your rawnand.bin (combined or in 15 or 30 parts), BOOT0, and BOOT1 to the backup/[8 Character NAND id]/restore folder on the microSD card.
  4. Eject the UMS device safely from within your computer's operating system.
  5. Navigate to Tools > Restore eMMC. Select Restore eMMC BOOT0 & BOOT1. Wait for this process to complete.
  6. In that same menu, select eMMC RAW GPP and wait for the process to complete.

If you're downgrading using your NAND backup

If the security version you were on before you performed the NAND restore is HIGHER than the NAND backup itself, you have to enable autoRCM to not get stuck in a boot crash.

A system update is considered a security version when a fuse is burned, you can check which versions burn fuses here.

If you were in AutoRCM before you upgraded to a newer security version (and still were after the upgrade) you don't have to do this.

  1. In Hekate's main menu, navigate to Tools and go to the bottom of the page where you will find a button called Archive bit - AutoRCM
  2. Select the AutoRCM buttom and you will see ON written next to it. This means it is enabled.
"},{"location":"extras/rcm_injectors/","title":"RCM Payload Injectors","text":"

There are currently multiple RCM payload injectors available from multiple different companies and individuals. These devices remove the need to use a computer or smartphone when hacking an unpatched Switch. Each injector has its own advantages and disadvantages, listed below:

Name Manufacturer RCM Jig Included? RCM Jig Storage? Standard Payload (.bin) Support? Payload on SD Support? Multi-Payload Support? Battery Life Recharge Time Price (USD) Misc Info AceNS (Old) Ace3DS Team \u2714\ufe0f \u274c \u2714\ufe0f \u274c \u2714\ufe0f N/A (Capacitors) 10 seconds $18.00\u200b (Discontinued) Not Recommended: Overpriced clone of the RCMLoader Zero AceNS (New) Ace3DS Team \u2714\ufe0f \ufe0f \u2714\ufe0f \u2714\ufe0f \u274c \u2714\ufe0f 45mAh LiPo (~1000 injections) 1 hour $17.50 Not Recommended: Overpriced clone of the RCMLoader One AceNS Pro Ace3DS Team \u2714\ufe0f \u2714\ufe0f \u2714\ufe0f \u2714\ufe0f (Required) \u274c 45mAh LiPo (~1000 injections) 1 hour $42.90 Not Recommended: Overpriced clone of the RCMLoader One with multiple features missing DragonInjector MatinatorX \u2714\ufe0f \u2714\ufe0f \u2714\ufe0f \u2714\ufe0f (Required) \u2714\ufe0f 40mAh CR1612 (~4000 injections) Non-Rechargeable (Replacable) $30.00\u200b (Discontinued) Fits in the Switch's gamecard slot NS-Atmosphere Generic \u2714\ufe0f \u2714\ufe0f \u274c \u274c \u274c 150mAh LiPo (>1000 injections) >1 hour $13.15 Not Recommended: Unsafe jig, overly bulky, changing payload requires installing a program, lack of .bin support complicates usage R4S R4i-SDHC Team \u2714\ufe0f \u274c \u2714\ufe0f \u2714\ufe0f \u274c 120mAh LiPo (~1000 injections) 1 hour $19.99 RCMLoader Zero Xkit \u2714\ufe0f \u274c \u2714\ufe0f \u274c \ufe0f \u2714\ufe0f N/A (Capacitors) 10 seconds $5.99\u200b (Discontinued) RCMLoader One Xkit \u2714\ufe0f \u2714\ufe0f \u2714\ufe0f \u274c \u2714\ufe0f 45mAh LiPo (~1000 injections) 1 hour $9.99 SX Gear Team Xecuter \u2714\ufe0f \u274c \u274c \u2714\ufe0f (Required) \u274c N/A (Supercapacitors) 5-10 seconds $24.95 Not Recommended: Lack of .bin support complicates usage SX Pro Team Xecuter \u2714\ufe0f \u274c \u274c \u2714\ufe0f (Required) \u274c N/A (Supercapacitors) 5-10 seconds $49.99 Not Recommended: Lack of .bin support complicates usage"},{"location":"extras/showing_file_extensions/","title":"Showing File Name Extensions on Windows 10/11","text":"

By default, Microsoft Windows 10 and 11 do not show file extensions for known file types. This can result in problems when you need to rename files.

"},{"location":"extras/showing_file_extensions/#instructions-for-windows-10","title":"Instructions for Windows 10:","text":"
  1. Open a new File Explorer window.
  2. Switch to the View tab/ribbon.
  3. On this tab, if the File name extensions checkbox is not ticked, put a check/tick mark in it by clicking it.
"},{"location":"extras/showing_file_extensions/#instructions-for-windows-11","title":"Instructions for Windows 11:","text":"
  1. Open a new File Explorer window.
  2. Click the View hamburger menu/dropdown menu.
  3. Go to Show at the bottom and ensure that File name extensions is ticked.
"},{"location":"extras/transfer_sd/","title":"Changing microSD cards","text":"

The goal of this page is to transfer the contents from one microSD card to another one. The method to do this will differ, depending on whether you're using a partition based emuMMC on your microSD card or not.

We will be using hekate to both backup and restore the emuMMC, so make sure that you have its latest files on your microSD card already.

"},{"location":"extras/transfer_sd/#instructions","title":"Instructions:","text":"

You should first check whether you have a file or partition based emuMMC:

  1. Enter RCM and inject the Hekate payload.
  2. Tap on the emuMMC button.
  3. Under emuMMC Info & Selection, check the text next to Type.
"},{"location":"extras/transfer_sd/#if-you-are-using-a-file-based-emummc-or-are-using-no-emummc-at-all","title":"If you are using a file based emuMMC or are using no emuMMC at all:","text":"
  1. Enter RCM and inject the Hekate payload.
  2. Navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  3. Copy the contents of your microSD card somewhere to your PC.
  4. Access your new microSD card via a microSD card reader or similar.
  5. Format your new microSD card to FAT32 if it isn\u2019t already.
  6. Copy the files from your PC or directly from your old microSD card to your new microSD card.
  7. Eject the UMS device safely from within your computer's operating system.
"},{"location":"extras/transfer_sd/#if-you-are-using-a-partition-based-emummc","title":"If you are using a partition based emuMMC:","text":"

Space for the backup

You need at least 30GB (or 60GB if using an OLED Switch) of free space to be able to restore the emuMMC!

  1. Enter RCM and inject the Hekate payload.
  2. In the main menu, tap on Tools, then Backup eMMC and set SD emuMMC Raw Partition at the bottom of your screen to ON.
  3. Backup both SD emuMMC BOOT0 & BOOT1 and SD emuMMC RAW GPP (Note: SD emuMMC RAW GPP may take a while).
  4. Once both are done, go back to the main menu, navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  5. If Windows asks you to format a drive, discard it and open the accessible drive containing the contents of your microSD card.
  6. Copy the contents of your old microSD card somewhere to your PC.
  7. Follow the Preparing Hekate section at the bottom of this page (Unpatched Switch users only) to prepare your new SD card with Hekate's files.
  8. Follow only steps 1-3 on this page to partition the new microSD card for an emuMMC setup.
  9. After it\u2019s done, boot into Hekate and navigate to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  10. Copy the backup you made of your old microSD card on your PC to your new microSD card.
  11. Navigate to /backup/<some characters>/emummc on your microSD card and move BOOT0, BOOT1 and the rawnand.bin.xx files to /backup/<some characters>/restore/emummc.
  12. Eject the UMS device safely from within your computer's operating system.
  13. Tap on Tools, Restore eMMC, set SD emuMMC Raw Partition at the bottom of your screen to ON.
  14. Restore the backup by tapping on both SD emuMMC BOOT0 & BOOT1 and SD emuMMC RAW GPP (Note: SD emuMMC RAW GPP may take a while).
  15. Your emuMMC is now restored on the new microSD card and you should be able to launch it from Launch -> Atmosphere FSS0 emuMMC in Hekate.
"},{"location":"extras/updating/","title":"Keeping your system up-to-date","text":"

This page documents how you can keep your system up-to-date.

After following our guide, your system will consist of three core elements that can be updated. Atmosphere, Hekate and your system firmware.

"},{"location":"extras/updating/#updating-atmosphere","title":"Updating Atmosphere","text":"

When updating Atmosph\u00e8re, always make sure to read the release notes. They may list important changes and modifications to your system.

Updating from below Atmosph\u00e8re 1.0.0

If you update from below Atmosph\u00e8re 1.0.0, there are additional steps to follow. You will have to delete the sept folder from your microSD, delete fusee-secondary.bin from your atmosphere folder and update your Hekate config file: hekate_ipl.ini in the bootloader folder.

When a new version of Atmosph\u00e8re releases, you can update Atmosph\u00e8re by following these steps:

  1. Enter RCM and inject the Hekate payload.
  2. Navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  3. Download the latest release of Atmosphere (Download the atmosphere-(version)-master-(version)+hbl-(version)+hbmenu-(version).zip release of Atmosphere.)
  4. Copy the contents of the Atmosphere .zip file to the root of your microSD card.
  5. Eject the UMS device safely from within your computer's operating system.
  6. (If your Hekate is not on the latest version) update Hekate via the steps below.
"},{"location":"extras/updating/#updating-hekate","title":"Updating Hekate","text":"

When updating Hekate always make sure to read the release notes. They may list important changes and modifications to your system.

When a new version of Hekate releases, you can update by following these steps:

  1. Enter RCM and inject the Hekate payload.
  2. Navigate to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  3. Download the latest version of Hekate (Download the hekate_ctcaer_(version).zip release of hekate).
  4. Copy the bootloader folder from the Hekate .zip file to the root of your microSD card. If you are asked to overwrite or merge files while copying, say yes to merge/overwrite them.
  5. Eject the UMS device safely from within your computer's operating system.
  6. Go back to Hekate's main menu and press Reload > Reload to reload Hekate from your microSD card.
  7. From here, you're done and you can boot into CFW.
"},{"location":"extras/updating/#updating-your-firmware","title":"Updating your firmware","text":"

Always check before updating your system firmware if the latest version of Atmosph\u00e8re as well as the latest version of Hekate support the firmware version you are updating towards.

In addition, updating to or past some firmwares update the gamecard firmware. Reference the table below for information about these.

Updating from Updating towards Updates gamecard firmware Below 4.0.0 Below 4.0.0 No Below 4.0.0 4.0.0 or above Yes On or above 4.0.0, but below 9.0.0 At least 4.1.0 but below 9.0.0 No On or above 4.0.0, but below 9.0.0 9.0.0 or above Yes On or above 9.0.0, but below 11.0.0 At least 9.1.0 but below 11.0.0 No On or above 9.0.0, but below 11.0.0 11.0.0 or above Yes On or above 11.0.0 but below 12.0.0 At least 11.0.1 but below 12.0.0 No On or above 11.0.0 but below 12.0.0 12.0.0 or above Yes On or above 12.0.0 Latest supported Atmosph\u00e8re & Hekate revision No

If at least one of the versions you are updating towards also updates the gamecard firmware, you will not be able to downgrade below that version without making the gamecard slot unusable until you update.

Atmosphere (and Hekate) come bundled with patches that automatically disable the gamecard slot if it is detected that the system has an older gamecard firmware that would be updated. If you boot into RCM on each boot (for example by using AutoRCM), this means that the gamecard slot will not be updated and you can downgrade below that version. If this happens, you will not be able to use the gamecard slot as long as you are on the newer firmware.

Otherwise, you can safely update your system firmware through the system settings.

Note about autoRCM

If you have autoRCM enabled and you're updating your system while in stock firmware, updating will disable autoRCM and you will need to enter RCM manually to boot custom firmware again. To prevent autoRCM from being disabled, boot CFW on sysMMC and update through settings from there, as booting without AutoRCM will burn any preserved fuses.

"},{"location":"extras/updating/#about-emummc","title":"About emuMMC","text":"

sysMMC and emuMMC have separate system firmwares and need to be updated separately.

If you keep your emuMMC offline, you will have to use a gamecard to update your system firmware, synchronize it with another Nintendo Switch or dump an updated firmware from your sysMMC.

"},{"location":"extras/updating/#updating-emummc-by-dumping-an-updated-firmware-from-your-sysmmc","title":"Updating emuMMC by dumping an updated firmware from your sysMMC","text":"

Do you have an eMMC backup yet?

Please do not start this guide without doing a RAW GPP and a BOOT 0/1 eMMC backup!

You can learn how to make one here.

Downgrading

This guide is made for updating your emuMMC. It is not for downgrading. Downgrading at all, sysMMC or emuMMC, is not recommended and not worth it. Downgrading is also very dangerous and can lead to serious complications even when performed correctly.

"},{"location":"extras/updating/#what-you-need","title":"What you need:","text":""},{"location":"extras/updating/#preparing-your-microsd-card","title":"Preparing your microSD card","text":"
  1. Boot into Hekate.
  2. Go to Tools > USB Tools > SD Card and connect your Switch to your PC via USB.
  3. Download the latest release of TegraExplorer.bin and place it sd:/bootloader/payloads.

Make sure your sysMMC is updated before moving onto the instructions below.

"},{"location":"extras/updating/#dumping-your-sysmmc-firmware","title":"Dumping your sysMMC firmware","text":"
  1. Make sure your sysMMC is up to date. If your sysMMC is not up-to-date, boot into Stock or sysCFW and update it through the System Settings.
  2. Inject TegraExplorer.bin using your favourite payload injector (Like you would with Hekate).
  3. Using the joystick and the A buttons, select FirmwareDump.te, then select Dump sysmmc.
  4. Wait about 1-2 minutes for the script to dump your firmware.
  5. When the script finishes, press any button.
  6. Select Reboot to bootloader/update.bin.
"},{"location":"extras/updating/#updating-your-emummc-with-daybreak","title":"Updating your emuMMC with Daybreak","text":"
  1. In Hekate go to Launch -> Atmosphere FSS0 emuMMC.
  2. Once booted, hold R while launching a game to boot into the homebrew menu.
  3. Find Daybreak in the homebrew menu and launch it.
  4. Tap on Install and navigate to sd:/tegraexplorer/Firmware/<latest firmware number>.
  5. Tap on Continue and then Preserve settings.
  6. If it is available choose Install (FAT32 + exFAT), otherwise Install (FAT32) and then Continue.
  7. Wait until Daybreak completes installing the dumped firmware.
  8. Once it completes, it will ask if you want to reboot. Tap Reboot.
  9. Once rebooted, launch into emuMMC and verify your system works. You can verify your system has been properly updated in Settings -> System.
"},{"location":"homebrew/","title":"Homebrew","text":""},{"location":"homebrew/#information","title":"Information","text":"

This page summarizes the included Homebrew apps and additional Homebrew you can check out.

"},{"location":"homebrew/#the-guide-includes-a-few-homebrew-apps-by-default-these-apps-are","title":"The guide includes a few Homebrew apps by default, these apps are:","text":""},{"location":"homebrew/#terminologies","title":"Terminologies","text":"

Homebrew is a general term, the term can be used for Homebrew apps (.nro files) or in the form of background processes, called \"sysmodules\". The Switch natively has sysmodules built into its firmware but you can run additional Homebrew sysmodules that can add functionality to your Switch. In the section below, you can find additional and commonly used Homebrew apps and sysmodules.

Homebrew apps are stored in sd:/switch by default and Homebrew sysmodules are stored in sd:/atmosphere/contents by default.

"},{"location":"homebrew/#additional-homebrew-appssysmodules","title":"Additional Homebrew apps/sysmodules:","text":""},{"location":"homebrew/edizon/","title":"Games cheats","text":""},{"location":"homebrew/edizon/#edizon","title":"EdiZon","text":"

For cheats management, EdiZon and/or EdiZon-SE (up to date and offers more features) are recommended. They offer support for Atmosphere's cheat engine, providing an easy way to download new cheats, as well as toggle them on or off.

"},{"location":"homebrew/edizon/#installation-requirements","title":"Installation requirements:","text":"

EdiZon overlay

EdiZon also offers a Tesla-Menu overlay, however, the official EdiZon overlay is no longer maintained and will result in Atmosphere crashing when trying to use the EdiZon overlay on firmware version 16.0.0+. The maintained EdiZon overlay can be found here.

Installation instructions (EdiZon):Installation instructions (EdiZon-SE):
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Put the EdiZon.nro in sd:/switch.
  4. Boot into CFW.
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. If your archive manager allows for it, you can also simply open the .zip file directly.
  5. Copy the contents of the (extracted) .zip file to the root of your microSD card.
  6. Optional: You can verify if you've installed EdiZon-SE correctly, you should have a folder called 054e4f4558454000 (EdiZon-SE) in sd:/atmosphere/contents and an EdiZon.nro file in sd:/switch/EdiZon.
  7. Boot into CFW.
"},{"location":"homebrew/edizon/#usage-instructions","title":"Usage instructions","text":"

Atmosph\u00e8re looks for cheats to load in the contents sub-folder of the atmosphere folder. The template it looks for is sd:/atmosphere/contents/<title_id>/cheats/<build_id>.txt. You need to create the <title_id> folder and sub-folders manually:

Note: On Atmosph\u00e8re 0.9.4 and below contents is called titles.

Once the title is launched while in Atmosphere, your cheats should be applied.

"},{"location":"homebrew/edizon/#preventing-cheats-from-being-enabled-by-default","title":"Preventing cheats from being enabled by default","text":"

To prevent cheats from being enabled by default, you can change your Atmosph\u00e8re configuration by following the steps below.

  1. Copy system_settings.ini from sd:/atmosphere/config_templates to sd:/atmosphere/config if it's not already there.
  2. Open the system_settings.ini file with a text editor and edit the line ; dmnt_cheats_enabled_by_default = u8!0x1 to dmnt_cheats_enabled_by_default = u8!0x0.

By default, holding the L button while launching a game will disable any game modification.

Here the Title ID of the game (TID) is 0100646009FBE000 and the Build ID of the game (BID) is 0B9A75586BC1A6C6. Cheats are loaded from sd:/atmosphere/contents/0100646009FBE000/cheats/0B9A75586BC1A6C6.txt in this example.

"},{"location":"homebrew/edizon/#additional-information","title":"Additional information:","text":"

For more in-depth details about Atmosphere's cheat engine, you can refer to this page.

"},{"location":"homebrew/edizon/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/edizon/#edizon-isnt-showing-up-when-i-open-the-homebrew-menu","title":"EdiZon isn't showing up when I open the Homebrew menu!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/ftpd/","title":"FTPD","text":""},{"location":"homebrew/ftpd/#ftpd","title":"FTPD","text":"

FTPD is simply an FTP server for the Switch, it can be used to transfer files wirelessly to- and from- your microSD card.

"},{"location":"homebrew/ftpd/#usage-requirements","title":"Usage requirements:","text":""},{"location":"homebrew/ftpd/#usage-instructions","title":"Usage instructions:","text":"

Note

This section assumes that the device running the FTP client and your Switch are connected to the same network. If it's not, make sure they are connected to the same network before continuing.

  1. Launch the FTPD Homebrew app from the Homebrew menu.
  2. Open your FTP client of choice.
  3. Add a new connection and in the Host field of your FTP client, put in the IP address of your Switch mentioned in the top left of FTPD.
  4. Type in port 5000 for the port and attempt to connect to your Switch.
  5. You should now be able to access your microSD card wirelessly and transfer files to- and from- the microSD card.
"},{"location":"homebrew/ftpd/#ftpds-main-menu","title":"FTPD's main menu:","text":""},{"location":"homebrew/ftpd/#additional-information","title":"Additional information:","text":"

FTPD can also run in the form of a background process (sysmodule), called sys-ftpd. It can be found here, usage and configuration options are mentioned there as well.

"},{"location":"homebrew/goldleaf/","title":"Goldleaf","text":""},{"location":"homebrew/goldleaf/#goldleaf","title":"Goldleaf","text":"

Goldleaf is primarily a very extensive file and console content manager.

"},{"location":"homebrew/goldleaf/#common-use-cases-for-goldleaf-are","title":"Common use cases for Goldleaf are:","text":"

And a lot more, which you can view on Goldleaf's Github repository here.

"},{"location":"homebrew/goldleaf/#goldleaf-screenshots","title":"Goldleaf screenshots:","text":""},{"location":"homebrew/jksv/","title":"Save Management","text":""},{"location":"homebrew/jksv/#jksv","title":"JKSV","text":"

For save management, JKSV is recommended. It can be used to back up and restore game saves to your microSD card.

"},{"location":"homebrew/jksv/#backing-up-save-data-using-jksv","title":"Backing up save data using JKSV","text":""},{"location":"homebrew/jksv/#instructions","title":"Instructions:","text":"
  1. Launch JKSV from the homebrew menu.
  2. Select your Switch user on the left side with the A button.
  3. Select your desired game and press A to select it.
  4. Press A again to create a new save backup
  5. Enter a name for the save data folder containing the save data and press + or OK.
  6. Wait for it to finish backing up your save data.
"},{"location":"homebrew/jksv/#restoring-save-data-using-jksv","title":"Restoring save data using JKSV","text":""},{"location":"homebrew/jksv/#instructions_1","title":"Instructions:","text":"
  1. Launch JKSV from the homebrew menu.
  2. Select your Switch user on the left side with the A button.
  3. Select your desired game and press A to select it.
  4. Hover over the save data folder containing the save data you want and press Y.
  5. Hold the A button to restore the save data, keep holding it until it's finished.
"},{"location":"homebrew/jksv/#jksv-documentation","title":"JKSV Documentation","text":"

Please read JKSV's homepage for information on how to use it.

"},{"location":"homebrew/jksv/#checkpoint","title":"Checkpoint","text":"

Checkpoint is also a save manager. It can be used to back up and restore game saves to your microSD card. It also has the ability to share save data over FTP and WiFi.

"},{"location":"homebrew/jksv/#checkpoint-documentation","title":"Checkpoint Documentation","text":"

Please read Checkpoint's homepage for information on how to use it.

"},{"location":"homebrew/ldn_mitm/","title":"ldn_mitm","text":""},{"location":"homebrew/ldn_mitm/#information","title":"Information","text":"

ldn_mitm is a sysmodule that allows you to route the local wireless ad-hoc network traffic of the Switch via the network your Switch is connected to, essentially allowing \"LAN\" functionality between consoles and emulators using ldn_mitm. The official Github repository for ldn_mitm can be found here.

"},{"location":"homebrew/ldn_mitm/#common-use-cases-for-ldn_mitm","title":"Common use cases for ldn_mitm:","text":""},{"location":"homebrew/ldn_mitm/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/ldn_mitm/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. Copy the contents of the (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/ldn_mitm/#basic-usage-instructions","title":"Basic usage instructions","text":"

You can enable/disable ldn_mitm by opening the Homebrew menu, opening ldn_mitm's config app and pressing Y to toggle ldn_mitm.

"},{"location":"homebrew/ldn_mitm/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/ldn_mitm/#my-switch-crashes-on-boot-after-i-installed-ldn_mitm","title":"My Switch crashes on boot after I installed ldn_mitm!:","text":"

Cause: If your Switch crashes with Error std::abort (0xFFE) and Title ID 4200000000000010, you're using a version of ldn_mitm that's incompatible with your Atmosphere version. The expected Atmosphere version is mentioned on each release page of an ldn_mitm release.

"},{"location":"homebrew/ldn_mitm/#ldn_mitm-isnt-working","title":"ldn_mitm isn't working!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/mission-control/","title":"MissionControl","text":""},{"location":"homebrew/mission-control/#information","title":"Information","text":"

MissionControl is a sysmodule that allows you to pair normally-unsupported controllers as if they were natively supported, like PS3, PS4, PS5 and Xbox One S/X controllers via Bluetooth. The full supported controller list can be found on the official Github repository here including pairing instructions for the supported controllers.

"},{"location":"homebrew/mission-control/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/mission-control/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. Copy the contents of the (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/mission-control/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/mission-control/#my-switch-crashes-on-boot-after-i-installed-missioncontrol","title":"My Switch crashes on boot after I installed MissionControl!:","text":"

Cause: If your Switch crashes with Error std::abort (0xFFE) and Title ID 010000000000BD00, you're using a version of MissionControl that's incompatible with your Atmosphere version. The expected Atmosphere version is mentioned on each release page of a MissionControl release.

"},{"location":"homebrew/mission-control/#missioncontrol-isnt-working","title":"MissionControl isn't working!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/nx-shell/","title":"NX-Shell","text":""},{"location":"homebrew/nx-shell/#nx-shell","title":"NX-Shell","text":"

NX-Shell is a file manager.

"},{"location":"homebrew/nx-shell/#common-use-cases-for-nx-shell","title":"Common use cases for NX-Shell","text":"

For more information, you can check out NX-Shell's Github repository here.

"},{"location":"homebrew/nx-shell/#nx-shell-screenshots","title":"NX-Shell screenshots:","text":""},{"location":"homebrew/nxtheme-installer/","title":"Theming","text":"

Using NXTheme Installer, you can install and create unique styles and layouts for your Switch Home Menu.

"},{"location":"homebrew/nxtheme-installer/#index","title":"Index","text":""},{"location":"homebrew/nxtheme-installer/#installing-a-theme","title":"Installing a theme","text":"

Community Themes

If you want to use community made themes, for example from the r/NXThemes subreddit or Themezer, you can follow the guide below to install a community provided .nxtheme file.

"},{"location":"homebrew/nxtheme-installer/#what-you-need","title":"What you need:","text":""},{"location":"homebrew/nxtheme-installer/#instructions","title":"Instructions:","text":"
  1. Download NXThemesInstaller.nro and put it in sd:/switch.
  2. Copy the .nxtheme files to the themes folder on your microSD card (It is recommended you put them into their own folders, e.g. sd:/themes/awesome_theme/awesome.nxtheme).
  3. Boot into sysCFW/emuMMC and launch the Homebrew Menu, then launch NXThemes Installer with an internet connection.
  4. If you get prompted about extracting your home menu data, do so.
  5. You should now see the main menu of NXTheme Installer, the Themes tab is where you will find your themes. To install them, press the folder name of your theme and go through each home menu section to install the desired theme for that section (e.g. going to /awesome_theme and selecting your theme for the specific menu you want to change, do the same for the other menus).
  6. Reboot into CFW via the Reboot tab to see the changes.

An example of a Home Menu theme being installed

"},{"location":"homebrew/nxtheme-installer/#making-a-theme","title":"Making a theme","text":"WindowsMac / Linux / ChromeOS"},{"location":"homebrew/nxtheme-installer/#what-you-need_1","title":"What you need:","text":"

The latest release of Switch Theme Injector

"},{"location":"homebrew/nxtheme-installer/#making-the-theme","title":"Making the theme","text":"
  1. Unzip ReleaseVx.x.zip to somewhere on your PC's drive.
  2. Open up the SwitchThemes.exe app. Navigate to NXTheme Builder.
  3. Select a Home menu part, A 720p image and a Layout patch. Click on Build NXTheme after selecting your home menu part, image and layout patch.
  4. Fill out the details in the window that pops up. After filling out this window and clicking ok, you will get asked where to save the NXTheme file. Save this file to a temporary folder.
  5. Repeat step 3 and 4 for every Home Menu part of the Switch you want to modify.
"},{"location":"homebrew/nxtheme-installer/#making-the-theme_1","title":"Making the theme","text":"

Make sure that the images you want to use are 1280x720 and in JPG!

  1. Navigate to Exelix's Web Injector.
  2. Select a Theme Target you want to edit. After this, click the Open an Image button and select your background image.
  3. Choose a theme name and an author name and optionally a different layout, then click build NxTheme.
  4. Your browser will prompt you to download a file. Save this file to a temporary folder.
  5. Repeat step 2 to 4 for every Home Menu part of the Switch you want to modify.
"},{"location":"homebrew/nxtheme-installer/#installing-a-custom-font","title":"Installing a custom font","text":"
  1. Put a font with the .ttf file type into the themes folder (It is recommended you put them into their own folders, e.g. sd:/themes/cool_font/font.ttf).
  2. Boot into sysCFW/emuMMC, launch the Homebrew Menu and launch NXThemes Installer.
  3. You should now see the main menu of NXTheme Installer, the Themes tab is where you will find your font(s).
  4. Install your desired font by selecting the .ttf file in the font folder you created.
  5. Reboot into CFW via the Reboot tab to see the changes.
"},{"location":"homebrew/nxtheme-installer/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/nxtheme-installer/#my-switch-crashes-on-boot-after-i-installed-a-theme","title":"My Switch crashes on boot after I installed a theme!:","text":"

Cause 1: You didn't install the required theme patches for your firmware version. You can remove your installed custom theme data by navigating to sd:/atmosphere/contents and deleting the 01000000000001000 folder.

Cause 2: You didn't extract your home menu data when prompted. You can remove your installed custom theme data by navigating to sd:/atmosphere/contents and deleting the 01000000000001000 folder.

Cause 3: You installed a bad theme. You can remove them by navigating to sd:/atmosphere/contents and deleting the 01000000000001000 folder.

"},{"location":"homebrew/nxtheme-installer/#my-switch-crashes-on-boot-after-i-installed-a-font","title":"My Switch crashes on boot after I installed a font!:","text":"

Cause 1: You installed a font that was too large in file size (maximum file size being 1.9MB). You can remove your installed custom font data by navigating to sd:/atmosphere/contents and deleting the 0100000000000811 folder.

Cause 2: You installed a font that wasn't the right file type (e.g. .otf). You can remove your installed custom font data by navigating to sd:/atmosphere/contents and deleting the 0100000000000811 folder.

"},{"location":"homebrew/nxtheme-installer/#the-nxtheme-installer-crashes-when-i-launch-it","title":"The NXTheme installer crashes when I launch it:","text":"

This is probably due to the archive bit being set on either the app or the .nxtheme files. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/sys-botbase/","title":"sys-botbase","text":""},{"location":"homebrew/sys-botbase/#information","title":"Information","text":"

sys-botbase is an advanced sysmodule that allows users to interact with their Switch remotely, to \"remote control\" their Switch. This remote control allows users to create automated tasks, simulate button presses, simulate touchscreen input and read/write to the memory of the Switch while in-game.

"},{"location":"homebrew/sys-botbase/#common-use-cases-for-sys-botbase","title":"Common use cases for sys-botbase:","text":""},{"location":"homebrew/sys-botbase/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/sys-botbase/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. Copy the contents of each (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/sys-botbase/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/sys-botbase/#my-switch-crashes-on-boot-after-i-installed-sys-botbase","title":"My Switch crashes on boot after I installed sys-botbase!:","text":"

Cause: While it's almost impossible for this to happen, if your Switch crashes with Error 2001-0123 (0xf601) and Title ID 430000000000000B, you're using a version of sys-botbase that's incompatible with your Atmosphere version.

"},{"location":"homebrew/sys-botbase/#sys-botbase-isnt-working","title":"sys-botbase isn't working!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/sys-clk/","title":"sys-clk","text":""},{"location":"homebrew/sys-clk/#information","title":"Information","text":"

sys-clk is a sysmodule that allows you to overclock the hardware of your Switch. The usage, configuration and clock speed information can be found on the official Github repository here

Limits of sys-clk

sys-clk has limits for a reason, which is to not damage the hardware of your Switch. Using any modified version of sys-clk puts your Switch at risk of hardware failure. We do not support any modified version of sys-clk nor should you ever touch them. Overclocking is not something you should be doing 24/7 as overclocking in general will always degrade/wear out the hardware of your Switch faster and you should know what you're doing if you do decide to do so.

"},{"location":"homebrew/sys-clk/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/sys-clk/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. Copy the contents of the (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/sys-clk/#basic-usage-instructions","title":"Basic usage instructions","text":"

Open the Homebrew menu and open sys-clk's manager app. This app allows you to change the global clock speeds or clock speeds based on title.

"},{"location":"homebrew/sys-clk/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/sys-clk/#my-switch-crashes-on-boot-after-i-installed-sys-clk","title":"My Switch crashes on boot after I installed sys-clk!:","text":"

Cause: If your Switch crashes on boot, make sure you're using the latest release of sys-clk. If it continues to crash afterwards, see the troubleshooting step at the bottom of this page.

"},{"location":"homebrew/sys-clk/#my-switch-crashes-while-using-sys-clk","title":"My Switch crashes while using sys-clk!:","text":"

Cause: You're either using a modified version of sys-clk and pushing the hardware of your Switch too far or your console is overheating. The cooling system of the Switch is not the best and overheating can be a cause of dried up thermal paste/lack of thermal paste. Overclock with caution and be careful, monitor the temperatures of your Switch using a Tesla-Menu overlay like Status-Monitor-Overlay (requires Tesla-Menu).

"},{"location":"homebrew/sys-clk/#sys-clk-isnt-working","title":"sys-clk isn't working!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/sys-con/","title":"sys-con","text":""},{"location":"homebrew/sys-con/#information","title":"Information","text":"

sys-con is a sysmodule that allows you to use normally-unsupported controllers as if they were natively supported, like PS3, PS4, PS5 and Xbox One S/X controllers via USB. The full supported feature and controller list can be found on the official Github repository here including usage instructions and configuration options.

"},{"location":"homebrew/sys-con/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/sys-con/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract the .zip file to a location on your computer.
  4. Copy the contents of the (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/sys-con/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/sys-con/#my-switch-crashes-on-boot-after-i-installed-sys-con","title":"My Switch crashes on boot after I installed sys-con!:","text":"

Cause: While it's almost impossible for this to happen, if your Switch crashes with Error code 2162-0002 (0x4a2) and Title ID 690000000000000D, you're using a version of sys-con that's incompatible with your Switch firmware version. The expected firmware version is mentioned on each release page of a sys-con release.

"},{"location":"homebrew/sys-con/#sys-con-isnt-working","title":"sys-con isn't working!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"homebrew/sysdvr/","title":"SysDVR","text":""},{"location":"homebrew/sysdvr/#information","title":"Information","text":"

SysDVR is a sysmodule that allows you to stream the screen of your Switch (while in-game/in an application) to your PC via the network or USB.

"},{"location":"homebrew/sysdvr/#sysdvr","title":"SysDVR","text":"

Installation, usage, configuration and extensive troubleshooting information can be found on the SysDVR Wiki.

"},{"location":"homebrew/sysdvr/#sysdvr-screenshots","title":"SysDVR screenshots:","text":""},{"location":"homebrew/tesla-menu/","title":"Tesla-Menu","text":""},{"location":"homebrew/tesla-menu/#information","title":"Information","text":"

Tesla-Menu is an overlay menu developed by WerWolv, Tesla-Menu is comparable to Rosalina menu on the 3DS and its purpose is to be able to load community made overlays for Homebrew apps and sysmodules that can be accessed at any time. Below you can find common use cases for Tesla-Menu. The official Github page for Tesla-Menu can be found here.

Dependencies

Tesla-Menu is dependent on a sysmodule called nx-ovlloader, this sysmodule is responsible for loading ovlmenu.ovl from sd:/switch/.overlays.

"},{"location":"homebrew/tesla-menu/#common-use-cases-for-tesla-menu","title":"Common use cases for Tesla-Menu:","text":""},{"location":"homebrew/tesla-menu/#installation-requirements","title":"Installation requirements:","text":""},{"location":"homebrew/tesla-menu/#installation-instructions","title":"Installation instructions:","text":"
  1. Boot into Hekate and go to Tools > USB Tools > SD Card, then plug your Switch into your PC via USB.
  2. Your microSD card should now be accessible on your PC, open it.
  3. Extract both .zip files to a location on your computer.
  4. Copy the contents of each (extracted) .zip file to the root of your microSD card.
  5. Boot into CFW.
"},{"location":"homebrew/tesla-menu/#opening-tesla-menu","title":"Opening Tesla-Menu","text":"

Tesla-Menu can be opened by pressing L + R Stick press (R3) + DPAD down, assuming you use the default configuration.

"},{"location":"homebrew/tesla-menu/#commonly-used-tesla-menu-overlays","title":"Commonly used Tesla-Menu overlays","text":""},{"location":"homebrew/tesla-menu/#troubleshooting","title":"Troubleshooting","text":""},{"location":"homebrew/tesla-menu/#my-switch-crashes-on-boot-after-i-installed-tesla-menunx-ovlloader","title":"My Switch crashes on boot after I installed Tesla-Menu/nx-ovlloader!:","text":"

Cause: If your Switch crashes with Error code 2001-0123 (0xf601) and Title ID 420000000007E51A, you didn't successfully install Tesla-Menu or you aren't using the latest release of Tesla-Menu, re-follow the installation instructions above.

"},{"location":"homebrew/tesla-menu/#my-switch-crashes-when-i-open-an-overlay-via-tesla-menu","title":"My Switch crashes when I open an overlay via Tesla-Menu!:","text":"

Cause: If your Switch crashes with Error code 2001-0123 (0xf601) and Title ID 420000000007E51A, the overlay you're trying to open/use isn't up to date. Check its source repository for updates.

"},{"location":"homebrew/tesla-menu/#tesla-menu-is-only-showing-while-on-the-main-menu-and-not-in-game","title":"Tesla-Menu is only showing while on the main menu and not in-game!:","text":"

Cause: This issue will only happen when the Switch is docked, ensure that you've set the \"Screen size\" in System Settings > TV Output to 100%. Adjust your TV/monitor to fit the entirety of the screen of your Switch using its OSD (On Screen Display) or remote.

"},{"location":"homebrew/tesla-menu/#tesla-menu-isnt-opening-when-i-press-the-correct-button-combination","title":"Tesla-Menu isn't opening when I press the correct button combination!:","text":"

Assuming you've followed the installation instructions successfully, this is probably due to the archive bit being set on one or more folders/files on your microSD card. This is usually the result of copying files to a microSD card via a Mac. If you are experiencing this issue, try running the archive bit fixer utility via Hekate for all files.

This can be done by booting into Hekate and going to Tools > Arch bit \u2022 RCM Touch \u2022 Pkg1/2 > Fix Archive Bit.

"},{"location":"user_guide/getting_started/","title":"Getting Started","text":"

About modchipped Switch console users

If you already know you have a modchipped Switch console, you can skip ahead to the Modchip Introduction page.

"},{"location":"user_guide/getting_started/#finding-your-serial-number","title":"Finding your serial number","text":"

In the RCM path, we'll first determine if your Switch is vulnerable to fusee-gelee, the exploit we will be using to launch CFW.

The fusee-gelee vulnerability was discovered independently by different Switch hacking teams, who all independently released versions of the exploit in April 2018. Nintendo and NVIDIA were informed 90 days before these releases, and patched consoles were launched by mid-2018. NVIDIA publicly acknowledged the flaw in April as well. In July 2019, Nintendo announced updated consoles: the Switch Lite (HDH-001), and a new model of original Switch (HAC-001(-01)/\"V2\") with better battery life. Both of these new models use the Tegra X1+ (also known as Mariko, the T214, and T210B01) with a brand-new bootROM, and cannot currently be hacked without a modchip.

Patched and Mariko units can be identified by their serial number. This number can be found in the Settings applet at System -> Serial Information. You can also find it on the bottom of the console, adjacent to the charging port. However, it is always more accurate to use the serial reported in Settings instead, especially if you aren't the original owner of the console.

"},{"location":"user_guide/getting_started/#determining-if-your-switch-is-vulnerable","title":"Determining if your Switch is vulnerable","text":"

The community has crowdsourced a list of known serial numbers which are vulnerable to fusee-gelee.

Notice

If you are unsure if your serial is patched, you can test your console yourself following the instructions here.

"},{"location":"user_guide/getting_started/#serial-list","title":"Serial list","text":"

The following information is based on this GBATemp thread.

Serial Numbers Unpatched Potentially patched Patched XAW1 XAW10000000000 to XAW10074000000 XAW10074000000 to XAW10120000000 XAW10120000000 and up XAW4 XAW40000000000 to XAW40011000000 XAW40011000000 to XAW40012000000 XAW40012000000 and up XAW7 XAW70000000000 to XAW70017800000 XAW70017800000 to XAW70030000000 XAW70030000000 and up XAJ1 XAJ10000000000 to XAJ10020000000 XAJ10020000000 to XAJ10030000000 XAJ10030000000 and up XAJ4 XAJ40000000000 to XAJ40046000000 XAJ40046000000 to XAJ40060000000 XAJ40060000000 and up XAJ7 XAJ70000000000 to XAJ70040000000 XAJ70040000000 to XAJ70050000000 XAJ70050000000 and up XAK1 N/A XAK10000000000 and up N/A

If your serial number is not listed above, your device is not vulnerable to the fusee-gelee exploit.

"},{"location":"user_guide/getting_started/#version-table","title":"Version Table","text":"

Note

While the \"New\" Switch (HAC-001(-01)'s earliest possible firmware is 7.0.1, it is not vulnerable to d\u00e9j\u00e0 vu, the exploit used by Nereba and Caffeine, because of hardware differences from the \"old\" Switch (HAC-001).

Firmware Version Unpatched Switch systems (HAC-001) Patched Switch systems (HAC-001) \"New\" Switch (HAC-001(-01) Switch Lite (HDH-001) 1.0.0 Nereba or RCM N/A N/A N/A 2.0.0 - 3.0.2 Caffeine or RCM N/A N/A N/A 4.0.0 - 4.1.0 Caffeine or RCM Caffeine N/A N/A 5.0.0 - 7.0.0 RCM Modchip / Wait for CFW N/A N/A 7.0.1 RCM Modchip (no software exploit) Modchip (no software exploit) N/A 8.0.1 RCM Modchip (no software exploit) Modchip (no software exploit) Modchip (no software exploit) 8.1.0 and up RCM Modchip (no software exploit) Modchip (no software exploit) Modchip (no software exploit)

About Mariko Switch models

All Mariko (V2) Switch models (HAC-001(-01), HDH-001, HEG-001) are currently unhackable via software. If Modchip is listed as a method for your console model, then that means the device is currently unhackable without a hardware modification (modchip). If there are theoretical exploits that may lead to CFW or homebrew for that device, you also have the choice to \"wait\" for their release. These exploits may (and will likely) never launch and there is NO ETA, so what you choose to do is up to you. This guide assumes you have a functional modchip installation if you do have a Patched console.

"},{"location":"user_guide/getting_started/#console-preparation","title":"Console Preparation","text":""},{"location":"user_guide/getting_started/#important","title":"Important","text":"

Before setting up for homebrew, install at least one eShop title to utilize \"title takeover\", an Atmosph\u00e8re feature that allows homebrew to use more resources than they would normally have. Try downloading a free game (like Fallout Shelter), application (like YouTube), or a game demo (like 10 Second Run RETURNS). Running the Homebrew Menu via a game cartridge is an alternative, but requires the game to be inserted any time you want to launch the Homebrew Menu. Generally, title takeover doesn't permanently alter the donor game or application. Once you obtain any bootable title, you are prepared to continue on with the guide.

Frequently Asked Questions about this page "},{"location":"user_guide/getting_started/#if-your-switch-is-not-patched-click-the-button-below-to-follow-the-rcm-path-of-the-guide","title":"If your Switch is not patched, click the button below to follow the RCM path of the guide.","text":"

Continue to RCM

"},{"location":"user_guide/getting_started/#if-your-switch-is-patched-and-modchipped-click-the-button-below-to-follow-the-modchip-path-of-the-guide","title":"If your Switch is patched and modchipped, click the button below to follow the Modchip path of the guide.","text":"

Continue to Modchip introduction

"},{"location":"user_guide/all/cfw_environment/","title":"Choosing an Environment","text":""},{"location":"user_guide/all/cfw_environment/#cfw-on-sysmmc-vs-cfw-on-emummc","title":"CFW on sysMMC vs. CFW on emuMMC","text":"

A \"CFW Environment\" describes the context in which you are using custom firmware (CFW). As a reminder, custom firmware is never permanently installed, and runs independently on top of the system firmware. This means that you never have to commit to where you want to use custom firmware.

Atmosph\u00e8re temporarily patches HOS (HorizonOS, operating system of the switch) to enable customisations. You can choose what version of HOS it patches, each time you turn on your system. Each option has its own benefits and drawbacks.

Generally, sys- refers to the physical storage chip (sysMMC/eMMC) inside of your Switch. It stands for \"system\".

Generally, emu- refers to a virtual version of the eMMC (internal storage), running from a microSD card. It stands for \"emulated\".

For more information on terminology, please refer to the glossary.

You get to decide! Your choices are between using the internal storage or emulated storage. We will go over the advantages and disadvantages of either decision below.

"},{"location":"user_guide/all/cfw_environment/#emummc-cfw-recommended","title":"emuMMC CFW (Recommended)","text":""},{"location":"user_guide/all/cfw_environment/#cfw-on-emummc-has-the-following-benefits","title":"CFW on emuMMC has the following benefits:","text":""},{"location":"user_guide/all/cfw_environment/#the-following-drawbacks","title":"The following drawbacks:","text":""},{"location":"user_guide/all/cfw_environment/#and-the-following-considerations","title":"And the following considerations:","text":"

No parity between sysMMC and emuMMC (Game installs, save data, and system settings will be separated when you boot between the two)

"},{"location":"user_guide/all/cfw_environment/#in-particular-here-are-just-some-popular-use-cases-for-cfw-on-emummc","title":"In particular, here are just some popular use-cases for CFW on emuMMC:","text":"

If you prefer foolproofing, and a separation between official features and custom features, you may consider using CFW on emuMMC. In this guide, emuMMC is assumed to be utilised for offline play.

About this path

This path of the guide also includes sysCFW as launch option.

To proceed with CFW on emuMMC, click on the button below:

Continue with the emuMMC path

"},{"location":"user_guide/all/cfw_environment/#syscfw-cfw-on-sysmmc","title":"sysCFW (CFW on sysMMC)","text":""},{"location":"user_guide/all/cfw_environment/#cfw-on-sysmmc-has-the-following-benefits","title":"CFW on sysMMC has the following benefits:","text":""},{"location":"user_guide/all/cfw_environment/#the-following-drawbacks_1","title":"The following drawbacks:","text":""},{"location":"user_guide/all/cfw_environment/#in-particular-here-are-just-some-popular-use-cases-for-syscfw","title":"In particular, here are just some popular use-cases for sysCFW:","text":"

If you prefer snappiness, online play, and a seamless transition between official features and custom features, you may consider using CFW on sysMMC. In this guide, sysMMC is assumed to be utilised for online play.

To proceed with CFW on sysMMC, click on the button below:

Continue with the sysCFW path

"},{"location":"user_guide/all/cfw_environment/#modchip-instability","title":"Modchip Instability","text":"

About Modchipped Switch console users

Modchips directly infiltrate communication with the internal storage chip. Due to this, there are slight chances of NAND backups being tainted with corrupted data. If a bad backup is restored to sysNAND, the console can be bricked, and a modchip alone won't be able to fix it. To be safe, we recommend setting up an emuMMC on a console with a modchip, verify BOOT0/1 backups using tools like NXNandManager (Windows) or test NAND backups by running them as emuMMCs before you flash them to the sysNAND.

Frequently Asked Questions about this page "},{"location":"user_guide/all/launching_cfw/","title":"Launching CFW","text":"

Now that the preparation work is out of the way, we're finally ready to launch custom firmware on the Switch.

Unlike systems such as the DSi, Wii, or 3DS, Switch CFW is currently volatile. It will only work as long as your Switch is on. As soon as your Switch completely loses power for any reason (shutting down, battery dying, etc.), CFW will no longer be active and you will need to follow these instructions again.

Keep emuMMC offline at all times

Your emuMMC (emuNAND) should never connect to Nintendo. For online play, eShop browsing, or any other Nintendo online activity, use your sysNAND. Using both emuMMC and sysNAND online will likely result in a ban.

Instructions for emuMMCInstructions for sysCFW

Rebooting to Hekate

Once booted into CFW, you can easily get back to Hekate by holding the power button, and selecting Restart in the power menu or by using the \"reboot to payload\" homebrew app in the homebrew menu. (Note that while the Reboot to Payload app app does not work on modchipped Switch consoles, those already automatically run payloads upon reboot in the first place by default.)

"},{"location":"user_guide/all/launching_cfw/#instructions","title":"Instructions:","text":"
  1. From Hekate's Home menu, navigate to the Launch menu.
  2. Find Atmosphere FSS0 emuMMC and launch it.

Hekate is now booting into your emuMMC. To verify that your emuMMC launched properly, open System Settings and navigate to System. You should see AMS next to the version number (AMS indicating that you're booted into Atmosphere), as well as an E at the end (indicating you are booted into emuMMC).

"},{"location":"user_guide/all/launching_cfw/#instructions_1","title":"Instructions:","text":"
  1. From Hekate's Home menu, navigate to the Launch menu.
  2. Find Atmosphere FSS0 sysMMC and launch it.

Hekate is now booting into sysCFW. To verify that sysCFW launched properly, open System Settings and navigate to System. You should see AMS next to the version number (AMS indicating that you're booted into Atmosphere), as well as an S at the end (indicating you are booted into sysCFW).

"},{"location":"user_guide/all/launching_cfw/#launching-the-homebrew-menu","title":"Launching the Homebrew Menu","text":"

You will now be able to launch the Homebrew Menu by opening the album or by holding the R button while launching any game (including demos/cartridges), or application (e.g. YouTube/Hulu). If R is not held, the game or application will launch like normal.

A note about using the album for the Homebrew Menu

"},{"location":"user_guide/all/launching_cfw/#about-the-included-homebrew-apps","title":"About the included Homebrew apps","text":"

See the Homebrew tab for information about what the included Homebrew apps do and if you want to check out more Homebrew apps and read about sysmodules like MissionControl, ldn_mitm, sys-con and more.

If you wish to install more homebrew apps, place them (.nro files) in the switch folder on your microSD card.

"},{"location":"user_guide/all/launching_cfw/#installing-androidlinux","title":"Installing Android/Linux","text":"

If you've partitioned your microSD card for preparation of Android/Linux earlier, you can continue with the installation of Android/Linux here with the guides below:

Android installation guide Linux installation guide

Frequently Asked Questions about this page "},{"location":"user_guide/all/making_essential_backups/","title":"Making Essential Backups","text":""},{"location":"user_guide/all/making_essential_backups/#making-a-nand-backup","title":"Making a NAND Backup","text":"

Important

A NAND backup is crucial to have, it's a full backup of the internal storage of your Switch and can be used to restore the device to a working state in case of emergencies. DO NOT SKIP THIS STEP

Once the backup is finished, keep it somewhere safe. The best backup is the one you have but never need, and the worst backup is the one you need but never made. To save space, it's recommended to compress the end-result with a .zip file or something similar.

It's highly recommended that you use an microSD card that is formatted to FAT32 and has at least 32 gigabytes of space free. This will still work on smaller cards, but it's not ideal.

"},{"location":"user_guide/all/making_essential_backups/#instructions","title":"Instructions:","text":"
  1. Enter RCM and inject the Hekate payload.
  2. Use the touch screen or Joy-Cons to navigate to Tools > Backup eMMC.
  3. Tap on eMMC BOOT0 & BOOT1
  4. Tap on Close to continue, then tap on eMMC RAW GPP
  5. Go to the top right and press Close > Home.
  6. Navigate to Tools > USB tools > SD card and plug your Switch into your PC via USB.
  7. Copy the backup folder on your microSD card to a safe location on your PC.
  8. Once done, you may delete the backup folder from the root of your microSD card and eject the UMS device safely from within your computer's operating system, then return to Hekate's Home menu.
About microSD cards with less than 32GB of free space"},{"location":"user_guide/all/making_essential_backups/#on-fat32-formatted-microsd-cards-or-cards-that-have-less-than-32-gigabytes-of-space-available-the-nand-backup-will-be-split-into-1-or-2-gigabyte-parts","title":"On FAT32 formatted microSD cards or cards that have less than 32 gigabytes of space available, the NAND backup will be split into 1 or 2 gigabyte parts.","text":"

Hekate will stop producing these parts when it runs out of space. When this happens, do the following:

  1. Press OK when Hekate tells you to back up your stuff.
  2. Press Close > Close > USB Tools > SD Card and connect your Switch to your PC via USB.
  3. Your microSD card should now be accessible on your PC, move the backup folder on the root of your microSD card to a safe location on your PC.
  4. Eject the UMS device safely from within your computer's operating system and close the UMS window in Hekate.
  5. Press Close > Backup eMMC > eMMC RAW GPP and continue backing up your NAND.
  6. Repeat step 2-5 until the NAND is completely dumped.
  7. Once done, return to Hekate's Home menu.
"},{"location":"user_guide/all/making_essential_backups/#booting-into-cfw","title":"Booting into CFW","text":" Frequently Asked Questions about this page "},{"location":"user_guide/all/partitioning_sd/","title":"Partitioning the microSD Card and creating the emuMMC","text":""},{"location":"user_guide/all/partitioning_sd/#what-you-need","title":"What you need:","text":"

Partitioning WILL wipe all data on your microSD card!

In case you missed the warning earlier, your microSD card will be wiped during this page. Go to Tools > USB Tools > SD Card, plug your switch into your PC via USB and back up the contents of your microSD card to your PC if you haven't done so yet. If you don't mind redownloading all the games stored on the microSD card and/or all other (potentially important) files getting deleted, you may skip this.

"},{"location":"user_guide/all/partitioning_sd/#instructions","title":"Instructions:","text":"
  1. Navigate to Tools > Partition SD card
  2. Set the emuMMC (RAW) slider to 29 FULL in the middle of the bar.
  3. Navigate to Next Step at the bottom right, then select Start in the menu that appears.
  4. From hekate's Home menu, navigate to emuMMC > Create emuMMC > SD Partition > Part 1 and wait for Hekate to complete creating the emuMMC.
  5. Close the emuMMC creation menu by navigating to the Close button, then navigate to Change emuMMC > SD RAW 1 and press the Close button twice in the top right to return to hekate's Home menu.
  6. Once done, go to Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  7. Continue with the next step of the guide.

Your microSD card is not showing up or Windows complaining about an unreadable drive

If you get the issue that Windows says the microSD card is unreadable and wants to format it, do not format! This is likely your emuMMC partition. After partitioning your SD, your microSD will show up as 2 drives on your PC. Use the accessible drive. If your microSD card isn't showing up at all, ensure that you're using a USB cable capable of data transfer and that, if you use Windows, Windows has assigned a drive letter to the FAT32 partition of your SD. If you still experience errors, join the NH-Discord server for support.

Continue to SD Preparations

"},{"location":"user_guide/all/partitioning_sd_syscfw/","title":"Formatting and/or partitioning the microSD Card","text":""},{"location":"user_guide/all/partitioning_sd_syscfw/#what-you-need","title":"What you need:","text":"

Partitioning WILL wipe all data on your microSD card!

In case you missed the warning earlier, your microSD card will be wiped during this page. Go to Tools > USB Tools > SD Card, plug your switch into your PC via USB and back up the contents of your microSD card to your PC if you haven't done so yet. If you don't mind redownloading all the games stored on the microSD card and/or all other (potentially important) files getting deleted, you may skip this.

"},{"location":"user_guide/all/partitioning_sd_syscfw/#instructions","title":"Instructions:","text":"
  1. Navigate to Tools > Partition SD card
  2. Navigate to Next Step at the bottom right, then select Start in the menu that appears.
  3. Once done, go to Hekate's Home menu and then Tools > USB Tools > SD Card and plug your Switch into your PC via USB.
  4. Continue with the next step of the guide.

Your microSD card is not showing up

If your microSD card isn't showing up at all, ensure that you're using a USB cable capable of data transfer and that if you use Windows, Windows has assigned a drive letter to the FAT32 partition of your microSD card. If you still experience errors, join the NH-Discord server for support.

Continue to SD Preparations

"},{"location":"user_guide/all/sd_preparation/","title":"microSD Card preparations","text":""},{"location":"user_guide/all/sd_preparation/#information","title":"Information","text":"

We will now place the required files for the Atmosph\u00e8re custom firmware and some additional homebrew files on the microSD card.

Atmosphere has its own bootloader, called fusee. For the purposes of this guide we will be using Hekate instead, so that we can back up the system's NAND (internal storage) and take advantage of other advanced features in the future.

File name extensions

If you use Windows, you should enable file name extensions before continuing. See this link for a guide on how to do this.

"},{"location":"user_guide/all/sd_preparation/#what-you-need","title":"What you need:","text":""},{"location":"user_guide/all/sd_preparation/#instructions","title":"Instructions:","text":"
  1. Navigate to the accessible drive.
  2. Copy the contents of the Atmosph\u00e8re.zip file to the root of your microSD card.
  3. Copy the bootloader folder from the Hekate .zip file to the root of your microSD card.
  4. Copy the bootloader folder from the bootlogos.zip file to the root of your microSD card.
  5. Copy hekate_ipl.ini to the bootloader folder on your microSD card.
  6. Create a folder named hosts inside the atmosphere folder on your microSD card, and put emummc.txt inside of the hosts folder.
  7. Copy JKSV.nro, ftpd.nro, NxThemesInstaller.nro, NX-Shell.nro and Goldleaf.nro to the switch folder on your microSD card.
  8. If you were already using your microSD card as a storage device for your games and backed up the Nintendo folder before partitioning your microSD card, please place it back on the root of your microSD card now.

    About emummc.txt

    Putting the emummc.txt file provided by this guide into /atmosphere/hosts will prevent your emuMMC (emuNAND) from connecting to Nintendo. Not doing this will likely result in a ban.

    Your microSD card should look similar to the image below. The Nintendo folder will not be present if your Switch has not already booted with the microSD card inserted and the emuMMC folder will not be present if you're following the sysCFW path of the guide/you haven't created an emuMMC! payload.bin will not be present if you're using an unpatched Switch.

Continue to Making Essential Backups

"},{"location":"user_guide/modchip/","title":"Introduction","text":""},{"location":"user_guide/modchip/#introduction-to-modchips","title":"Introduction to Modchips","text":""},{"location":"user_guide/modchip/#prerequisites","title":"Prerequisites","text":"

A modchip is a physical modification to the motherboard of your Switch. It cannot be installed without decent microsoldering experience. You can outsource this work to people who are willing to do the job for you, or you can also view the following guide if you are willing to install one yourself.

Modchip Installation guide

Note: The above guide is not hosted or supported by NH Server; we cannot provide support for reviving consoles ruined by inexperience.

"},{"location":"user_guide/modchip/#information","title":"Information","text":"

Unlike \"unpatched\" consoles, modchips enable CFW via CPU voltage glitching, which bypass bootROM firmware verifications. It allows a payload.bin file to be launched in place of BOOT0, loaded via a modchip firmware module named sdloader. This is much different from RCM and its exploit, fusee-gelee, which \"unpatched\" consoles use. Modchips allow any console, including all patched consoles, to run CFW!

"},{"location":"user_guide/modchip/#general-knowledge","title":"General knowledge","text":"

Patched Switch consoles, except certain original V1 consoles made from 2017 to mid-2018, are immune to the fusee-gelee exploit in RCM. Attempting to inject a payload on a Patched console will be unsuccessful.

Depending on your modchip's firmware, you may not be able to boot the console without a microSD card inserted. This means without a microSD inserted at all times, your Switch becomes unusable.

If you do turn on your Switch without a microSD card inserted, you should end up at a splash screen saying something along the lines of NO SD.

About modchips and their firmware versions

Some modchip firmwares (e.g., Spacecraft-NX, Hwfly-NX and the Picofly firmware) allow bypassing sdloader by holding one - or both - of the volume buttons during power-on, enabling normal boot without a microSD card. Not all modchips support manual firmware updates.

Modchipped Switch consoles allow untethered, coldboot CFW loading, directly entering custom firmware without external devices like dongles or jigs. This is in contrast to the tethered coldboot \"RCM\" entrypoint.

Running CFW on modchipped consoles is more simplistic, as it only requires you to have payload.bin present on the root of your microSD card when you turn on the system.

Furthermore, this guide assumes you have a functional modchip installation.

"},{"location":"user_guide/modchip/#important","title":"Important","text":"

If you do decide to follow the recommended emuMMC path later in the guide, make sure you disable Automatic Save Data Cloud backups/downloads beforehand as well as making sure the Switch is set as Primary Console.

Disclaimer

We ONLY support the Picofly modchip (the RP2040 Zero development board and the \"modchip variant\" of it). Installing a modchip safely is your responsibility, so if you don't trust yourself, get someone trusted to perform the install. There is always a risk of your Switch being rendered dysfunctional when messing with its hardware without proper experience. The NH-Discord server is not for fixing bad/failed modchip installations. We can give advice and installation tips for the installation as long as it's for a Picofly modchip.

Continue to Preparing Hekate

Frequently Asked Questions about this page "},{"location":"user_guide/modchip/preparing_hekate/","title":"Payload and bootloader folder placement","text":"

To get ready for formatting and/or partitioning your microSD card, we will need to prepare and place the required files on the microSD card.

Following the guide will delete everything on your microSD card!

Later in the guide, you will be formatting and/or partitioning your microSD card. This means that all data on the microSD card will be lost. Now is a good time to back up all of its data to a safe place (for example, on your PC or external drive) so that you can restore it later. You can do this by following the instructions below.

"},{"location":"user_guide/modchip/preparing_hekate/#what-you-need","title":"What you need:","text":""},{"location":"user_guide/modchip/preparing_hekate/#instructions","title":"Instructions:","text":"
  1. Extract the Hekate .zip to a location on your computer.
  2. Insert your microSD card into your computer.
  3. Copy the Nintendo folder (and any other important data) from the root of your microSD card to a safe space on your device.
  4. Inside of the extracted Hekate folder, you will find the bootloader folder and the hekate_ctcaer_(version).bin payload.
  5. Copy the bootloader folder and hekate_ctcaer_(version).bin payload to the root of your microSD card.
  6. Rename the hekate_ctcaer_(version).bin payload to payload.bin
  7. Insert your microSD card back into your Switch, then turn it on.
  8. You should now be loaded into the Hekate GUI (Nyx), pictured below, within seconds.

Warning

If your Switch does not load into the Hekate GUI, or shows a No SD Card/No Payload screen when turning on the console, ensure that you inserted your microSD card and that Hekate's payload.bin is on the root of the microSD card.

Continue to choosing your CFW environment

Frequently Asked Questions about this page

Q: Can I use a microSD card with existing data, or does it need to be formatted specifically for this process? A: It is recommended that you use a microSD that is already formatted as FAT32 before starting. In addition, it is important that the microSD card does not have any data from other Switch consoles already on it.

Q: What makes Hekate the recommended choice in this guide? A: Hekate is a polished, multi-purpose bootloader for the Switch. It has the tools to facilitate simple usage of custom firmware and custom operating systems, and aids with organisation and formatting later on in this guide.

Q: How do you pronounce \"Hekate\"? A: Hekate comes from Greek. The most commonly accepted pronunciations are \"HEK-ate\", \"HEK-uh-tee\", and \"hek-AH-tay\".

Q: What role does the /bootloader folder play in the overall functionality of Hekate? A: The bootloader folder contains crucial parts of Hekate that can't fit in the injectable RCM/modchip payload, such as Nyx; Hekate's touch-enabled GUI. If you start Hekate without these files on your microSD, Hekate's functionality will be severely limited.

Q: How often should I check for updates to Hekate, and what benefits do newer releases bring to the process? A: Nintendo Homebrew's #announcements channel will automatically poll for updates to Atmosph\u00e8re and Hekate, letting you know when updates are available for them. In general, you'll want to look for updates whenever a major Switch system update is launched, as major updates will stop Horizon from booting until Hekate and Atmosph\u00e8re are updated accordingly.

Q: Does this process have any effect on the Switch's system or data? A: No, nothing in the guide has had any permanent effect on the Switch so far.

"},{"location":"user_guide/rcm/","title":"RCM","text":""},{"location":"user_guide/rcm/#about-rcm","title":"About RCM","text":"

RCM (short for ReCovery Mode) is a pre-boot mode for Tegra processors that allows NVIDIA and Nintendo to send the Switch tiny programs for various internal uses. On unpatched consoles, once a payload was sent, then quickly copied into the memory buffer behind the stack, it overflowed the memory buffer into the stack. This leads to a \"smashed stack\" and unsigned code execution within a bootROM context, giving us access to nearly everything on the console. We use it here to launch Atmosph\u00e8re.

If you choose the emuMMC path introduced later in the guide, it'll be important to disable the Automatic Save Data Cloud function beforehand, as well as making sure the Switch is set as the primary console.

Continue to Entering RCM

Frequently Asked Questions about this page "},{"location":"user_guide/rcm/entering_rcm/","title":"Entering RCM","text":""},{"location":"user_guide/rcm/entering_rcm/#entering-rcm","title":"Entering RCM","text":"

The Switch's Tegra X1 processor has a recovery mode referred to shorthand as RCM, intended to be useless for end-users. Fortunately, due to the fusee-gelee vulnerability, this special mode acts as our gateway into CFW.

Methods to enter RCM can require nothing more than household items (not recommended) to affordable tools ($5-10) available on platforms like AliExpress and Amazon. Avoid the \"metal bridge\" or \"paperclip method\" as it can damage your console. You can also consider 3D printing necessary tools.

Patched Switch

Note that patched units can enter RCM, but it is not possible to send a payload on those systems. Also note that RCM is a different recovery mode than the one accessed by holding Volume Up, Volume Down and powering on your console.

Information about the methods below

The order of methods on this page is in the order of ease. The easiest method to immediately accomplish is the RCM Jig method. The most advanced/difficult methods are mentioned in the other tabs and should not be attempted by most people as they require voiding your warranty and/or soldering. USING A PAPERCLIP OR TIN FOIL CAN/WILL DAMAGE YOUR CONSOLE, DO NOT DO THIS!

"},{"location":"user_guide/rcm/entering_rcm/#instructions","title":"Instructions:","text":"
  1. Power off the Switch and short the pins on the Joy-Con rail using one of the methods listed below.
  2. While holding the Volume Up button, press the Power button once while holding Volume Up.
  3. Once your Switch is in RCM, remove the RCM jig (if applicable) and continue with the next page of the guide by clicking on the button at the bottom of this page.
RCM JigSoldered Joy-Con Pads - Physical RCM ButtonSoldered Joy-Con Pads - 7 & 10Soldered Joy-Con Pads - 9 & 10Bent Joy-Con Pins (Not recommended)

Some jig designs use paperclips, inheriting the same risks as the \"metal bridge\" / \"paperclip method\" and should not be done.

Once you have successfully entered RCM, you can take the jig out of the Joy-Con rail.

This method is similar to the \"metal bridge\" / \"paperclip method\", but is more reliable and safer in many cases. Jigs hold a wire in place so the correct pins (10 and a ground) are reliably shorted.

This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart.

This method comes to us from the mind of pbanj on Discord. All pictures of this method in action were provided by him, with some supplementary images provided by eip618 on Discord.

The goal of this method is to open the right Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however you will be soldering wires to pins 7 and 10 (shown below) and wiring them to the \"rail release button\" at the top back of the right Joy-Con.

This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart.

The goal of this method is to open the right handed Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however the goal is to solder pins 7 and 10 (shown below) together with a surface-mount 0805 10k resistor. Apart from using a physical switch/button, this is currently considered the safest method that involves soldering to pads.

This method will result in the right Joy-Con being seen as \"detached\" while physically connected to the Switch, so it will not be able to charge. This method may result in the Joy-Con being permanently detected as wireless if you update the Joy-Con firmware while this mod is installed. In the latter case, fixing this requires opening up the Joy-Con and reseating the battery. It is recommended to solder pads 7 and 10 together with a resistor instead.

This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart.

The goal of this method is to open the right Joy-Con to the point that you can reach the contact pads easily. This is similar to the previous method, however the goal is to solder pads 9 and 10 (seen below) together. This can either be done using a small wire, or directly bridging the pads with solder.

This method will result in the right Joy-Con being detected as in wireless mode while attached to the Switch, and this method may result in the Joy-Con being permanently detected as wireless if you update the Joy-Con firmware while this mod is installed. In the latter case, fixing this requires opening up the Joy-Con and reseating the battery.

This method requires opening your right Joy-Con, voiding its warranty. Not for the faint of heart.

The goal of this method is to open the right handed Joy-Con to the point that you can reach the contact pads easily, and use a thin object such as a knife to gently bend pin 9 and 10 (shown below) slightly up and towards each other so they touch, shorting them.

Continue to Sending a Payload

"},{"location":"user_guide/rcm/entering_rcm/#the-rcm-jig-pictured-below-is-the-model-we-recommend","title":"The RCM jig pictured below is the model we recommend:","text":"

Making your own RCM Jig

If you plan on making your own jig, the second image lays out the right Joy-Con pad out on the console. Make sure your jig NEVER touches pin 4. Pin 4 provides 5 volts of power to the Joy-Con, and can permanently damage the rail or console if shorted.

"},{"location":"user_guide/rcm/entering_rcm/#joycon-pad-pinout","title":"JoyCon pad pinout:","text":"

In order to start this method you will want to take two lengths of wire, and wrap one end of each into a small circle.

"},{"location":"user_guide/rcm/entering_rcm/#wire-reference","title":"Wire reference:","text":"

You will then want to take the circular end of one of the wires and add a small amount of solder, keeping it mostly flat (ONLY DO THIS TO ONE OF THE WIRES!). You will then glue this wire down to the below point on the rail release button. Make sure glue doesn't cover the top of the solder/wire as it will act as a contact point. Also, ensure that you leave enough space for the button to function correctly. Try pushing the button from the outside and observing its travel path so that you can see where and how you should safely glue the solder glob.

"},{"location":"user_guide/rcm/entering_rcm/#joy-con-button","title":"Joy-Con button:","text":""},{"location":"user_guide/rcm/entering_rcm/#joy-con-button_1","title":"Joy-Con button:","text":"

The first wire should now be in place as seen by the green circle below. The second wire does not need any solder, instead you will hold it in place using the screw as shown by the red circle in the picture below.

"},{"location":"user_guide/rcm/entering_rcm/#joy-con-button-in-place","title":"Joy-Con button in place:","text":"

Pressing the Joy-Con button in you should now notice the solder point you created making contact with the piece of metal held in by the screw. Once you have these elements in place you want to connect one wire to pad 7 and the other to pad 10 (it doesn't matter which is which). After that you have successfully created an RCM button on your Joycon. You will now need to hold down the Joycon release button when attempting to boot RCM.

"},{"location":"user_guide/rcm/entering_rcm/#successful-installation","title":"Successful installation:","text":""},{"location":"user_guide/rcm/entering_rcm/#joycon-pad-pinout_1","title":"JoyCon pad pinout:","text":"

Here is an example from stuck_pixel from the ReSwitched Discord server.

"},{"location":"user_guide/rcm/entering_rcm/#successful-installation_1","title":"Successful installation:","text":""},{"location":"user_guide/rcm/entering_rcm/#joycon-pad-pinout_2","title":"JoyCon pad pinout:","text":"

Below is an example from yami0666 from our Discord server.

"},{"location":"user_guide/rcm/entering_rcm/#successful-soldering-job","title":"Successful soldering job:","text":""},{"location":"user_guide/rcm/entering_rcm/#joycon-pinout","title":"JoyCon pinout:","text":"

Here is an example from sonlen on our Discord server.

"},{"location":"user_guide/rcm/entering_rcm/#bent-joy-con-pins","title":"Bent Joy-Con pins:","text":""},{"location":"user_guide/rcm/sending_payload/","title":"Sending a Payload","text":"

If you are here to test if your Switch is patched

Make sure you have put your device into RCM and downloaded Hekate. Once finished, if your console is not patched, continue with the \"Preparing Hekate\" section at the bottom of the page.

Now that the device is in RCM, we will need to send it a payload. The methods are mostly the same but slightly differ depending on what hardware you have available.

WindowsLinuxMacAndroidChromebook

If nothing happens after you send the payload

If your console's screen remains black after you've sent Hekate (or any other payload), it's possible your payload was corrupted, or that your console is patched. If your payload injector program shows that zero or 0x0000 bytes were sent, then it is patched. This isn't a one-time glitch or up for debate; it is patched. Consider an alternate method that isn't via RCM.

"},{"location":"user_guide/rcm/sending_payload/#what-you-need","title":"What you need:","text":""},{"location":"user_guide/rcm/sending_payload/#instructions","title":"Instructions:","text":"
  1. Install and run TegraRcmGUI.
  2. Navigate to the Settings tab, then press Install Driver and follow the on-screen instructions.
  3. Connect your Switch in RCM to your PC using the USB cable.
  4. Navigate to the Payload tab of TegraRcmGUI.
  5. Press the file button next to Inject payload, and navigate to and select the hekate_ctcaer_X.X.X.bin file.
  6. Click Inject payload to launch the payload you selected.
"},{"location":"user_guide/rcm/sending_payload/#driver-installation-with-zadig","title":"Driver installation with Zadig","text":"

Follow these steps if you face issues when installing the driver with TegraRcmGUI. You will need the latest version of Zadig.

  1. Launch Zadig. In the Options menu, be sure that List All Devices is enabled.
  2. Connect your Switch in RCM to your PC using the USB cable.
  3. In Zadig, select \"APX\" in the device list.
  4. Select libusbK (v3.1.0.0) in the driver list.
  5. Click Install Driver and wait for the installation to finish.
"},{"location":"user_guide/rcm/sending_payload/#what-you-need_1","title":"What you need:","text":""},{"location":"user_guide/rcm/sending_payload/#instructions_1","title":"Instructions:","text":"
  1. Download and run the payload injector from your terminal. You will need to run the injector as root, unless you follow the instructions at Linux injection without root.
  2. Connect your Switch in RCM to your PC using the USB cable.
  3. Run fusee-nano with: ./fusee-nano /path/to/hekate-ctcaer_X.X.X.bin
"},{"location":"user_guide/rcm/sending_payload/#what-you-need_2","title":"What you need:","text":""},{"location":"user_guide/rcm/sending_payload/#instructions_2","title":"Instructions:","text":"
  1. Download the latest release of CrystalRCM.
  2. Connect your Switch in RCM to your PC using the USB cable, make sure it's also detected in CrystalRCM.
  3. Mount the CrystalRCM.(version).dmg file, open the mounted disk image in File Explorer and copy the CrystalRCM.app file inside of the mounted disk image to any location on your Mac.
  4. Open the CrystalRCM.app app, then click Payload... and select the hekate_ctcaer_X.X.X.bin file.
  5. Once selected, click Push!. The payload should now be injected successfully.
"},{"location":"user_guide/rcm/sending_payload/#what-you-need_3","title":"What you need:","text":""},{"location":"user_guide/rcm/sending_payload/#instructions_3","title":"Instructions:","text":"
  1. Copy the hekate_ctcaer .bin file from the Hekate .zip file to a location on your phone.
  2. Launch Rekado on your phone.
  3. Navigate to Payloads (Signified by a downwards arrow with a line), then press the + button at the bottom right.
  4. Navigate to your hekate_ctcaer .bin file and tap it to add it to Rekado's menu.
  5. Optional, but recommended: Navigate to Rekado's settings in the top right and enable Hide bundled.
  6. Connect your Switch in RCM to your phone using the USB cable.
  7. If prompted, grant Rekado access to the Switch.
  8. Select the hekate_ctcaer_X.X.X.bin file in the dialog that pops up.
"},{"location":"user_guide/rcm/sending_payload/#what-you-need_4","title":"What you need:","text":"

About USB-C

If your Chromebook has a USB-C port, do note that this will not work using a C-C cable.

"},{"location":"user_guide/rcm/sending_payload/#instructions_4","title":"Instructions:","text":"
  1. Go to the injection website and scroll all the way down
  2. Select the \"Upload Payload\" option and upload the hekate_ctcaer_X.X.X.bin file from the Hekate .zip file.
  3. Connect your Switch in RCM to your Chromebook using the USB cable.
  4. Select \"Do the thing\". A pop-up will appear. Click the APX option.
  5. Press the Connect button and the payload will be injected.
"},{"location":"user_guide/rcm/sending_payload/#preparing-hekate","title":"Preparing Hekate","text":"

We will prepare the microSD card for formatting/partitioning before going to the next page. Removing the microSD card while in Hekate is safe so turning off the console is not necessary and keeping it on will save time that would be spent reinjecting the payload.

Following the guide will delete everything on your microSD card!

Later in the guide, you will be formatting and/or partitioning your microSD card. This means that all data on the microSD card will be lost. Now is a good time to back up all of its data to a safe place (for example, on your PC or external drive) so that you can restore it later. You can do this by following the instructions below.

"},{"location":"user_guide/rcm/sending_payload/#what-you-need_5","title":"What you need:","text":""},{"location":"user_guide/rcm/sending_payload/#instructions_5","title":"Instructions:","text":"
  1. Without turning your Switch off, remove the microSD card from the Switch.
  2. Insert your microSD card into your computer.
  3. Copy the Nintendo folder (and any other important data) from the root of your microSD card to a safe space on your device.
  4. Extract the Hekate .zip to a location on your computer
  5. Inside the extracted Hekate folder you will find a folder named bootloader.
  6. Copy the bootloader folder to the root of your microSD card.
  7. Put your microSD card back into your Switch.
  8. Use volume up and volume down to navigate the Hekate menu. Hover over 'reload' and press the power button to select. Your screen should now have the Hekate GUI (Nyx) pictured below.

Continue to choosing your CFW environment

"}]} \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index d789b378e9e0111e0b6bcbc3169de29d26c6e7c9..62a388085e35b070ae7c882fbc87b56f5a6627e5 100644 GIT binary patch delta 15 Wcmcb?a)X6UzMF&Ng6~GQASM7P#{{7O delta 15 Wcmcb?a)X6UzMF$1RcIqy5EB3;9s~OT diff --git a/user_guide/all/partitioning_sd/index.html b/user_guide/all/partitioning_sd/index.html index 28d390aa..6fd35d80 100644 --- a/user_guide/all/partitioning_sd/index.html +++ b/user_guide/all/partitioning_sd/index.html @@ -1648,9 +1648,9 @@

What you need:
  • Your Switch loaded into Hekate
  • -
    -

    Partitioning WILL wipe all data on your SD card!

    -

    Hekate will prompt you to back it up with UMS before you begin, but in case you miss it, go to Tools > USB tools > SD card and plug your switch into your PC via USB, and backup the contents of your SD card. If you don't mind redownloading all the games stored on the SD card, you may skip this.

    +
    +

    Partitioning WILL wipe all data on your microSD card!

    +

    In case you missed the warning earlier, your microSD card will be wiped during this page. Go to Tools > USB Tools > SD Card, plug your switch into your PC via USB and back up the contents of your microSD card to your PC if you haven't done so yet. If you don't mind redownloading all the games stored on the microSD card and/or all other (potentially important) files getting deleted, you may skip this.

    Instructions:

      @@ -1664,7 +1664,7 @@

      Instructions:What you need:
    1. Your Switch loaded into Hekate
    2. -