- C 61.1%
- C++ 33.3%
- Makefile 2.2%
- Assembly 1.3%
- GLSL 0.9%
- Other 1.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| docs | ||
| exefs_patches/SaltyNX_Fixes | ||
| libnx32_min | ||
| saltysd_bootstrap | ||
| saltysd_core | ||
| saltysd_proc | ||
| tests | ||
| .gitignore | ||
| exceptions.txt | ||
| Makefile | ||
| README.md | ||
| version.mk | ||
SaltyNX
Monitor-preference fork
This branch is based on the latest masagrator/SaltyNX upstream commit
(cf2adb7b8facdc34e3cbf9ec6ff7686f67575048, 2026-10-23): release 2.1.3 plus
the subsequent NVN stack-usage fix. Upstream history and attribution are retained.
Version 2.1.3-monitor.1 restores the refresh rate saved by the matching
FPSLocker fork for the connected
monitor and resolution. Game FPS targets remain independent; automatic Display Sync
takes precedence. sys-dock's link-training behavior is unchanged.
Hardware tested (2026-10-27): the operator tested the installed SaltyNX 2.1.3-monitor.1 / FPSLocker 3.5.0-monitor.1 pair and reported that it works great on the Erista Switch 1 / Smash 13.0.5 setup using a 120-Hz display and 60-FPS game target. Each EDID-identified monitor keeps its own saved preferences.
See display preferences for configuration, installation, build instructions, the dated test result and further coverage scenarios.
The upstream documentation below is retained for reference. For this fork's update,
preserve your existing SaltySD settings, exclusions and plugins; do not delete them.
Sysmodule for injecting custom codes into retail Nintendo Switch games, by default it injects "Core" which includes many useful features known as NX-FPS (tracking game performance statistics, unlocking FPS) and ReverseNX-RT (switching between docked and handheld graphics profiles). Sysmodule also manages custom refresh rates in both handheld and docked modes.
This sysmodule targets more common approach, so basic compatibility with all games is a priority. If you want to inject your own code for specific game I recommend much more powerful code injection framework - exlaunch.
Original sysmodule was created by: https://github.com/shinyquagsire23
This fork includes many new features (aforementioned NX-FPS and ReverseNX-RT), compatibility fixes, and beside plugins support also supports patches for easy way to edit common functions.
Caution
It is required to have FW installed at least 10.0.0 version
No technical support for anything else than stock Atmosphere.
Using it in online games such as Splatoon 3 can lead to ban as it injects custom code, be aware of that.
Important
Known issues:
- Cheats using HEAP+offset address instead of MAIN+offset address chain may not work properly.
Tools utilizing SaltyNX:
- FPSLocker
- ReverseNX-RT
- Status Monitor Overlay
- And more
For additional functions you need SaltyNX-Tool
Patches pattern:
- filename is a function symbol with filetype
.asm64for 64-bit games,.asm32for 32-bit games, - inside file write with hex editor instructions that you want to put into this function,
- put this file either to
SaltySD/patchesto make it work for every game, or toSaltySD/patches/*titleid*to make it work for specific game.
Examples of such patches can be find HERE.
How to install release:
Download newest version from RELEASES, look for .zip file with name starting "SaltyNX", unpack it.
Put atmosphere and SaltySD folders unpacked from zip archive to root of your sdcard.
Remember to restart Switch.
Important
In case of any issues after updating already existing SaltyNX setup, remove whole SaltySD folder and put fresh one from release.
Exceptions
List of titles not compatible only with external plugins, they support all other SaltyNX features
| Title | Why? |
|---|---|
| Azure Striker Gunvolt: Striker Pack | 32-bit games don't support plugins |
| Baldur's Gate and Baldur's Gate II: Enhanced Editions | 32-bit games don't support plugins |
| CelDamage HD | 32-bit games don't support plugins |
| DEADLY PREMONITION Origins | 32-bit games don't support plugins |
| Death Road to Canada | 32-bit games don't support plugins |
| Dies irae Amantes amentes For Nintendo Switch | 32-bit games don't support plugins |
| Goat Simulator | 32-bit games don't support plugins |
| Gothic | 32-bit games don't support plugins |
| Grandia Collection | Only launcher is 64-bit, actual games are 32-bit, so plugins are not supported |
| LIMBO | 32-bit games don't support plugins |
| Luigi's Mansions 2 HD | 32-bit games don't support plugins |
| Mario Kart 8 Deluxe (1.0.0-3.0.3) | 32-bit games don't support plugins |
| Megadimension Neptunia VII | 32-bit games don't support plugins |
| Moero Chronicle Hyper | 32-bit games don't support plugins |
| Moero Crystal H | 32-bit games don't support plugins |
| Monster Hunter Generations Ultimate | 32-bit games don't support plugins |
| Monster Hunter XX Nintendo Switch Ver. | 32-bit games don't support plugins |
| New Super Mario Bros. U Deluxe | 32-bit games don't support plugins |
| Ni no Kuni: Wrath of the White Witch | 32-bit games don't support plugins |
| Pikmin 3 Deluxe | 32-bit games don't support plugins |
| Planescape: Torment and Icewind Dale | 32-bit games don't support plugins |
| Radiant Silvergun | 32-bit games don't support plugins |
| Sherlock Holmes and The Hound of The Baskervilles | 32-bit games don't support plugins |
| Tokyo Mirage Session #FE Encore | 32-bit games don't support plugins |
| Valkyria Chronicles | 32-bit games don't support plugins |
| World of Goo | 32-bit games don't support plugins |
| YouTube | Unknown |
| 超次次元ゲイム ネプテューヌRe;Birth1 | 32-bit games don't support plugins |
| 超次次元ゲイム ネプテューヌRe;Birth2 SISTERS GENERATION | 32-bit games don't support plugins |
| 神次次元ゲイム ネプテューヌRe;Birth3 V CENTURY | 32-bit games don't support plugins |
List of games not compatible with SaltyNX at all
| Title | Why? |
|---|---|
| Witcher 3 GOTY (version 3.2) | heap related |
Thanks to
Cooler3Dfor sharing code with me how he was changing handheld display refresh rate in his tools that were first publicly available tools allowing this on HOS. I have used that as basis to make my own function.
Other
Claude was used to:
- cleanup
libnx32_minfrom unused files and add files to make it independent from newlib shipped with DevkitARM which was breaking PIE compilation - Fix
bootstrap32code to generate properly position independent ELF core32andbootstrap32now relocate themselves instead of sysmodule doing that for them (fixing an issue with pointers needed relocating in read only sections)- Add support for showing logo via shader
- Implement my design for triple buffer workaround targeting memory hardcoded double buffer games