Ayyyy, welcome to the UI: Actions Menu → General Improvements PR!
We are soooo back boys and girls.
This is the first PR in a series aimed at delivering the largest overhaul and set of improvements to the Actions menu yet.
This initial PR introduces smaller visual and navigation improvements as part of the broader Actions menu refresh, while also serving as the starting point for locale fracturing across the entirety of Ryujinx. As this is a series of progressive PRs, bug fixes and additional refinements will continue to be rolled out throughout the series.
### GENERAL:
* **Fractured:** A bunch of locales. The following new files, and their designations, were created:
* `MenuBar_Actions.json` - all UI-related locales for the `Actions` menu
* `MenuBar_File.json` - all UI-related locales for the `File` menu
* `Dialog_Firmware.json` - all firmware-related dialog locales
* `Dialog_Keys.json` - all keys-related dialogs locales
* `Error.json` - all error-related locales
* `StatusBar.json` - all UI-related locales for the Status Bar
**NOTE:** To keep this PR manageable, `MenuBar_File.json`, `Error.json`, and `StatusBar.json` were NOT populated with their locales. Additionally, `RenderDoc.json` was deleted and all of its locales were moved to `MenuBar_Actions.json` because all RenderDoc locales are present only in the `Actions` menu.
* **Fixed:** Some typos in `Locales.md`.
### **DEFAULT ACTIONS:**
* **Added:** File picker dialog titles for `Install Firmware` and `Install Keys`.
* `Install Firmware`: "Select an XCI file or a ZIP archive to install firmware from" and "Select a folder to install firmware from".
* `Install Keys`: "Select a KEYS file to install keys from" and "Select a folder to install keys from".
* **Improved:** `Install Firmware` and `Install Keys` submenus.
* Submenus no longer have periods before file extensions; this avoids visual issues in right‑to‑left languages matches other emulators using uppercase extensions (e.g. `Install Firmware` → `Install Firmware (.XCI or .ZIP)` is now `Install Firmware` → `Install Firmware (XCI or ZIP)`).
* Submenus no longer repeat the main menu title; they now show only the specific option, making navigation cleaner (e.g. `Install Firmware` → `Install Firmware (XCI or ZIP)` is now `Install Firmware` → `XCI or ZIP`).
* Submenus now end with an ellipsis; this follows UI conventions that signal additional user input is required (e.g. `Install Firmware` → `XCI or ZIP...`).
* **Moved:** `Manage File Types` menu and submenu.
* These menus let Windows and Linux users associate formats like .xci and .nsp with the emulator so they can be opened by double‑clicking. macOS already handles this automatically when an app supports the format.
* Since this PR focuses on the `Actions` menu, this menu and its submenus have been moved under `File`, with their locales relocated to the new `MenuBar_File.json`.
* This menu is useful but currently too vague about its purpose. A later PR will refine and clarify it.
* **Improved:** `Mii Editor`
* Removed the `Mii Editor` tooltip, as the menu was already self‑explanatory.
* The loading text for the `Mii Editor` is now locale-dynamic, instead of the previously static "miiEdit".
### **IN-GAME ACTIONS:**
* **Updated:** Menu grouping with separators (see images below)
* **Renamed:** `Resume` to `Resume Emulation` and `Pause` to `Pause Emulation`, ensuring consistency with the other options.
* **Fixed:** `Pause Emulation`/`Resume Emulation` UI Bug
* Previously, if a user paused emulation and then exited the game without closing the emulator, the next game launch would incorrectly show `Resume Emulation`, as though the new game were paused.
* **Updated:** `Scan Amiibo` and `Scan Skylander` icons to a chess rook and dragon, making them clearer and more fun than the previous cubes.
* **Added:** Shortcut for `Simulate Wake-up Message`
* Few games support it, but an in‑game shortcut still helps players who use it often.
* **Removed:** `Manage Cheats` from the menu
* `Manage Cheats` doesn't properly work in-game right now, and is removed in this PR. It will be returned to later in Part 4.
Please see the image comparisons below.
_If there are any features or changes that you wish to be implemented, please comment down below and I'll be happy to accommodate!_
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/42
Did you know that the garbage collector's default settings are designed for single-threaded applications and quick start-up times? We don't care about either of these.
Configured:
- Concurrent GC (default is true) (set for clarity)
- RetainVM: segments that should be deleted are put on a standby list for future use (default is false)
- QuickJit: enabling quick JIT decreases startup time but can produce code with degraded performance characteristics; for example, the code may use more stack space, allocate more memory, and run slower. (default is true) (disabled)
- ReadyToRun: configures whether the .NET runtime uses pre-compiled code for images with available ReadyToRun data; disabling this option forces the runtime to JIT-compile framework code. (default is true) (set to false, we dont publish with this option anyway)
- TieredPGO: this setting enables dynamic (tiered) profile-guided optimization (PGO) in .NET 6 and later versions. If quick JIT is disabled but tiered compilation is enabled, only pre-compiled code participates in tiered compilation. If a method is not pre-compiled with ReadyToRun, the JIT behavior is the same as if tiered compilation were disabled.
Features:
- Set ``GCLatencyMode.Interactive`` when in-menu and emulator is paused, otherwise uses ``GCLatencyMode.LowLatency``.
- Added a new UI option in the Settings > CPU menu to toggle ``GCLatencyMode.LowLatency`` during guest runtime.

Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/88
This PR aims to Fix the Windows fullscreen gap when toggling from maximized state by using canonical Win32 fullscreen approach. When entering fullscreen, the window style is saved and replaced with WS_POPUP | WS_VISIBLE to remove all window chrome (title bar, borders), then SetWindowPos sizes the window to cover the full screen with SWP_FRAMECHANGED to force Win32 to recalculate the frame. On exit, the original window style is restored. This eliminates the few-pixel gap at the top that occurred because Avalonia's WindowState = FullScreen transition from a maximized state retained the title bar non-client area, leaving visible space at the top of the screen (Fullscreen resolution would be 1920 x 1072p on a 1080p monitor, it now correctly renders at 1920 x 1080p)
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/80
This PR addresses [Ryubing/Issues#345](https://github.com/Ryubing/Issues/issues/345) by fixing the Windows console hide/show path so it only acts on Ryujinx’s own console window instead of whatever window happens to be focused during startup. Previously, when Show Console was disabled, the helper could race with focus changes and end up affecting another app or shell window while leaving the console visible; this change removes that foreground-window dependency and keeps the startup behavior scoped to the Ryujinx console.
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/32
This window can be accessed via "Help" menu in the title bar.
This menu's data is synced with the in-app-list LDN game data, and that has been modified to hide unjoinable games (in-progress and/or private (needing a passphrase)). You can still see these games in the list.
Moved AppLibrary, Configuration, and PlayReport namespaces to Ryujinx.Systems, add the compat list stuff in the base Ryujinx.Systems namespace.
Moved the compatibility UI stuff to the proper UI view/viewmodel folders.
Metal sounded like a good idea to get in the emulator but frankly I
underestimated just how experimental and not ready it was.
From my write up in the Discord:
```
As is, Metal supports only a few games.
The games it does support freeze on first use of not playing them via Vulkan, because shader translation is broken.
So you need to use a dirty hack to not delete all your shaders.
Not to mention it breaks many games via MoltenVK because of changes to the shared GPU code.
Merging Metal seemed like a great idea, because of the few games it does support.
But I don't think it's worth it. Many of the games it breaks via MoltenVK *don't work via Metal*.
Which effectively makes current Ryubing worse for Mac users than Ryujinx 1.1.1403.
I think what I'm gonna do is revert Metal, and reopen it as a PR. That way, you can still take advantage of the Metal backend as is, but without making other games worse with no solution.
```
For what it's worth, the shader translation part could at least be
"fixed" by always applying a 30ms delay for shader translation to Metal.
That being said, that solution sucks ass.
The MoltenVK regressions are even worse.
I hope this is not a let down to the Mac users. I hope you realize I'm
reverting this because you're actively getting a worse experience with
it in the emulator.