• 2026.02.1 544456b8be

    Zephyron released this 2026-01-31 23:54:44 -05:00 | 73 commits to main since this release

    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 games like Wonder & Prime Remastered from crashing due to Biquad changes.
    • 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
    • Multiplayer Room Overlay: Re-vamped Multiplayer Overlay to showcase Players In Room w/ dynamic switching between main menu & emulation, which also appropriately showcases those on different updates than you, and people playing other games to easily see who's doing what in real time.
    • Chat Room: Introduced the ability to use emojis, a colored circle border around avatars to distinguish who's typing at a quick glance, and also the ability to self moderate by hiding future messages & also the ability to clear chat on top of the Multiplayer Room Overlay's ability to compact the chat room for better visual fidelity.

    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.

    Please also download the version.txt file if you wish to not receive any pings for Stable unless a new one releases. Keep the .txt file present within your emulators directory (I.E. where the .exe/AppImage is.)


    Citron is an experimental Nintendo Switch emulator. This release is provided as-is for educational and development purposes.

    Downloads