3DS Store › System › Luma3DS

Luma3DS changelog

v13.5 · Nov 2, 2026

This release of Luma3DS brings many quality-of-life improvements and lays the groundwork for future releases.

First, several settings have been moved from config.ini to unused MCU registers. These settings can now be changed directly through Rosalina and are saved automatically. Some of them are new:

  • "Enhance top/bottom screen colors" in the Screen Filters menu
  • Audio routing (automatic, force speakers, force headphones)
  • Volume slider override and left/right audio balance
  • LED master brightness override (0% to 100%)
  • Celsius/Fahrenheit toggle for battery temperature

Now, the rest of the changelog:

  • Rosalina: significant improvements to screen filters:
  • Add support for per-channel (red, green, blue) gamma and contrast adjustments, allowing for more precise screen color calibration
  • By continuity in gamma, we now define $0^0 = 0$, as this provides a useful result instead of turning the entire screen white
  • Greatly optimize color correction LUT generation (from ~700 µs to ~75 µs), and synchronize LUT writes with VBlank to prevent graphical glitches
  • Remove the "brightness" adjustment from advanced screen filter settings as it prevents optimization
  • Rosalina: rework and extend several options in the "System configuration" menu
  • Rework "Control volume" into "Set volume slider override...", adding stereo balance control (left/right, for I2S1 audio)
  • The UI for this has been reworked
  • Audio balance can only apply if the override is enabled, _and does not apply to applets_ (I2S2)
  • Add "Set audio routing..." to force audio output through speakers or headphones, or leave it on automatic
  • Replace "Toggle LEDs" with "Set LED master brightness override...", allowing brightness adjustment from 0% to 100%
  • The red POWER LED is not dimmable. While it can be disabled, we deliberately leave it on even at 0% to allow the user to be notified of the battery level being low
  • The "charging" LED is not dimmable
  • Setting LED brightness to 0% also keeps the LEDs off during sleep, except for the red POWER LED and the charging LED. Otherwise, the usual "breathing" pattern (alternating between 4% and 100% brightness) is used
  • Rosalina: display the current date and time in the top-right corner of the menu when the IP address isn't being displayed
  • Rosalina: add an option to display the battery temperature in Fahrenheit instead of Celsius
  • Loader: improve game and sysmodule patching:
  • Add support for UPS patches (code.ups), in addition to IPS and BPS patches. Note that UPS CRC checks are currently skipped
  • Massively speed up IPS patch loading, especially for patches containing large numbers of small records (from several minutes to less than 50 ms in some cases)
  • Improve IPS handling of file size changes, zero-filled gaps, and the optional size field after the EOF marker
  • Properly propagate the resulting code size between BPS, IPS and UPS patches, allowing multiple patches to be applied together (the application order is deliberately unspecified and should not be relied upon)
  • Fix BPS patches failing on sysmodules due to excessive temporary memory allocation
  • Improve 3DS homebrew autoboot:
  • Use the HOME Menu reboot mechanism by default, instead of directly launching the configured title through NS
  • This fixes issues with the HOME/POWER buttons when using non-default application memory layouts, and allows normal booting if the configured title cannot be found
  • Note: Due to a bug in older versions of libctru, using memory modes that provide more RAM to applications (such as Dev1) requires rebuilding homebrew applications with libctru v2.7.1 or later. The Homebrew Menu (boot.3dsx) included in this release archive has already been built with a compatible version
  • The previous behavior can still be enabled through autoboot_3ds_use_ns = 1 in config.ini
  • LayeredFS: Fix patching of games that do not contain the fsUnmountArchive symbol, such as Metroid: Samus Returns (by @R-YaTian, #2245)
  • Plugin loader: Fix issues with plugin cleanup on process termination, which could leave plugin memory mapped and prevent subsequent applications from starting
  • This release archive ships with an updated cacert.pem which does not contain the compromised eMudhra and Sectigo certificates. cacert.pem is used by homebrew that uses cURL
  • Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience

v13.4 · Apr 2, 2026

Small release this time, mostly shipping external contributions.

  • Remove the Year 2050 limit in System Settings date picker (rest of system handles 2000-30 Dec. 2099 just fine)
  • HOME menu may crash when setting date to 31 Dec. 2099
  • plugin_loader: make plugin reply timeout configurable
  • LayeredFS: Call UnMountArchive before Mount (by @R-YaTian, #2200). This fixes crashes when using LayeredFS with HOME Menu.
  • Add "Return to Home Menu" option to Rosalina (by @AM7999, #2143)
  • Add support for SDK 0.10.2 and 0.12 prototype FIRM (@ZeroSkill1, #2226)
  • Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience

v13.3.3 · Jul 15, 2025

  • Fix screen-flickering and burn-in issues sometimes happening on IPS screens (usually after using the splash screen feature)
  • This was caused by the very old code we were using disabling PWM and signal on screen "deinit" but forgetting to cut off the voltage to the LCD panel and to the backlight(s), causing official driver to misdetect state. This is now fixed
  • Improved LCD controller initialization. While some technical debt remains, this fix should cover the vast majority of issues people were having
  • In "Change screen brightness" submenu, fix limit calculation errors. Additionally, because the underlying GSP allows it, allow luminance slightly above preset 5
  • This is because the fact that even though only the OG O3DS model has a feature where luminance is increase when plugging the adapter in, all models have an extra (unused) brigthness level provisioned for this
  • Fix N3DS-only issue where using "DSi Autoboot" + power-saving mode both enabled would lead to the DSi software "rave party" effects
  • This is fixed by zerofilling N3DS-only adaptive backlight registers that are active even when the SoC is in O3DS mode, contrary to what Nintendo's drivers expect (and thus leave the registers uninitialized in TWL_ and AGB_FIRM). This bug can only happen with Luma3DS's "autoboot" feature as the registers _are_ initialized by NATIVE_FIRM and survive reboot
  • Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience

v13.3.2 · Mar 10, 2025

  • Fix regression introduced by latest commit/release, where essential file backup wasn't done if /luma/backups folder didn't exist

v13.3.1 · Mar 4, 2025

  • Automatic backups of essential files, executed each time a new release of Luma3DS is run on a console, now put backups in /luma/backups/<8-hex-digit DeviceId> instead of /luma/backups/ to account for users swapping SD cards between devices

v13.3 · Dec 30, 2024

  • Add support for prototype firmwares (in particular the one used at E3 2010), including EmuNAND support (by @Wack0)
  • Fix volume override for applets (i2s2/csnd)

This feature repurposes the functionality used for the camera shutter sound. As such, it interferes with it:

  • shutter volume is set to the override instead of its default 100% value
  • due to implementation details, having the shutter sound effect play will make this feature stop working until the volume override is reapplied by going back to this menu
  • Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience

v13.2.1 · Oct 1, 2024

  • In Rosalina's "Screen Filters" submenu, similarly add a new option to "fix" the _bottom_ screen's color curve. This significantly improves the color output of _some_ IPS bottom screens. However, there seems to be some lottery even with IPS bottom screens, and the result might sometimes look too red
  • Fix support for circle-pad in volume override submenu
  • Rewrite README

v13.2 · Sep 27, 2024

  • Add "System Information" Rosalina submenu, displaying various system information, in particular screen types (TN/IPS, for each screen)
  • In Rosalina's "Screen Filters" submenu, add a new option to "fix" the top screen's color curve. This significantly improves the color output of IPS top screens, bringing them fairly close to normal sRGB displays (though the colors will look slightly dimmer):
  • all 3DS screens (TN and IPS) are calibrated to a color curve unique to 3DS systems that accomodates the TN screens' poor color gamut
  • this option is hit-and-miss on TN screens and often leads to weird results. This is because TN screens on 3DS have terrible color gamut, in particular in the greens and yellows, even by 2011 standards (and 3DS TN screens have much worse response time than 3DS IPS screens, as well)
  • this does not fix the black crush on 3DS IPS screens, in some instances this might make it slightly worse
  • this option can be persisted in Luma3DS config via "Save settings"
  • open_agb_firm has the same feature, this is where the LUT used here comes from
  • Following my reverse engineering work on QTM (face tracking, super-stable 3D), in the "New 3DS" Rosalina submenu:
  • add a submenu to temporarily enable/disable the "super-stable 3D" (SS3D) feature of New 3DSes. The changes made there do not persist, to change the behavior at boot, you should still go to System Settings like before
  • add a submenu to test all 12 parallax barrier positions used when SS3D is active. Changes revert when exiting the submenu
  • add a submenu to calibrate SS3D. Even though System Settings has a similar function, this has fewer limitations and displays more information about the process on screen
  • Reorder Rosalina menu top screen entries to facilitate usage of the most commonly used options; merge "Power off" and "Reboot" into a single menu
  • Allow plugins to use PRIVATE memory instead of SHARED on requests (#2086, bug report and original PR thanks to @LittlestCube). This allows plugins to access the network more easily. Only download plugin from trusted sources.
  • During the "first time booting Luma3DS/Luma3DS upgrade" process, create the payloads directory if it does not exist. This should make the 3DS hacking process even more streamlined
  • Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience

v13.1.2 · Jun 22, 2024

  • Fix homebrew autoboot stuck in exception at boot after POWER button was held for too long
  • Screenshots: when dealing with 800px mode, produce 800x480 images with the correct aspect ratio instead of 800x240 ones for more faithful output (using integer scaling on the Y axis)
  • Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience

v13.1.1 · May 11, 2024

  • Fix bug where wireless connection option was replacing volume override
  • Force wifi menu: handle unconfigured wifi slots correctly
  • Minor changes to the plugin loader

v13.1 changelog:

  • Add volume slider override
  • Currently, this option is located under "System configuration" in the Rosalina menu and autosaves, while being under [misc] in config.ini. This is because this option is only supported for NATIVE_FIRM. This may change in the future
  • When using the option, the console might sometimes take longer to shutdown
  • Add explicit "Boot chainloader" entry, above "Save and exit" in the boot configuration menu
  • Remove unused and useless "Allow Left+Right / Up+Down combos for DSi" option
  • Hide "Enable custom upscaling filters for DSi" option
  • Fix an issue where baremetal screeninit would result in two white screens or wrong colors, usually when launching Arm9 payloads
  • Rosalina: display SSID in "Force wifi connection" menu
  • LayeredFS: improve game update RomFS mountpoint detection
  • Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience

In addition, with thanks to @devkitPro, this release of Luma3DS comes bundled with version 2.4.3 of the Homebrew Menu, itself bundled with config/ssl/cacert.pem for use with libcurl.

v13.1 · May 3, 2024

  • Add volume slider override
  • Currently, this option is located under "System configuration" in the Rosalina menu and autosaves, while being under [misc] in config.ini. This is because this option is only supported for NATIVE_FIRM. This may change in the future
  • When using the option, the console might sometimes take longer to shutdown
  • Add explicit "Boot chainloader" entry, above "Save and exit" in the boot configuration menu
  • Remove unused and useless "Allow Left+Right / Up+Down combos for DSi" option
  • Hide "Enable custom upscaling filters for DSi" option
  • Fix an issue where baremetal screeninit would result in two white screens or wrong colors, usually when launching Arm9 payloads
  • Rosalina: display SSID in "Force wifi connection" menu
  • LayeredFS: improve game update RomFS mountpoint detection
  • Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience

In addition, with thanks to @devkitPro, this release of Luma3DS comes bundled with version 2.4.3 of the Homebrew Menu, itself bundled with config/ssl/cacert.pem for use with libcurl.

v13.0.2 · Aug 12, 2023

  • Fix older system versions (4.x to 8.x) not booting since Luma3DS v13.0
  • On 4.x, Arm11 custom sysmodules have been disabled. This means no Rosalina and no region-free; if you're still on these system versions, please just upgrade after having installed Luma3DS.
  • Fix emuNAND support for system version 5.0 (and possibly some other ancient system versions like this one). This was a long-standing issue
  • Fix an issue where Arm11 svcBreak exceptions were not displayed as such since Luma3DS v13.0
  • Fix an issue with plugins related to Home Menu notification
  • Properly grant access to all Arm11-accessible IO to 3DSX homebrew
  • Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience

v13.0.1 · Jul 21, 2023

  • Fix a v13.0 regression where external FIRM module loading (such as TwlBg) was broken

v13.0 changelog:

  • Merged @PabloMK7 and @Nanquitas 's fork, adding plugin support. This allows mods like CTGP-7 to be played
  • NOTE: Due to planned changes (such as kernel reimplementation) older no longer maintained plugins or closed source ones may suddenly stop working at some point in the future. We advise to use open source and/or actively maintained plugins from trusted sources instead
  • Added support to replace the default TWL_FIRM (i.e. DS(i) software) convolution-based upscaling filter by the contents of /luma/twl_upscaling_filter.bin
  • You can find matrix examples here and Python code to convert them to the expected format there
  • Added support to allow Left+Right and Up+Down key combos in TWL_FIRM, although commercial DS(i) games usually prevent these combos on their own too
  • Added support for arbitrarily-sized and uncompressed TWL_FIRM and AGB_FIRM, when externally loaded from the /luma folder
  • Simplify sysmodule CXI loading and IPS/BPS patching: N3DS bit is now cleared when considering which CXI file to load from /luma/sysmodules. The path for IPS/BPS patches for sysmodules, and sysmodules only, has been moved to /luma/sysmodules/<titleId without N3DS bit>.ips (resp. .bps). This is a breaking change
  • Remove the "Use EmuNAND FIRM if booting with R" option and all related logic. This was a leftover of the Gateway era that has no place in 2023
  • Fixed a rare bug where the console would boot into 2 white screens
  • Other minor changes

v13.0 · Jul 20, 2023

  • Merged @PabloMK7 and @Nanquitas 's fork, adding plugin support. This allows mods like CTGP-7 to be played
  • NOTE: Due to planned changes (such as kernel reimplementation) older no longer maintained plugins or closed source ones may suddenly stop working at some point in the future. We advise to use open source and/or actively maintained plugins from trusted sources instead
  • Added support to replace the default TWL_FIRM (i.e. DS(i) software) convolution-based upscaling filter by the contents of /luma/twl_upscaling_filter.bin
  • You can find matrix examples here and Python code to convert them to the expected format there
  • Added support to allow Left+Right and Up+Down key combos in TWL_FIRM, although commercial DS(i) games usually prevent these combos on their own too
  • Added support for arbitrarily-sized and uncompressed TWL_FIRM and AGB_FIRM, when externally loaded from the /luma folder
  • Simplify sysmodule CXI loading and IPS/BPS patching: N3DS bit is now cleared when considering which CXI file to load from /luma/sysmodules. The path for IPS/BPS patches for sysmodules, and sysmodules only, has been moved to /luma/sysmodules/<titleId without N3DS bit>.ips (resp. .bps). This is a breaking change
  • Remove the "Use EmuNAND FIRM if booting with R" option and all related logic. This was a leftover of the Gateway era that has no place in 2023
  • Fixed a rare bug where the console would boot into 2 white screens
  • Other minor changes

v12.0.1 · Mar 28, 2023

  • Hide the "Force routing audio output to headphones" option from bootmenu, and extend it to force-route audio to speakers too
  • Fix handling of negative "brightness" values in screen filters advanced options
  • Clarify in bootmenu that the "autoboot homebrew" option is meant to launch the Homebrew Menu
  • Always crash when processes unexpectedly fail to load, to help troubleshooting
  • For sysmodules, code.bin and exheader.bin loading are now deprecated. CXI file loading should be used for those (see 12.0 release notes), and future release will make CXI loading more seamless

v12.0 · Feb 9, 2023

  • Add a new "advanced configuration" submenu for screen filters, allowing for far more customization (notably, increasing gamma). It allows setting different filters for top and bottom screen separately, and all settings can be saved to the ini configuration file
  • Implement autobooting into Homebrew Menu, both in 3DS mode and in DSi mode:
  • DSi modes uses nds-hb-menu bootstrap's TID by default, and is a bit slow to start as it needs to go through the native 3DS OS first no matter what
  • Homebrew needs to be compiled with libctru v2.0.0 at a minimum, and libctru v2.1.2 is highly recommended to a bug fix
  • Move "Save settings" to top-level menu
  • Add ability to force routing audio to headphones. This is targeted to Bluetooth hardware mod users
  • One limitation is that this option gets undone if you actually insert then remove headphones in the headphones port, closing and re-opening the lid fixes this
  • Add ability to redirect application core1 threads to core2, on N3DS:
  • Only useful in very demanding games like Pokémon (Ultra) Sun/Moon where it nets approx. a 10% gain, due to how the 3DS OS works
  • Might break some games and homebrew applications
  • Add external *.cxi non-KIP sysmodule loading (from /luma/sysmodules), when the "Enable loading external FIRMs and modules" option is enabled
  • The expected format is {titleId}.cxi (not the name, unlike KIPs), with {titleId} being a string of 16 hexadecimal digits, and with the N3DS bit taken into account
  • code.bin loading for sysmodules is still kept as a feature, but you now need to enable both this option and "Enable game patching" (for non-sysmodules only "Enable game patching" suffices)
  • Enable "game patching" features for all applets (not extensively tested), not just games or applications. This being said, LayeredFs might not work on things like the software keyboard, but "locale emulation" is expected to always work
  • Remove kernel check for creating core2/core3 threads. This has no bearing on homebrew being able to access core2, as it always has had the proper access bits. Moreover, you should not create threads on core3 as head-tracking takes most of the CPU time there & the graphics driver depends on head-tracking
  • Grant full DSP RAM access to all 3dsx homebrew
  • Move hb:ldr from Rosalina to loader reimplementation
  • Add disabled-by-default PASLR support in our custom loader reimplementation; this should match what the official sysmodule does 1:1
  • Fix a bug where an error telling the MCU firmware version was too low, even if this was always incorrect
  • Fix a very long-standing bug where sysmodules could incorrectly be killed when using the "Switch the hb. title to the current app." feature followed by closing the current app. This might have been causing issues with this feature and N3DS Health&Safety app in the past
  • Display the proper error messages when removing the gamecart or the SD card while playing a game on either medium, instead of a cryptic error code. Also add datetime information to errdisp.txt entries
  • General system stability improvements to enhance the user's experience

(libctru v2.1.2 and 3ds-hbmenu v2.4.1 will officially release later this week)

v11.0 · Jun 4, 2022

  • Migrate the configuration to INI format (config.bin becomes config.ini)
  • This means that configuration is now human-readable, and makes situations like wanting to modify Rosalina's combo without opening its menu much easier to resolve
  • The following options have been removed from the config menu and moved to be exclusively in the INI file:
  • "Splash duration": this is because it can now be configured to take any 32-bit value (default: 3 seconds)
  • "Set developer UNITINFO",
  • "Disable Arm11 exception handlers"
  • "Enable Rosalina on SAFE_FIRM"
  • "Show NAND or user string in System Settings" is now enabled by default, when auto-generating a blank configuration file
  • Essential system files (bootROMs, OTP, HWCAL, LCFS, SecureInfo) are now automatically backed up to /luma/backups (upon upgrading Luma3DS, if not already present at that location)
  • Upon upgrading Luma3DS, boot.firm is now automatically copied to the root of the CTRNAND partition
  • Restore extended-remote support (this was broken with recent versions of GDB). Breaking change: use attach <PID+1> (e.g 1 for fs) to attach to a process, as GDB doesn't support PID 0.
  • Add option to toggle card slot (#1202)
  • Screen filters can now be saved to config.ini and restored at boot (you need to go to "Miscellaneous options > Save settings"). You can now even manually edit config.ini to use custom values for those (within the 1000 to 25100K range)
  • NTP timezone can also now be saved to config.ini; also fix a bug where some timezones would not be reachable
  • Fix a long-standing issue where some system calls took longer than they should, causing lags in some situations (thanks @PabloMK7)
  • Fix calculation of displayed battery voltage (thanks nocash)

v10.3 · Mar 16, 2022

  • Add more detailed battery percentage, plus battery voltage and temperature
  • Add an option to dump the DSP firmware from Home Menu, effectively making programs like DSP1 obsolete
  • Split NTP and user time offset nullification. This means two things:
  • Time changes are immmediately visible and you do not need to reboot your console after using the feature anymore (although Home Menu might not always immmediately display the new time -- just open and close an application in that case)
  • Programs like ctr-no-timeoffset should not be needed anymore. Also, even if 3ds.hacks.guide recommends it and GodMode9 mandates it, time offset nullification should not be done
  • Also improve the precision of the NTP client implementation and fix a few bugs. It can be precise as +- 1ms (usually), although some of this precision is lost when rebooting
  • Do not initialize the screens in the very common case the user has only one payload in the /luma/payloads folder, effectively working around a long-standing bug
  • Fix reading emuNAND sector 0 for RedNAND and Gateway-style emuNAND (#1687, @aspargas2)
  • Fix a few bugs in the cheat system (#1623, @s5bug)
  • Add ASCII View to Rosalina Process List (#1703, @George-lewis)
  • Allow using game-patching on Home Menu (#1634, @gabe565)
  • Wait for the user to release the B key when exiting the Rosalina menu. This should prevent games to think the B key has been pressed (#1701, suggestion from @Epicpkmn11)
  • gdb: properly handle software breakpoints
  • General system stability improvements to enhance the user's experience

v10.2.1 · Nov 17, 2020

  • Fix system version 11.14 not booting
  • Allow out-of-region Download Play functionality (thanks @Pixel-Pop)
  • Fix a rare issue where the Rosalina Menu wouldn't be displayed during application launch (thanks @Nanquitas)
  • General system stability improvements to enhance the user's experience

v10.2 · Jul 16, 2020

  • Massively improved the screenshot feature:
  • Now takes around 100ms instead of 10s (speed may vary, and the first screenshot in a series is slower)
  • 800px top-screen mode is now supported
  • Rosalina menu options have been reordered to take this into account
  • Added brightness (luminance) selection submenu
  • Screen filters submenu improvements:
  • Changed the filter values, and there are now more of them
  • The selected filter is now properly restored when the lid is reopened
  • Removed the lag and crash associated to InputRedirection (thanks @Nanquitas)
  • On N3DS, this may cause a key press to be repeated in Home Menu for no reason. Just pressing ZL/ZR on the console is enough to fix this
  • Improved Rosalina menu handling:
  • C-Pad (left pad) can now be used to navigate the menu
  • You can now easily scroll through the menus by maintaining directional keys
  • InputRedirection can now be used to access and navigate the menu
  • New key options for the menu combo: C-Pad Left/Right/Up/Down & "Touch Screen Pressed" (sorry, no ZL/ZR)
  • Removed the need for the console to reboot again when switching to homebrew from a higher-memory game (e.g. Pokémon Sun on O3DS -> configured homebrew title)
  • Homebrew can now write to the shared config page
  • Fixed the fact that the console would hang if sleep mode was entered when the Rosalina menu was open
  • Enabling either the debugger or InputRedirection will now prevent the console from going to sleep until both are disabled (to prevent the console from hanging)
  • Rosalina is now supported on N3DS SAFE_FIRM, including the homebrew launching functionality that comes with it:
  • This is controlled by a new option in the main Luma menu. That option also enables running 11.3-and-below system versions on N2DS and also allows the system to run even with defective head-tracking hardware
  • The newest release of the Homebrew Menu needs to be used (it comes bundled with Luma3DS in this release archive). You also need to rebuild all your homebrew with the latest libctru release. Some homebrew may not work, nevertheless
  • Some Rosalina features may not work properly there (e.g. the brightness and New 3DS submenus)
  • Separated the exception dump parser script to a new repository: https://github.com/LumaTeam/luma3ds_exception_dump_parser

In addition, with thanks to @fincs, this release of Luma3DS comes bundled with version 2.2.0 of the Homebrew Menu. (EDIT: replaced by hotfixed version)

v10.1.3 · Apr 29, 2020

  • Fixed a bug that would cause the pxi module to crash on shutdown/reboot/firmlaunch for some people
  • Other minor changes

v10.1.2 · Apr 28, 2020

  • Fixed cheats not working at all (v10.1.1 regression)
  • Fixed WiFi forcing not working at all (v10.1.1 regression). Also fixed other related bugs, including the mishandling of non-reachable access points
  • Fixed a long-standing issue where the debugger and InputRedirection would hang for a long time and fail to recover if there was no internet
  • Fixed a long-standing issue where the console would take a long time to power off/reboot/firmlaunch if either the debugger or InputRedirection were left enabled. Please note that this still happens if both are left enabled at the same time

v10.1.1 · Apr 27, 2020

  • Fixed multiple issues affecting shutdown (and reboot, firmlaunch) time. Shutdown time should be reduced to around 2.5~3.5s (from 16s):
  • A regression from v10.1 that was also potentially affecting startup times
  • A regression from v10.0
  • A bug back from 2016 causing shutdown times to be 1.5 to 5.5s longer than normal
  • Fixed an issue where some Luma builds wouldn't boot
  • Fixed most remaining cases where you would get an Arm9 svcBreak with 0xC8804465, in particular if you pressed the SAFE_MODE combo very late (this was a long-standing issue)
  • 3DSX: increased the maximum core1 CPU time limit for APT_SetAppCpuTimeLimit from 30% to 89%

v10.1 · Apr 25, 2020

  • Fixed booting on 4.x (*)
  • Allowed launching 3dsx apps on < 8.x where Rosalina is supported (currently, 4.x and above)
  • Added two new options in Rosalina's "System configuration" submenu:
  • the option to force a WiFi network, allowing to use local-network homebrew even if the connection test would fail (@LiquidFenrir)
  • the option to disable short POWER button presses in Rosalina->System configuration (@izzy84075)
  • Changed a few things in the NTP submenu:
  • added the ability to offset the time in the NTP menu by any number of minutes (@nathanhitch)
  • changed the default IP to that of time.windows.com, not blocked in mainland China
  • Added support for BPS patches (@leoetlino)
  • Arm9 menu: check for button combos again after the PIN and/or splash screens
  • Fixed a few bugs in loader sysmodule that were causing crashes (@leoetlino, #1375: @Lizardon1, @muhmuhten)
  • Fixed a few bugs in other sysmodules (@lioncash, @piepie62, @Oreo639, @mariohackandglitch), including one that would cause erroneous errdisp screens to show
  • General system stability improvements to enhance the user's experience

In addition, with thanks to @fincs, this release of Luma3DS comes bundled with version 2.1.1 of the Homebrew Menu.

To update, simply drag and drop boot.firm and boot.3dsx to the root of your SD card, as always.

(*) The space left for Rosalina on this system version (and maybe a few other system versions) is running out; the level of support for it may be reduced to that of 3.x in the future

v10.0.1 · Jul 3, 2019

This is a hotfix release, with critical regression bugfixes and no new features. Users are strongly advised to upgrade.

  • Fix LayeredFS
  • Fix N3DS-specific applications improperly closing

Previous hotfixes:

  • Fix process list memory viewer
  • Fix NTP client not setting time and date correctly due to one RTC not properly being set to 0. Also fix one related UI bug
  • Merge #1266

v10.0 · Jun 29, 2019

We know it's been a long time, but here it is:

HOTFIXED (June 30, 14:00 CEST):

  • Fix process list memory viewer

HOTFIXED (17:15 CEST):

  • Fix NTP client not setting time and date correctly due to one RTC not properly being set to 0. Also fix one related UI bug
  • Merge #1266
  • New feature: NTP client
  • Located in the "miscellaneous" Rosalina submenu, this fetches the time from time1.google.com (hardcoded IP) by default
  • This sets the config savefile RTC offset 0, hence the displayed by Home Menu will also be the time that Arm9 programs like GM9 will see
  • Consequently, Luma3DS's own Arm9 code will properly set the date and time when modifying or creating new files
  • New feature: blue light filters (thanks to @panicbit, #1065)
  • Lots of cheat engine bugfixes and improvements thanks to @piepie62 (multiple PRs), in addition to @tstambaugh92 's bugfixes (#1116, #1117)
  • most CTRPF-AR code types now supported
  • more cheats can be loaded at once
  • New reimplemented sysmodule: pm
  • Number of max. pm:dbg sessions increased for Rosalina usage
  • New pm:dbg commands: GetCurrentAppTitleIdAndPid, DebugNextApplicationByForce, LaunchTitleDebug (mainly for gdbstub usage)
  • Debug restrictions lifted for the gdbstub
  • Service restrictions lifted for Cubic Ninja
  • Lots of gdbstub improvements:
  • Added support for debugging application at their very start (new option in Debugger submenu)
  • Added support for target extended-remote
  • You do not need to select a process to attach to in process list anymore using this, although it still works absolutely fine
  • You will see a nice process list in IDA
  • When launching new processes: only titleId [mediaType [launchFlags]] is supported, and the launched title shouldn't rely on APT and all 3 parameters should be hex-encoded (see e11cc090b27266e922db76cb7a7850d67bda8f18)
  • Added support for accessing host files (including stdin/stdio/stderr) from target 3DS programs. Support for it has been added in libctru
  • Added support for accessing target SD-card files from the host (remote put, remote get and remote delete)
  • Doubled packet size
  • Many bugfixes
  • Fixed critical bugs in sm: one causing a crash when launching the camera applet when another title was using the camera, another possibly affecting sleep mode
  • Fixed a critical bug where Luma3DS's Arm9 code would spam I2C requests, causing some particular commits of popular Arm9 payloads to fail on New3DS units with IPS screens.

If the issue still arises, put multiple payloads in the folder and use the chainloader menu to work around it

  • Reworked build system. Armips is no longer required.
  • Always dump errdisp errors to /luma/errdisp.txt
  • Upgraded FatFs to R0.13c
  • Upgraded I2C driver in Arm9 code
  • Fix screens not working on firmlaunch, firmlaunch errors will now be displayed on screen
  • Patch 11.8+ NIM-related Process9 to send all-zero key and IV when the UNITINFO patch is enabled (thanks to @luigoalma, #1142)
  • Hide EmuNAND options when there is no EmuNAND present on the console
  • Fix minor bugs involving DS(i) title autoloading
  • Many other bugfixes
  • Note: the pm reimplementation currently breaks NTR CFW to some extent (in particular game plugins). The abandoned "NTR CFW" is now unsupported, even if it may work.
  • A solution for future versions is being worked on.
  • It may be possible to change NTR CFW source code for it not to inject itself into pm, since Luma3DS removes svc permission checks anyway, to mitigate the issue. We do not have the time to do that ourselves
  • It is not possible to disable custom pm

In addition, with thanks to @fincs, this release of Luma3DS comes bundled with version 2.1.0 of the Homebrew Menu.

v9.1 · Aug 1, 2018

  • Fix 11.8 compatibility
  • Add experimental cheat engine (by @duckbill007)
  • Fix Rosalina menu interactions with 3dsident, etc.
  • Implement "monitor getmemregions" gdb command (by @Nanquitas)
  • Fix freeze when attempting to open Rosalina before the system finished to boot (by @Nanquitas)
  • Add configurable splash duration (by @Qyriad)
  • Add bottom screen splash image (/luma/splashpin.bin) to be shown on the PIN insertion screen (by @Qyriad)
  • Make it possible to still boot using an external FIRM in case the CTRNAND FIRM can't be read
  • Other fixes

v9.0 · Dec 20, 2017

Here's our holiday gift to you :)

  • Use open source reimplementations of the SM and PXI FIRM modules
  • Fixed breakpoints in the Rosalina debugger (thanks @Nanquitas)
  • Added RAM viewer/editor/dumper feature to Rosalina (thanks @LiquidFenrir)
  • Rosalina now cleanly reboots the console when the option is selected
  • Fixed Rosalina screenshots for RGB5_A1/RGBA4 framebuffer formats (used for example in Virtual Console titles)
  • Stubbed isTitleAllowed to allow Nintendo-blocked titles to launch (outdated Ironfall/Flipnote Studio 3D/etc)
  • ARM9 exheader and FS patches are now always applied as they cause no drawbacks
  • Throw an error if file writes or emuNAND boot are attempted while the SD card is write-locked
  • Display boot source on the bottom screen in the config menu
  • The console will now shutdown when the shell is closed in the Luma menus, unless the user booted via ntrboot
  • Numerous Exception Handler fixes
  • FatFS updated to v0.13
  • Check if NWM is running before allowing WiFi toggling in Rosalina
  • Screenshots are now sorted by date/time using osGetTime, removing the counting delay if the user has a lot of screenshots, thanks to @Hayleia!

**Note: BootNTR is broken in this version, unless you use the latest ~~commit, not~~ release from this repo: https://github.com/Nanquitas/BootNTR**

Edit (20/12/17 18:28 EST): BootNTR Selector v2.10 has been released with support for Luma v9.0, you can now use the latest release instead of needing to manually compile the latest commit!

Notes on the changes made to Rosalina's debugger:

  • The physical memory access "bit31" mapping (0--0x30000000 => 0x80000000--0xB0000000) as well as privileged (kernel) mappings confuse debugger clients like IDA's which interpret the value of the registers. Access to those mappings can be toggled using "monitor toggleextmemaccess" instead (issue reported by @Nanquitas).
  • Additionally, support for the buggy IDA 6.8 gdb client was removed. Please use IDA 7.0 or higher.

P.S: IDA 7.0 added client support for no-ack mode (Debugging options > Set specific options), which should be enabled to make debugging twice as smooth. "Use stepping support" should be unchecked.

v8.1.1 · Aug 7, 2017

  • Add WiFi and LED toggling in Rosalina
  • Add loading of extended headers from SD card/CTRNAND, they can be loaded from /luma/titles/TITLEID/exheader.bin. Among the other things, this also allows to load bigger code.bins
  • "Logged" ErrDisp errors are now written to /luma/errdisp.txt without causing an error screen
  • Fix LayeredFS for Pokemon Art Academy and possibly other games which mistakenly load files from rom:// instead of rom:/
  • Fix conflict between emunand selection and payload booting when "Autoboot EmuNAND" is checked, you now need to press L + DPad to boot payloads if that option is checked
  • Rearranged options in the Rosalina menu
  • Fix warnings with devkitARM r47

_Note: given the efforts in supporting two separate codebases and the lack of confirmed issues which can be attributed to the changes in 8.1 compared to "legacy" Luma, we're discontinuing that branch. If you have an issue which you can reproduce on this release (test at least twice to make sure it can be reproduced) but not on a "legacy" build, please submit an issue to this GitHub repository. We will fully discontinue the "legacy" codebase in 2 weeks from now if no such issue is reported and verified._

v8.1 · Jun 28, 2017

  • Add saving of Rosalina settings (key combo and homebrew title ID)
  • Add a reboot and a power-off option in the "Miscellaneous" Rosalina menu
  • Display the IP address on most menus when either InputRedirection or the GDB stub (or both) is enabled
  • Full support for system versions >= 4.0
  • Partial support (all arm9 patches, but no arm11 patch) for 3.0
  • Halve the time necessary to take a screenshot
  • Boots around 1 second faster on New 3DS
  • Add region-free patch for e-manuals
  • Add DSP firmware signature patch by @MerryMage
  • Fix InputRedirection, C-stick/ZL/ZR redirection works in games too
  • Fix langemu bugs
  • Fix write-only hardware watchpoint support in the gdbstub
  • Fix random boot issues
  • Fix booting on 2.x and 1.x dev units
  • Merge #561
  • Fix building on macOS
  • Other minor improvements and fixes

Existing software compatible with InputRedirection are InputRedirectionClient-Qt, InputClient-SDL, TPPFLUSH

v7.1 · May 20, 2017

  • boot9strap support (all older entrypoints, including ARM9LoaderHax and menuhax, are no longer supported).
  • Replaced .bin (brahma/a9lh) payload loading with .firm (FIRM format) payloads. This format allows for way more flexibility and is also the only one supported by boot9strap.
  • Holding START when only one payload is present directly boots it.
  • Small LayeredFS fixes.

v7.0.5 · May 6, 2017

  • You can now load code.bin binaries and code.ips patches for system modules and applets.
  • Fixed LayeredFS being broken in 7.0.4 with several games (Animal Crossing, Zelda Triforce Heroes and probably more).
  • Rewrote a large part of the LayeredFS code, this should allow to properly fix eventual conflicts that arose with extdata and other non-RomFS archives.

v7.0.4 · Apr 28, 2017

Unfortunate events related to moderator censorship have occurred regarding the /r/3DShacks subreddit (read more on Plailect's guide). Given this we cannot, in good faith, support this subreddit or its IRC until there is a change in leadership and will no longer be participating.

Sorry for the many close releases, but some bugs were discovered regarding LayeredFS.

  • Fixed not closing folder handles after checking for "romfs" folders' existence.
  • Fixed extdata being redirected in 7.0.3 (could have caused issues if an extdata and a romfs file with the same path and name existed), thanks @mariohackandglitch for discovering this.
  • Added displaying title IDs for ARM11 exceptions.
  • Sped up the pattern searching for LayeredFS.
  • Cleaned up loader's code.

v7.0.3 · Apr 26, 2017

Unfortunate events related to moderator censorship have occurred regarding the /r/3DShacks subreddit (read more on Plailect's guide). Given this we cannot, in good faith, support this subreddit or its IRC until there is a change in leadership and will no longer be participating.

  • LayeredFS compatibility has been improved: update RomFSes which are mounted as "ext:" (such as Taiko no Tatsujin: Don Don! Mystery Adventure) now work.

v7.0.2 · Apr 23, 2017

Unfortunate events related to moderator censorship have occurred regarding the /r/3DShacks subreddit (read more on Plailect's guide). Given this we cannot, in good faith, support this subreddit or its IRC until there is a change in leadership and will no longer be participating.

  • Improved LayeredFS compatibility: games like New Super Mario Bros. 2 and Zelda: Triforce Heroes now work.

v7.0.1 · Apr 17, 2017

  • *hax payloads work again (if you use arm9loaderhax this doesn't apply).
  • LayeredFS compatibility has been improved (thanks to @svanheulen and NeoBeo): recent Monster Hunter games and update RomFSes which get mounted as "patch:" (like Daigasso's update) now work.

v7.0 · Apr 15, 2017

  • Added chainloader selector menu (can be called with START on boot, the START payload can now be booted with L+START).
  • Implemented IPS patcher for code.bin, you need to copy the IPS patch to /luma/titles/<titleID>/code.ips.
  • Added a LayeredFS implementation thanks to @delebile's hard work. Compatibility should be really good as only two games have been reported as being not working out of all the reports (due to the unusual way they were compiled). To use it, you will need to copy romfs files (following the romfs folder structure) to /luma/titles/<titleID>/romfs/. Coupled with IPS code patching, this allows for easy legal distribution of game translations/hacks.
  • Added unverified New3DS SigHax support (it should work fine, though).
  • Added support for the power button in menus (thanks @d0k3).
  • Added possibility to patch NAND apps (like the eShop).
  • Download Play is now region free (thanks @adibsurani).
  • Signature checks are patched out for 1.x/2.x NATIVE_FIRM and SAFE_FIRMs (thanks @SciresM).
  • PIN changes: PIN is now hidden while being entered, added possibility to clear the inserted PIN by pressing SELECT.
  • Stubbed the SetGpuProt syscall on 11.3+ to make *hax payloads work on Old3DS. It is advised to use the 11.2 payloads on 11.3+ with this patch.
  • Fixed firmlaunch/reboot patch on New3DS 11.4.
  • Fixed config not being saved if a payload was launched after quitting the config menu.
  • Refactored the codebase to limit nested if/elses.
  • Several other improvements to overall system stability and other minor adjustments and bug fixes have been made to enhance the user experience.

We would like to thank anyone who helped testing LayeredFS!

v6.6 · Nov 12, 2016

  • Made it possible to use arm9loaderhax.bin from CTRNAND with the SD inserted (DS/DSi/GBA/extended memory games will now work).
  • Fixed the New 3DS CPU patch affecting titles which already make use of the higher CPU clock and L2 cache (New 3DS exclusive titles and others like Smash Bros and Pokemon S/M). If "Clock" or "L2" are selected, these titles will now retain their normal (Clock + L2) setting.
  • Increased the compatibility of region/language emulation, some rare titles are now working.
  • Added support for zerokey-encrypted NCCHs to NAND and SD card. This makes it possible to use some old, Gateway-era CIAs.
  • If the UNITINFO developer option is checked, you will be able to install CIAs encrypted with the developer 0x3D normalkey (such as the SDK ones). This will also make retail-encrypted CIAs fail to install (all already installed titles will keep working in both cases).
  • Improved support for development units (thanks to @SciresM), 9.5+ FIRMs can now be regularly booted, 7.x+ ones can be booted from 4.x, and the system updaters won't overwrite A9LH.
  • Fixed support for system versions 7.x and lower.
  • Fixed bugs in the exception handlers.

v6.5 · Nov 3, 2016

  • Full CTRNAND support: if the SD card is missing, you can boot Luma from CTRNAND with a compatible A9LH install. On CTRNAND, the luma folder is located in /rw and can be managed with tools like FBI and GodMode9. The EmuNAND options will also be automatically hidden.
  • Added safety checks everywhere throughout Luma when possible, this also includes FIRM patching (if any patch fails, Luma will either display the amount of failed patches or shutdown).
  • Made the exception dump parser output the disassembly of the dumped code where possible.
  • Kernel9 patches patterns are now only looked for in Kernel9 itself (might speedup the patching slightly).
  • AGB and TWL FIRM from 3.0 onwards are now supported (instead of just the latest versions).
  • Fixed the anti-anti-downgrading patch on 11.2 FIRM.
  • Removed the eShop update check patch as it caused more problems than it solved, and the background updates patch as it didn't work at all.
  • Allowed using the FIRM of SysNAND with EmuNAND and vice-versa (booting with R) if not using A9LH.
  • Fixed bug that made it impossible to print to the screen after FIRM was loaded.
  • Fixed some files in the FIRM folders being incorrectly detected as FIRMs.
  • Major cleanup/minor bug fixing/refactoring of the code, removed several assumptions and switched to structs where possible.

Please note that starting with this release, Luma won't support pre-patched FIRMs or other system titles with the same patches Luma does. Common pre-patched titles include NS, Home Menu, TWL_FIRM and AGB_FIRM (in these cases you will either get a svcBreak in loader or a shutdown when launching DS/GBA games). Clean versions of these titles need to be reinstalled before upgrading (the wiki will be updated with a walkthrough soon™).

v6.3.1 · Sep 26, 2016

  • Increased the maximum custom path size to 55 characters from 37.
  • The Luma3DS.dat file isn't needed anymore with the new .3dsx (*hax, menuhax) launchers, arm9loaderhax.bin (or the filename specified with the custom payload path) will be loaded directly.
  • Replaced the top screen image in the .nds file.

_Reuploaded because people reported the CakeBrah .3dsx launchers wrongly displaying the .dat filename when arm9loaderhax.bin was not found, Luma3DS itself was not updated._

v6.3 · Sep 23, 2016

  • Merged the regular and dev builds into one.
  • Custom version changes: if the custom version has more than 5 but less than 19 characters it will be truncated to avoid System Settings crashes; separated the custom versions for each NAND (the paths are now /luma/customversion_sys.txt, /luma/customversion_emu.txt, /luma/customversion_emu2.txt. /luma/customversion_emu3.txt. /luma/customversion_emu4.txt).
  • To reduce file accesses for people with high-latency large SD cards, an option to toggle loading firmware.bins and FIRM sysmodules from the SD card and one to toggle loading the splash screens were added.
  • External FIRMs support changes: added support for NUS-encrypted firmware.bins (all four are supported, a matching cetk file for each encrypted FIRM is needed: /luma/cetk for /luma/firmware.bin, /luma/cetk_twl for /luma/firmware_twl.bin, /luma/cetk_agb for /luma/firmware_agb.bin. /luma/cetk_safe for /luma/firmware_safe.bin) and New 3DS ARM9bin-decrypted firmware.bins.
  • Turned the .dat file into a simple chainloader that loads arm9loaderhax.bin, added .nds file to use it with mset.
  • The path changer is now deprecated (although it will still work). To have a custom path you can now enable the option for it in the configuration and type it in a /luma/path.txt file, it must start with a /. This path is also picked up by the above mentioned .dat chainloader.
  • A full format of the SD card is no longer necessary to remove an EmuNAND (also fixes crashes when trying to boot EmuNAND with an SD which used to have one and wasn't fully formatted).
  • The splash screens now display all at once thanks to the alternate framebuffer support.
  • Fixed screen weirdnesses when not launching from arm9loaderhax.
  • Added support for text files with a trailing newline (as per UNIX convention) for region/language emulation and custom versions.
  • Fixed loading SafeA9LHInstaller and other payloads which need the OTP hash if having a PIN.
  • Slightly changed the PIN format.
  • Made option descriptions more readable.
  • Fixed non-working double newlines in PIN messages.
  • Fixed hangs on errors after a firmlaunch, reboots now happen as expected.
  • bin2c is no longer needed to compile.

_Reuploaded to fix a confusing typo in the config_

v6.2.3 · Sep 18, 2016

Both versions:

  • Finally fixed GW-downgraded O3DS(XL) NANDs.

v6.2.2 · Sep 16, 2016

Both versions:

  • If Autoboot SysNAND was unchecked, it became impossible to select the EmuNAND if having a corresponding directional pad payload. Now it's possible to do this by holding A + the directional pad button.
  • Added UTF-8 support to customversion.txt. You can now use symbols, including those special Nintendo font ones :P

v6.2.2: Fixed question marks at the beginning of the custom strings with files created by Windows Notepad.

v6.2 · Sep 15, 2016

Both versions:

  • Revamped EmuNAND support: up to four EmuNANDs are now supported, the default can be selected in the config and it can be changed on boot by holding Up/Right/Down/Left (respectively for EmuNAND 1/2/3/4); other than the legacy layout the minsize layout (for RedNANDs only) and the default layout are now also supported
  • Added a B payload (b_NAME.bin) to the chainloader
  • PIN changes: the number of digits to input is now shown, a message on the bottom screen can be displayed by placing a text file named pinmessage.txt in luma (800 characters maximum)
  • Implemented custom System Settings Ver. string, it needs to be in a text file named customversion.txt (19 characters maximum) in luma, with the stock Nintendo string being Ver. %d.%d.%d-%d%ls
  • When booting with R and the Use SysNAND FIRM if booting with R option is selected, FIRM will be loaded from the default EmuNAND instead of the first one and you can choose a different one with the directional pad, in the same way you would select the EmuNAND
  • Changed the logic of the NIM update patch to only be applied when booting with R
  • Hid the New 3DS CPU setting on Old 3DS
  • Show descriptions for the options on the bottom screen
  • Fixed support for pre-9.0 FIRMs. Luma3DS now directly supports >= 5.x FIRMs, as intended
  • Fixed crashes for people with pre-patched Home Menu and NS module
  • Added boundary checks for files loaded from SD
  • More code refactoring

Dev version:

  • Fixed crashes on some Old 3DS FIRMs (such as 9.0)
  • Added displaying a partial stack dump on the bottom screen when handling an exception

v6.1.2 · Sep 4, 2016

On both branches:

  • 1.x and 2.x NATIVE_FIRM are now supported on SysNAND with the FIRM writes patch, this allows you to update retaining A9LH on every system version.
  • PIN changes: you can now set the PIN length and easily change the PIN (you will get a prompt when exiting the config menu, which can be skipped with START), booting SAFE_MODE is easier with a PIN, the PIN file gets deleted when disabling the PIN lock.
  • The TWL dev launcher patch has been removed as it's no longer needed and causes incompatibilities with a lot of NTR/TWL games.
  • New config.bin format which allows to automatically discard the configuration as soon as it becomes incompatible with new Luma3DS releases.
  • Large amounts of code refactoring and cleanups.

On dev branch only:

  • Fixed crashes on New 3DS with the "Disable access checks" option enabled on FIRMs between 9.3 and 10.4. Unfortunately the service and archive checks patch can't work on said firmwares, and won't be applied.
  • ARM9 debugging has been removed from TWL and AGB FIRMs as it didn't work and didn't serve a real purpose.
  • The "Disable access checks" option has been renamed to "Patch SVC/service/archive/ARM9 access".

v6.1.1 · Aug 26, 2016

On both branches:

  • Fixed a likely issue with the TwlBg patch and made it selectable, as it triggers antipiracy checks for some DS games and possibly causes other issues.
  • Fixed 3ds_injector picking up the previous boot configuration, which caused several bugs (like the NIM update patch activating when not needed - remember to select "Use SysNAND FIRM if booting with R" if you use a SysNAND setup).
  • 1.25s speed boost on boot.
  • Minor cleanups.

On dev branch only:

  • Fixed another critical bug in the exception handlers.

v6.1 · Aug 25, 2016

On both branches:

  • TwlBg is now patched on-the-fly to implement the patch that allows NitroHax and other homebrews to work correctly (big thanks to ahezard, Normmatt et al. for the patches. No setup is required at all.
  • Fix various bugs

On dev branch only:

  • Fix critical bugs in the exception handlers.
  • The UNITINFO patch has been ported to TWL/AGB firms (though it's useless). Its behavior has been inverted for dev units.

v6.0.1 · Aug 16, 2016

This is a quick release to (tentatively) address issues users are having with the .dat payload.

  • Updated ctrulib (should fix CakeBrah and menuhax 3dsx launchers)
  • Fixed bug that could cause a payload being mistakenly launched after creating a new pin
  • Minor cleanups

_Note for dev branch users: there was a bug affecting exception handlers in this release. Please use the latest commit_

v6.0 · Aug 15, 2016

Sorry for the long wait, but as always we deliver :wink:.

Here is the new release (I'm the one doing it this time):

Both branches:

  • Add support for launching >= 6.x/7.x emuNANDs when the sysNAND is on a lower version (on entrypoints other than a9lh)
  • If you want to launch a 3.x or 4.x NAND, you have to place a recent enough firmware.bin (corresponding 10.x for example) under the luma folder (this is not a new feature)
  • Conversely, firmware.bin support has been removed when booting a >= 6.x NAND. "SysNAND is updated (A9LH-only)" has been renamed to "Use SysNAND FIRM if booting with R (A9LH)" to reflect its only new purpose
  • If you were using firmware.bin solely for BootNTR, update the latter (BootNTR has been updated to support 11.0)
  • Add support for loading titles' code section from /luma/code_sections/<titleID>.bin (this is useful for homebrew like SaltySD)
  • Enable the reboot patch on 9.0/9.1/9.2 FIRM
  • Implement a PIN-checking system: you can set a 4-key combinaison (using A, B, X and Y) that be checked when Luma3DS is launched (thanks to @reworks)
  • If you want to change your PIN, unselect the corresponding option in the configuration menu, save your configuration settings, then set that option again
  • The screens' brightness is now updated "interactively" when the corresponding option in the configuration menu is changed. This works even if the screen has been initied before Luma3DS has started running
  • Replace "Enable splash screen with no screen-init" by "Display splash screen before payloads" to fit a category of splash screens (as the screens will now be initied if and only if there are splash screens to display)
  • The luma folder will now be created automatically when saving the configuration for the first time (thus it has been removed from the release archive)
  • Other minor adjustments have been made to enhance the user experience

Developer branch only:

  • Implement arm11 exception handling (for NATIVE_FIRM only, unlike on arm9 where exceptions are handled everywhere, homebrews and Luma3DS itself included)
  • The arm9 exception handlers were improved (more information is dumped, bug fixes, etc.)
  • For both arm11 and arm9 exception handlers:
  • Prevent double faults (when SP or PC were invalid)
  • Handle svcBreak (this dumps the user-mode at the executed svc 0x3c instruction)
  • Handle kernel panics (except on SAFE_FIRM)
  • /luma/dumps/arm9 and /luma/dumps/arm11 are now be created automatically when they don't exist
  • Reminder: this feature can only work on a9lh, and is guaranteed to work only if Luma3DS is launched as arm9loaderhax.bin
  • Exception handlers and related FIRM patches are now always enabled. The "Developer options" entry is now multi-choice, enabling you to choose between a standalone ErrDisp patch and the UNITINFO patch (both will make ErrDisp display some debugging information, but the UNITINFO patch will create problems with the eShop, amiibo, etc...)
  • Depending of the firmware being launched, firmware.bin, firmware_twl.bin, firmware_agb.bin or firmware_safe.bin will now always be read and used if they exist
  • Add support for reading the built-in kernel system modules (except for SAFE_FIRM) from /luma/sysmodules/<module>.cxi (this includes, of course, loader.cxi)
  • Add an option to disable various access checks: svc access checks and service access checks (patches courtesy of @Subv), FS archive access checks and arm9 exheader flags access checks
  • Removed the patch which disabled execution protection on two particular global kernel mappings (corresponding to FCRAM and VRAM, respectively) as it was totally unused
  • Other minor adjustments have been made to enhance the developer experience

v5.5 · May 27, 2016

  • Added RO patches, which allow you to load custom CRO files (mainly used for Pokémon romhacks)
  • Reimplemented svcBackdoor and patched out the anti-downgrade checks for the latest (11.0) FIRM
  • Added support for recovery mode (L+R+Up+A) on A9LH (you can safely update SysNAND from it without losing A9LH)
  • Added support for N3DS 9.5 FIRM
  • Luma3DS doesn't reboot the console anymore when exiting its configuration menu (useful for non-A9LH users)
  • Splash screen timings are now consistent, it always lasts exactly 3 seconds
  • Fixed the FRIENDS module patch not to break online play (as it did after the 11.0 update) on future system updates. Sorry for the inconvenience!
  • 3ds_injector can now be larger than the original FIRM loader (will allow for more patches)
  • Fixed compiling with latest ctrulib
  • Several performance improvements, and other minor changes and bugfixes

Developer version only:

  • Fixed the ARM9 exception handler
  • Registers are now displayed when an exception occurs
  • FCRAM and VRAM have been made executable from Kernel11
  • There are several bugs with the developer version for this release. These bugs were fixed in 6a280723f8e6982d6487a8168a23a17a9e68a740 (download here)

v5.4 · Apr 30, 2016

  • Remade the chainloader to only try to load the right payload for the pressed button. Now the only buttons which have a matching payload will actually do something during boot
  • Got rid of the default payload (start now boots "start_NAME.bin")
  • sel_NAME.bin is now select_NAME.bin as there are no more SFN/8.3 limitations anymore

Refer to the wiki for upgrade instructions.

v5.3.1 · Apr 27, 2016

_(Reuploaded because I screwed up)_

  • Fixed NANDs with partial background updates using the new FIRM.

_Please note I need testing with this change, as it might cause issues for Old 3DSes which used the Gateway launcher to downgrade the console in the past. I have verified this is probably not an issue as all the leftovers seem to be deleted after an update, but I'm still not 100% sure. If you notice a regression (Luma failing to boot) I'd like to know._

v5.3 · Apr 26, 2016

  • Added a new version of the program targeted at developers. For now it has ARM9 exception vectors for payloads (thanks to the hard work of @TuxSH), and the UNITINFO patch to allow for some ARM11 userland debugging
  • Added L+A payload to the chainloader (the filename is "a_NAME.bin")
  • Added python version of the path changer from @TuxSH. Works on Python 2 and 3, refer to the wiki for usage instructions
  • Renamed the "Use SysNAND FIRM as default" option to "SysNAND is updated" to make it more understandable
  • Now the eShop update skipping patch is only applied if the updated NAND was not booted (depends on the "SysNAND is updated" option). This is a temporary fix to avoid the Home Menu downloads bug
  • Moved the UNITINFO patch to the developer version

v5.2 · Apr 23, 2016

  • Changed name to Luma3DS, the wiki has also been changed accordingly. The new folder is just "luma", and a rename is enough
  • New logo/icon by squee666/izy
  • Very minor code cleanup.

v5.1.2 · Apr 19, 2016

I didn't really mean to push this build, but it seems 5.1.1 was built wrong for some reason, and (still can't see why), it causes issues with local play in games such as Smash Bros and New Super Mario Bros 2.
The same code worked fine from a different build.
So here's a quick rebuild. The only changes from 5.1.1 were a general code cleanup and a FatFs update, nothing too fancy.

v5.1.1 · Apr 18, 2016

  • Fixed the L+SELECT payload not working, this was due to the LFN -> SFN (8.3) conversion. Now the payload must be named sel_NAME.bin.
  • Removed LFN support from the FatFs of the chainloader (as LFNs aren't used at all by it). This shrinks down the binary by ~4 KBs.

_Note, you don't need to update if you didn't use the L+SELECT payload or if you aren't obsessed by the binary's size :)_

v5.1 · Apr 17, 2016

  • Changed the payload chainloader to load payloads named "BUTTON_NAME.bin". As an example: "up_Decrypt9.bin". "default.bin" was changed to "def_NAME.bin" ("NAME" can also be omitted). Original idea and code are by @habbbe, so thanks!
  • Fixed bug when exiting AGB_FIRM and not having an updated SysNAND, where the last used FIRM would be remembered incorrectly, thus loading 9.0 FIRM and forcing the user to reboot to play a GBA game again.

v5.0 · Apr 15, 2016

  • The way AuReiNand works has changed. Now you can specify to autoboot SysNAND or not, and a NAND is no more tied to a FIRM (since 9.0 FIRM is autodetected). If you press nothing the default NAND is booted with its own FIRM, L boots the non-default NAND with its own FIRM, R boots EmuNAND with the SysNAND FIRM if you picked "Use SysNAND FIRM as default", and vice-versa.
  • Gotten rid of the patched FIRMs, AuReiNand now finds and loads all the FIRMs from CTRNAND by default. If you are booting an emuNAND, the FIRM will also be loaded from its CTRNAND by default. This applies to AGB and TWL FIRM too, and allows for a very fast boot with no firmware files on the SD card.
  • If for some reason (like using NTR) you do not want to use the CTRNAND FIRM, you can place a firmware.bin in the aurei folder and it will be loaded in place of the default FIRM (so, the SysNAND FIRM if you picked "Use SysNAND FIRM as default", and vice-versa).
  • In order for AuReiNand to handle FIRM reboots, the .bin path needs to be hardcoded in the program. The default is /arm9loaderhax.bin (the AuReiNand.dat is also supported for 9.0 people). A PC tool was written to make changing the path easier. Compiled versions are provided for Windows, Linux and Mac OS. On Windows just drag the ARN .bin on top of the program, and write the path. On the other OSes you need to use the tool from a command prompt. If you have AuReiNand as randomloader/default.bin, just type: randomloader/default.bin.
  • You can now use online for games even on outdated firmwares thanks to a patch by TuxSH. NVer is still needed to access the eShop and NNID-related services.
  • You can now have the console report itself as a developer unit, which enables additional debugging in ErrDisp and also allows you to run software for development 3DSes on retail consoles. Thanks to Steveice10 for this!
  • Rewrote the configuration menu to allow for multiple choice options and not to print the whole menu on each button press.
  • Added a region/language emulation feature, thanks to the hard work of TuxSH. Create a "locales" folder inside aurei, and one .txt for each game, with the title id of the game (look them up on 3dsdb.com). The txt must be exactly 6 characters long: 3 for the region ("JPN", "USA", "EUR", "AUS", "CHN", "KOR", "TWN"), a space, and two for the language ("JP", "EN", "FR", "DE", "IT", "ES", "ZH", "KO", "NL", "PT", "RU", "TW"). You can enable the feature globally in the config menu. This should also finally make DLCs for foreign games work.
  • Added a New 3DS CPU patch, again thanks to TuxSH. This only has an effect on New 3DS consoles, and allows you to configure the CPU inside the config menu, the same way NTR does: Off disables the patch, and then you can choose to enable the higher clock for all games, or the extra L2 cache, or both.
  • AuReiNand should automatically work with future New 3DS FIRMs as the key generation is now built-in.
  • Countless minor bug fixes and optimizations.
  • Heartfelt thanks to these people for this release: Gelex from #cakey who helped me debugging a very nasty bug in the early stages of development, and obviously TuxSH for all his work and Steveice10 for the UNITINFO patch. Also thanks to everyone who supports the project and helps fixing bugs.

v4.2 · Apr 5, 2016

  • Fixed ARM11 access to chainloaded payloads (like CakesFW).
  • Made the memory operations faster, as they're now better optimized thanks to -O3 (thanks TuxSH!)
  • Added TWL/AGB FIRM patching/SD loading for New and Old 3DS (thanks to mid-kid of CakesFW for the reboot patch revision, and to TuxSH/Steveice10/others who worked on the patches for making it possible!). Please note that if you're booting a 9.0/9.2 NAND with 9.0 FIRM the reboot patch can't be applied (to not screw up exploits), and so the patched AGB/TWL won't work. You can also optionally enable the original GBA boot screen in the config menu.
  • Fixed the second emuNAND patched FIRM still getting created.
  • Made L not needed to load most payloads. You can now launch these payloads: up.bin, down.bin, left.bin, right.bin, x.bin, y.bin with only the corresponding button, and select.bin and r.bin with L+SELECT and L+R respectively. default.bin is now launched with just START or if the the button's matching payload doesn't exist.
  • Added the possibility to configure the brightness for the built-in screen init. This is valid for all the instances in which AuRei inits the screen (config menu, payloads, errors). The 4 levels are respectively level 5, 4, 3, 2 from the 3DS OS. Just use Up to get to it in the config menu and use A to toggle.
  • Code cleaned up and made more readable.

v4.1 · Mar 31, 2016

  • EmuNAND is now detected almost instantly when the CFW configures itself, and if the user is attempting to load an EmuNAND and none is found, SysNAND and 9.6/10.x FIRM are forced, instead of displaying an error message. This also prevents the second EmuNAND patched FIRM (patched_firmware_em2.bin) from ever being created if no second EmuNAND exists.
  • You can now access the config menu after a soft reboot by holding just SELECT.
  • Removed the copying of SecureInfo_A to ctrnand/rw/sys/SecureInfo_C on NAND from 3ds_injector, as it was done on each boot and possibly caused a slowdown. You can easily do the copy with GodMode9.
  • Fixed loading the alternate EmuNAND if 9.0 FIRM was set as default and the user had an updated SysNAND. For this, I had to remove support for the "b.bin" payload.
  • Fixed the current NAND showing incorrectly in System Settings after boot options were forced.

v4.0.1 · Mar 29, 2016

_Reuploaded to fix crash on exiting GBA games_

  • To override the last used boot mode on soft reboot, you only need to press A if you want to boot to the default option. Holding L(+payload button)/R is enough for the other modes.
  • Added version number to the config menu
  • Replaced the memsearch algorithm with a faster one
  • Integrated 3ds_injector from @yifanlu. This brings us region free and all the other FreeMultiPatcher patches. Other than that, you now have the possibility to display the currently booted NAND/FIRM in System Settings!
  • Rewritten most code for the config menu. You now can navigate to the first/last options with left and right.
  • You can now choose the 9.0 FIRM to be default in the config menu. This will essentially switch "no buttons" and L in both modes.
  • You can now choose the second emuNAND to be default in the config menu. This will essentially switch "B is not pressed" and "B is pressed".
  • When the second emuNAND is booted, it will persist like the other boot options on soft reboot
  • Bugfixes

v3.14 · Mar 26, 2016

_(Pi release)?_

  • Simplified the patching code.
  • Yet one memsearch less (should make FIRM patching even slightly faster).
  • Fixed A+L override when boot options are forced (this was the only one which stopped working).
  • Dual RedNAND support.

v3.13 · Mar 24, 2016

  • Due to requests, changed the payload chainloading to use L+R just for the default payload, and L+button for the other ones. The default will be loaded if the corresponding payload doesn't exist.
  • Increased the brightness of the built-in screen init.
  • Blocked Safe Mode (L+R+Up+A) access on A9LH, as using it would brick the console (N3DS) or remove A9LH due to the reboot to SAFE_MODE FIRM.

v3.12 · Mar 23, 2016

  • Introduced a configuration menu which can be called by holding SELECT on boot, which replaces "flags". It appears automatically when the config file is not found, and it can be used to toggle the options that were "flags" previously.
  • AuReiNand now prints error messages before shutting down.
  • To reduce SD card accesses and make the program more newbie friendly, emunand.bin, reboot.bin and loader.bin have been merged into the main executable.
  • FIRM patching has been made slightly faster (only applies if pre-patched FIRMs aren't used) by removing two memory searches.
  • AuReiNand will auto-delete the pre-patched FIRMs when you switch to/from A9LH or, in the future, new FIRM patches are added.
  • Payload chainloading now also works from CakeBrah.

_I'd like to thank mid-kid at CakesFW for the screen printing code :)_

v3.11 · Mar 21, 2016

  • Moved the workaround I used to make D9 chainloading work to the loader.bin (the fix was also pushed to the D9 repo, so hopefully this will no longer be needed soon!)
  • Slightly improved the reboot patch
  • Added emuNAND patch improvements from CakesFW
  • Made the emuNAND patch completely version-independent, it should work as-is with future FIRMs!

_Please note that you must delete all patched_firmwares from the aurei folder with this release!_ (sorry if this happened twice in a row).

_less bloated maybe?_

v3.10 · Mar 20, 2016

  • Fixed intermittent splash from CakeBrah
  • Made splash last slightly longer
  • Added shutdown on error
  • Slimmed down FatFs
  • Added error on missing emuNAND
  • Propered the built-in screen init of the chainloader (no more delays thanks to interrupts disabling, might make it slightly faster on a non-screen-init A9LH)
  • Changed folder to "aurei", changed the dat name to "AuReiNand.dat", remade the look of the 3dsx

(First luma-powered CFW!)

_Please note that you must delete all patched_firmwares from the aurei folder with this release!_

v3.9 · Mar 16, 2016

  • Further clean-up of the code
  • Fixed rare black screens with mounting SD cards
  • Updated the built-in payload chainloader to handle multiple payloads. This was inspired by Fix94's arm9select. Create a "payloads" directory inside the rei folder, put a "default.bin" inside (rename your existing arm9payload.bin if you have one), and (optionally) these other payloads: b.bin, x.bin, y.bin, select.bin, start.bin, right.bin, left.bin, up.bin, down.bin (press the matching button together with L and R to load the payload). Furthermore, the new loader will automatically perform the screen init before launching the payloads if this wasn't already done by A9LH itself.
  • Added dual emuNAND support. Please note that you can't have two 9.0 emuNANDs, and that if you want a 9.0 emuNAND it _must_ be the first one. To launch the second one, press R + B in updated sysNAND mode, or just B in regular mode. The code will just fallback to the first emuNAND if the second one is not found.

v3.8.1-r2 · Mar 10, 2016

  • Disable splash screen when forcing boot options on soft reboot
  • Added bottom screen splash image support, as suggested by Apache Thunder. Must be 320x240 and named "splashbottom.bin", goes in the rei folder

v3.8 · Mar 8, 2016

  • External ARM9 payload chainloading for a9lh (loads an "arm9payload.bin" in the rei folder when pressing L+R)
  • Cleaned up the sdmmc library (from the dark-samus a9lh fork)

v3.7.3 · Mar 6, 2016

  • A lot of code clean-up. Filesize went down by ~3 KB, and there can possibly be slight speed improvements.

v3.7.2 · Mar 5, 2016

Previous release broke .dat booting from a 9.0 NAND if A9LH was installed.

v3.7.1 · Mar 5, 2016

  • Added forcing of boot options on A9LH: always prevents losing AGB_FIRM saves by booting to sysNAND, forces the last used options on a MCU reboot (can be overridden with A).

v3.7 · Mar 4, 2016

  • Added a flag to skip decrypting and patching FIRM and use the already patched ones, for a slightly faster boot and to avoid writing 1 MB to SD on each boot. Warning!: You _MUST_ remove the patched firmwares in the rei folder after switching from a non-A9LH usage to A9LH. You have been warned! Original idea and patch by @Fix94.

v3.6.1 · Feb 26, 2016

  • Fixed reboot patch on New 3DS (178 MB cias now work!)

v3.6 · Feb 25, 2016

  • Full support for a future screen-init-enabled A9LH payload.
  • A whole new reboot patch (thanks to a skilled reverser for this). It works on New 3DS (for as of yet unused large RAM modes), doesn't break GBA and DS games (no more choosing to press A or not on Old 3DS), gets disabled automatically with 9.0 FIRM to make exploits work.
  • Because of the new reboot patch, now N and O3DS share the same "rei" folder.
  • Fixed N3DS "3D bug", thanks to TiniVi and Cakes for this).
  • Code clean-up.

v3.5.3 · Feb 20, 2016

New button combos:
Regular mode: nothing boots EmuNAND with 9.6-10.4 FIRM, L boots SysNAND with 9.0 FIRM, R boots SysNAND with 9.6-10.4 FIRM
Updated SysNAND mode: nothing boots SysNAND with 9.6-10.4 FIRM, L boots EmuNAND with 9.0 FIRM, R boots EmuNAND with 9.6-10.4 FIRM.

v3.5.2 · Feb 20, 2016

Hopefully fixed booting emuNAND with 9.0 FIRM.

v3.5.1 · Feb 20, 2016

  • Re-added reboot patch on A9LH
  • O3DS and N3DS now share the same emuNAND patch
  • Shorter patching patterns
  • patched_firmware does not keep garbage from larger loaded FIRMs
  • Flags can be empty files

v3.5 · Feb 19, 2016

  • Fixed A9LH boot detection
  • Added a new "updated syaNAND" mode, which is enabled by the "/rei/updatedsysnand" flag. In this mode, sysNAND is booted by default using the 9.6-10.4 FIRM, L boots emuNAND with 9.0 FIRM (for arm9 exploits and such) and L+R boots emuNAND with the 9.6-10.4 FIRM.
  • When sysNAND is booted on a A9LH setup, a patch (courtesy of delebile) is applied that makes updates skip writing to FIRM0 and FIRM1. This way, sysNAND can be updated without losing A9LH.

v3.4 · Feb 19, 2016

Arm9LoaderHax is now supported, all features have been ported.

v3.3 · Feb 8, 2016

First release on GitHub.