Citron 2026.02.1 "Pathfinder"
Release Date: February 1, 2026
Previous Version: 0.12.25
Commits Since Last Release: 263
Overview
Citron 2026.02.1 "Pathfinder" represents a significant milestone in the emulator's development, introducing comprehensive save path management, Steam Deck UI refinements, multiplayer stability improvements, and a brand new integrated mod downloader, alongside the ability to share & import custom configuration settings per-game, and our very own Compatibility List that is crowdsourced alongside Citron users. This release focuses heavily on quality-of-life improvements while also adding new graphics features and fixing critical bugs across all platforms. We've taken a step forward in trying to ensure that we continue to fix upon the current foundation while also trying to introduce new features appropriately.
Table of Contents
- Major Features
- Graphics & Video Core
- Audio Improvements
- Steam Deck & Gamescope Support
- Multiplayer & Networking
- File System & Save Management
- User Interface
- Services & HLE
- Bug Fixes
- Platform-Specific Changes
- Infrastructure & Build System
- Known Issues
- Contributors
Major Features
Cross-Compatible Emulator Save Pathing with Custom Save Paths
A complete overhaul of the save management system that introduces:
- Global Custom Save Paths: Users can now specify a global directory for all save data, making backup and migration significantly easier
- Cross-Emulator Compatibility: Save files can be shared between different emulators
- Save Mirroring: Automatic synchronization between NAND and custom save locations
- Per-Game Path Override: Individual games can have their own custom save directories
- Race Condition Fixes: Resolved threading issues that could cause save corruption during config changes
- Stack Exhaustion Prevention: Fixed recursive mirroring that could crash the emulator
- Path Priority System: Correct hierarchy prioritizing mirroring and per-game paths over defaults
- Initial Sync Feature: Prevents overwriting of NAND when configuring settings outside of emulation
- Dynamic Path Understanding: Smart detection of global vs default NAND locations
Integrated Mod Downloader & Manager
PR: #99, #102, #103, #104
A brand new mod management system built directly into Citron:
- Mod Service Backend (
mod_service.h,mod_service.cpp): Core service for handling mod operations - Download Dialog: User-friendly interface for browsing and downloading mods
- Installer Logic: Automatic installation of downloaded mods to correct directories
- Folder Organization: Smart organization of mods by game and type
- Context Menu Integration: Right-click options for mod management in the game list
- Nx-Optimizer Integration: Built-in support for MaxLastBreath's Nx-Optimizer tool
- Title ID Support: Automatic detection and organization by game title IDs
QLaunch / Home Menu Support
PR: #115
Initial implementation of Nintendo Switch home menu functionality:
- System Applet Proxies:
ISystemAppletProxy,ILibraryAppletProxy,IOverlayAppletProxy,IApplicationProxy - Observer Services: Event handling for state controllers
- Applet Management: Library applet and home menu management interfaces
- Menu Bar Integration: New UI option to launch QLaunch/Home Menu
- Build Configuration: Updated core build config for QLaunch services
Settings Profile Sharing
PR: #98
Share and import per-game configurations:
- JSON Export: Export game-specific settings to shareable JSON files
- JSON Import: Import settings configurations from other users
- BasicSetting Support: Extended settings infrastructure for sharing
- System State Checking: Ensures
system.IsPoweredOn()check to avoid applying during emulation (must be done whilst not playing a game) - INI Parsing: Proper conversion between JSON and INI formats
Game List Enhancements
PR: #114, #116
New features for managing your game library:
- Surprise Me! Feature: Random game selection with dice icon
- Game Hiding: Hide specific games from the game list via context menu
- Hidden Paths Storage: Persistent storage of hidden game paths in qt_config
- Launch Animations: Animated icon during initial game boot
- Accent Color Theming: Customizable accent colors throughout more parts of the UI
Graphics & Video Core
ETC2 Texture Compression Support
PR: #80
- Added support for ETC2 texture compression format
- Improves compatibility with games using this mobile-derived compression format
- Proper decoding and rendering of ETC2 compressed textures
Texture Component Type Handling
PR: #81
Complete infrastructure for texture component types:
- SamplerComponentType Enum: New enumeration for texture component classification
- SPIR-V Backend Integration: Component type handling in shader compilation
- Shader Environment Updates: Support for texture component types in shader processing
- Texture Pass Optimization: Component type integration in optimization passes
- Caching & Serialization: Persistent storage of component type information
BCn Unswizzle Compute Shader
PR: #81 (reverted), reintroduced in later commits
- Dedicated compute shader for BCn texture unswizzling
- Improved performance for block-compressed texture processing
- Build system improvements for shader compilation
CRT Shader Filter
PR: #82
Retro CRT display emulation:
- Configurable Scanlines: Adjustable scanline intensity and spacing
- Phosphor Glow: Simulated phosphor persistence effect
- Curvature: Optional screen curvature simulation
- Color Bleeding: Authentic CRT color bleeding effects
- Performance Optimized: Minimal impact on frame rates
VRAM Management System
PR: #111, #112
Comprehensive memory management to prevent VRAM leaks:
- Conservative/Aggressive Modes: User-selectable VRAM usage strategies
- Garbage Collection: Automatic cleanup of unused VRAM resources
- Cache GC Improvements: Type-safe garbage collection with proper static_cast usage
- Settings Simplification: Streamlined GC aggressiveness options (Off/Light only)
- VTable Generation: Fixed linker errors by generating vtable in settings.cpp
Vulkan Improvements
- VK_KHR_buffer_device_address: Infrastructure for buffer device address support (#107)
- Line Rasterization Fallback: Graceful fallback for unsupported line rasterization modes
- Image Dimension Clamping: Clamp image dimensions and copy extents to GPU limits
- Query Cache Coordination: Proper coordination with render pass boundaries
- Submodule Updates: Updated Vulkan headers and dependencies
- Corrupted Cache Cleanup: Fixes for shader allocation issues (
bad_alloc)
Rendering Fixes
- TAA AMD Artifacts (#88): Fixed temporal anti-aliasing graphical artifacts and pixel noise on AMD hardware
- NVDEC Memory Validation: Added memory validation for H264 decoder and VIC
- Texture Cache: Handle unmapped memory regions gracefully
- Integer Textures: Fixed bug for AMD renderers that made games fail to boot due to shader compilation issues.
Audio Improvements
Audio Renderer REV12 and REV13 Support
PR: #85
- Extended audio renderer to support firmware revisions 12 and 13
- Improved compatibility with newer game titles
- Proper audio effect handling for latest system versions
Audio Effect Versioning Refactor
PR: #95
- Improved biquad filter implementation
- Fixed incorrect revision number (12 → 15)
- Better version detection for audio effects
- Enhanced AM service audio handling
Steam Deck & Gamescope Support
Complete UI Overhaul for Gamescope
PR: #86
Comprehensive restructuring of all UI elements for Steam Deck compatibility:
Dialog Restructuring
- About Dialog: Redesigned layout for Gamescope display
- Configure Dialog: Restructured configuration tabs and options
- Controller Overlay: Optimized for gamepad-only navigation
- Multiplayer Dialogs: Rearchitected for touch/gamepad input
- Update Dialog: Gamescope-compatible update notifications
Overlay Fixes
- Performance Overlay: Fixed display and sizing for Gamescope
- MP Overlay: Corrected multiplayer overlay positioning
- VRAM Monitor: Proper VRAM usage display on Deck
Resolution & Display
- Fixed UI and resolution bugs specific to Gamescope
- Added Gamescope detection boolean for conditional logic
- MSVC compilation fixes for Gamescope code paths
Multiplayer & Networking
Socket & BSD Fixes
PR: #91, #96, #100, #107
Critical networking stability improvements:
- SIGSEGV Fix: Resolved segmentation faults in socket handling
- Socket Data Cleanup: Proper initialization and cleanup of socket data
- Table Mutex: Added mutex protection for socket tables
- Guards & Mutex: Thread-safe socket operations in bsd.cpp
- Socket Proxy Protection: Mutex and flush operations for socket proxy
- Race Condition Fixes: Fixed race between socket closure and packet reception
- CPU Starvation Fix: Resolved busy-waiting issues causing performance drops
- Socket Re-utilization Removal: Prevented issues from reusing closed sockets
LDN Service Improvements
PR: #107
- Implemented
SetProtocolcommand - Implemented
SetWirelessAudioPolicycommand - Better protocol handling for local wireless play
Multiplayer QoL Improvements
PR: #92, #93, #97, #101, #108
- Chatroom Enhancements: New features and UI improvements
- Link Filtering: Robust URL link filtering and sanitization in chat
- Message Sanitization:
SanitizeMessagefunction for safe chat display - Race Condition Fix: Fixed packet discovery race conditions
- Node Numbering: Ensured node starts at 1, not 0
- Packet Mutex: Added mutable packet_mutex for thread safety
- Stabilization: Added
sleep_forinstead of yield for timing - Overlay Cleanup: Proper cleanup of multiplayer overlay resources
- Z-A Connection Issues: Fixed alphabetical connection ordering bugs
File System & Save Management
Save Path Hierarchy
PR: #109, #110
- Correct prioritization: Mirroring → Per-Game → Global → Default
- Proper display of paths in configuration UI
- Initial sync to prevent NAND overwriting
- Boolean flag for re-arm of proper syncing
- Dynamic understanding of global vs default NAND locations
- Base location determination logic
GetBufferHistory Implementation
PR: (nvnflinger fix)
- Implemented
GetBufferHistoryin nvnflinger service - Prevents game hangs caused by missing buffer history data
User Interface
Performance Overlay Fixes
PR: #87
- Fixed FPS counter flickering
- Corrected half framerate reporting issue
- Smoother frame time display
Overlay Shutdown & Zombie Process Prevention
PR: #89
- Proper overlay cleanup on shutdown
- Prevention of zombie overlay processes
- Resource release on emulation stop
Memory Release on Stop
PR: #90
- Properly release and reclaim memory when stopping emulation
- Reduced memory footprint after stopping games
- Compiler fixes for core.cpp on MSVC and Android
UI Modernization
PR: #117, #118
- Consistent accent coloring across UI elements
- Search field styling improvements
- Game list color consistency
- Modernized button designs in configuration dialogs
- Light/Dark theme text fixes
- Removed redundant
NavigateToGamedbEntrydue to implementation of our built-in and maintained GitHub for Compatibility Listings.
Compatibility List Overhaul
PR: #106
- Automated compatibility reporting
- Remote list syncing with GitHub
- Fixed QString handling for game names with special characters
- Improved GitHub parsing logic
Hotkey Fixes
PR: #84
- Unlock framerate hotkey (Ctrl+U) now works during gameplay
- Proper hotkey registration and handling
Services & HLE
Parental Control Service (PCTL)
PR: #115
- Implemented service stubs for firmware 18.0.0+
- Required for QLaunch compatibility
NS Application Manager
PR: #115
- Implemented interface stubs for firmware 20.0.0+
- Application enumeration support
SSL Service
PR: #111
- Implemented
SetVerifyOptioninstead of stubbing - Improved SSL certificate handling
Miscellaneous Service Stubs
PR: #115
- Various service implementations for QLaunch support
- Event handling improvements
Bug Fixes
Critical Fixes
| Issue | Description | PR/Commit |
|---|---|---|
| Library Applet Freeze | Fixed controller freeze in library applets | 22a458a53c
|
| Shortcut Launch Hang | Deferred EmuThread start to fix shortcut launch | 97ebddea66
|
| CLI Launch Hang | Deferred game boot for main event loop | 5c5baf69e2
|
| Stack Exhaustion | Prevented recursive save mirroring crash | f6b8535bef
|
| Race Conditions | Multiple threading fixes in save mirroring | #83 |
| VRAM Leaks | Comprehensive VRAM management system | #111 |
Graphics Fixes
| Issue | Description | PR/Commit |
|---|---|---|
| Black Squares | Removed alpha_to_coverage causing artifacts | c5f35b0712
|
| TAA AMD Noise | Fixed temporal AA on AMD GPUs | #88 |
| Unmapped Memory | Graceful handling of unmapped regions | 7af18a2aa8
|
Platform Fixes
| Issue | Description | Platform |
|---|---|---|
| Clang Compilation | Multiple Clang strict rule fixes | Linux |
| PGO Filepath | Fixed Clang PGO Linux filepath naming | Linux |
| Linux CLI | Fixed CLI updating functionality | Linux |
| MSVC Float | Added float requirement cast | Windows |
| Android static_cast | Multiple static_cast fixes | Android |
| macOS out_displays | static_cast requirement | macOS |
Platform-Specific Changes
Windows
- Float casting requirements
- Proper vtable generation
Linux
- Clang strict rule compliance
- PGO filepath naming fixes
- CLI update functionality restored
macOS
- static_cast requirements for out_displays
- Compilation compatibility fixes
Android
- Multiple static_cast fixes for warnings
- Prevented RomFS/ExeFS dump while emulation running
- External storage permission handling with scoped storage
- Double to static_cast conversions
Infrastructure & Build System
CMake Changes
- Added mod downloader files to build
- Switched external binaries to yuzu-mirror
- Build config updates for QLaunch services
Dependencies
- Updated Vulkan submodules
- External dependency organization
Code Quality
- Removed unused title IDs
- Code cleanup in multiplayer components
- Consistent code formatting
Reverted Changes
The following changes were introduced and subsequently reverted due to issues:
| Commit | Description | Reason |
|---|---|---|
9ea0a36fc6
| Force inlining of BCn decoder functions | Performance regression |
989049df07
| CDmaPusher command optimization | Stability issues |
1274fcec3b
| Texture component type support (initial) | Reimplemented differently |
47edb00351
| Socket performance fixes | Caused other issues |
c575341d1e
| LAN discovery race condition fix | Needed rework |
Known Issues
- QLaunch support is experimental and may not work with all system configurations
- Some games may still experience issues with the new save path system during migration
- CRT shader may have minor visual differences across different GPU vendors
Upgrade Notes
Save Data Migration
If upgrading from 0.12.25:
- Backup your saves before upgrading
- The new save path system will automatically detect existing saves
- Configure custom save paths in
Emulation → Configure → Filesystem - Enable mirroring if you want automatic backup to a secondary location
Settings Changes
- VRAM GC aggressiveness simplified to Off/Light only
- Per-game settings can now be shared via JSON export
New Permissions (Android)
- Added permissions for read/write/managing external storage directories with scoped storage support
Statistics
- Total Commits: 150+
- Pull Requests Merged: 40
- Files Changed: 200+
- New Features: 15+
- Bug Fixes: 50+
Contributors
Thank you to all contributors who made this release possible!
- Core Development Team
- MaxLastBreath (Nx-Optimizer integration)
- Community bug reporters and testers
Full Changelog
For the complete list of changes, see the commit history or the detailed commit list provided in the release.
Citron is an experimental Nintendo Switch emulator. This release is provided as-is for educational and development purposes.