github Zephyron-Dev/Citron-CI 2026.02.1
Citron "Pathfinder" Release

9 hours ago

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

  1. Major Features
  2. Graphics & Video Core
  3. Audio Improvements
  4. Steam Deck & Gamescope Support
  5. Multiplayer & Networking
  6. File System & Save Management
  7. User Interface
  8. Services & HLE
  9. Bug Fixes
  10. Platform-Specific Changes
  11. Infrastructure & Build System
  12. Known Issues
  13. Contributors

Major Features

Cross-Compatible Emulator Save Pathing with Custom Save Paths

PRs: #79, #83, #109, #110

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 SetProtocol command
  • Implemented SetWirelessAudioPolicy command
  • 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: SanitizeMessage function 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_for instead 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 GetBufferHistory in 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 NavigateToGamedbEntry due 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 SetVerifyOption instead 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:

  1. Backup your saves before upgrading
  2. The new save path system will automatically detect existing saves
  3. Configure custom save paths in Emulation → Configure → Filesystem
  4. 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.

Don't miss a new Citron-CI release

NewReleases is sending notifications on new releases.