Skip to content

Kenji-NX - RetroBIOS

Type standalone
Classification Community forks
Source https://git.ryujinx.app/projects/Kenji-NX
Upstream https://git.ryujinx.app/projects/Ryubing
Version 2.1.0-pr.2
Profiled 2026-08-11
Cores kenji-nx, kenjinx, KENJI-NX
Systems nintendo-switch
Firmware titles
  • id: 0100000000000809, name: System version, required: False, note: Version string reported for the installed firmware, and the value the installer returns after verifying a package., source_ref: src/Ryujinx.HLE/FileSystem/ContentManager.cs:32,1047-1080
  • id: 010000000000080E, name: TimeZoneBinary, required: False, note: Location list and zone rules. Without it the location cache holds UTC alone and the time zone manager is marked initialised without rules., source_ref: src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs:24,62-86,88-119
  • id: 0100000000000810, name: FontNintendoExtended, required: False, note: Shared font, XOR-decoded from BFTTF into the shared memory the pl:u service exposes., source_ref: src/Ryujinx.HLE/FileSystem/ContentManager.cs:73,93, src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs:63-125,159-180
  • id: 0100000000000811, name: FontStandard, required: False, note: Shared font. A missing font title throws InvalidSystemResourceException, so a title that asks for shared fonts stops there., source_ref: src/Ryujinx.HLE/FileSystem/ContentManager.cs:68,88, src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs:63-125
  • id: 0100000000000812, name: FontKorean, required: False, note: Shared font., source_ref: src/Ryujinx.HLE/FileSystem/ContentManager.cs:71,91
  • id: 0100000000000813, name: FontChineseTraditional, required: False, note: Shared font., source_ref: src/Ryujinx.HLE/FileSystem/ContentManager.cs:70,92
  • id: 0100000000000814, name: FontChineseSimplified, required: False, note: Shared fonts. One title carries both the base and the extended simplified faces., source_ref: src/Ryujinx.HLE/FileSystem/ContentManager.cs:69-70,89-90
  • id: 0100000000000800, name: Certificate store, required: False, note: Trusted root certificates for the ssl service, the .tcf name being the one used up to firmware 2.3.0. Absent, the service logs and serves nothing., source_ref: src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs:25,114-180
Technical notes

Nintendo Switch emulator in C#, a fork of the Ryujinx line maintained by KeatonTheBot. Two builds come out of one repository: the desktop Avalonia front end on master, and the Android app on libryujinx_bionic, which carries the whole desktop tree plus src/KenjinxAndroid and src/LibKenjinx. That branch is the one read here, since master has no Android code at all. The Android package is org.kenjinx.android and ES-DE launches it with the action org.kenjinx.android.LAUNCH_GAME and the ROM in EXTRA_bootPath. ref: README.md:15-24, src/KenjinxAndroid/app/build.gradle:11-15, src/KenjinxAndroid/app/src/main/AndroidManifest.xml:8,69

Every external file hangs off one data root. AppDataManager.Initialize takes a base path, keeps a portable directory next to the binary when one exists and otherwise falls back to %APPDATA%/Ryujinx, the default directory name being still Ryujinx. Android hands it getExternalFilesDir(null), which differs from the user profile path and already exists, so the launch mode is Custom and the ~/.switch fallback that ReloadKeySet consults in UserProfile mode never fires there. games, profiles and system are created under the root on every start. ref: src/Ryujinx.Common/Configuration/AppDataManager.cs:11-17,47,50-104,223-230, src/LibKenjinx/LibKenjinx.cs:54-95, src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MainActivity.kt:264-298

Firmware is installed rather than placed. ContentManager takes a directory, a zip or an xci with an update partition, verifies each NCA against the key set and refuses a package carrying unrelated archives, then registers the contents under bis/system/Contents/registered. Android passes a file descriptor instead of a path but reaches the same two methods. Nothing gates the launch on it: homebrew NRO goes through ProcessLoader without touching the key set, and the failure is deferred to the first service that needs a system archive. ref: src/Ryujinx.HLE/FileSystem/ContentManager.cs:431-498,675-749,893-903, src/LibKenjinx/Android/JniExportedMethods.cs:459-495, src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs:189-205

Two read paths belong to the desktop build alone, because the Android build drops LibKenjinx.Native.cs and wires those subsystems differently. SDL_GameControllerDB.txt is read by SDL3Driver, whose only callers are the SDL3 audio, gamepad and keyboard drivers; on Android JnaDeviceInitialize builds an OpenALHardwareDeviceDriver and InitializeInput builds a VirtualGamepadDriver, so SDL3 never initialises. Amiibo diverge the same way: the desktop scan decrypts a dump through AmiiboBinReader and therefore needs key_retail.bin, while the Android entry buffers the raw tag in KenjinxAmiiboShim and INfp reads the figure id straight out of offset 0x1DC. ref: src/LibKenjinx/LibKenjinx.csproj:11-13, src/LibKenjinx/Android/JniExportedMethods.cs:347-348,1046-1060, src/LibKenjinx/LibKenjinx.Input.cs:28-39, src/Ryujinx.HLE/Kenjinx/AmiiboBridge.cs:10-44, src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/KenjinxAmiiboShim.cs:15-41, src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs:149-166,257-279

Config.json, Profiles.json, updates.json, dlc.json, mods.json, metadata.json and system/amiibo/.json are written by the emulator itself, and system/amiibo/Amiibo.json is a catalogue the desktop window downloads from AmiiboAPI and rewrites. None of them is user supplied. The Android app keeps its own settings in Android shared preferences. ref: src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs:198-243, src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs:61-63, src/Ryujinx.Common/ReleaseInformation.cs:14-19, src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/QuickSettings.kt:92

Distribution moved off GitHub: Kenji-NX/Android-Releases returns HTTP 451 under the Nintendo notice of 2026-02-12, and both the source and the builds are served by the Forgejo instance, which is where ES-DE points as well. ref: https://github.com/github/dmca/blob/master/2026/02/2026-02-12-nintendo.md, tmp/es-de/ANDROID.md:470-474

10 files | 1 required, 9 optional | 7 in repo, 3 missing Categories: 9 BIOS, 1 game data

prod.keys required in repo
Production key set for NCA decryption

title.keys optional in repo
Per-title key set mapping rights id to title key

console.keys optional in repo
Console-unique key set

dev.keys optional in repo
Development-unit key set

<firmware>.zip optional in repo large_file
Switch system firmware package

key_retail.bin optional in repo
Amiibo master keys used to decrypt tag dumps

SDL_GameControllerDB.txt optional in repo game_data
SDL gamepad mapping database

<amiibo>.bin optional missing
Amiibo tag dump

<CaCertificateId>.der optional missing
Override for one built-in root certificate

<driver>.zip optional missing
Replacement Vulkan driver for the Android build

Generated on 2026-08-23T16:12:06Z