github J-D-K/JKSV 08/25/2025
JKSV Rewrite First Release

10 days ago

JKSV 08/25/2025

This version of JKSV has been rewritten from the ground up. It shares none of original version's code. The goal of this was to make JKSV more stable, navigable, and maintainable.

  1. As mentioned, JKSV has been completely overhauled and rewritten.

    • C++ features: JKSV now makes proper use of polymorphism, RAII, STL containers, and smart pointers throughout.
    • State system: Replaces the old mess of global variables to track state. This alone makes the code far easier to follow and maintain.
    • Resource management: No more manual memory management. No more memory leaks.
    • C APIs: All C library APIs are wrapped in classes and smart pointers. This ensures proper cleanup and makes the code easier to work with.
    • Error logging: Errors are logged with file, function, and line number, making issues far easier to track down.
    • Code structure and quality: Overall readability and maintainability have been drastically improved.
  2. Cached boot.

    • Faster startup: JKSV now caches title data to improve boot times. On recent firmwares, Nintendo’s changes have slowed down NsGetApplicationControlData. Caching title information resolves this issue.
    • Automatic invalidation: JKSV detects and rebuilds the cache itself whenever new titles are detected. Unlike JKSM on 3DS, there’s no need to manually refresh this yourself.
  3. Remote storage heavily reworked.

    • System overhaul: The entire remote storage system has been reworked from the ground up.
    • Expansion: The new design makes it simpler to add support for additional services in the future.
    • Important note: Adding support depends on the information a service requires. I’m not handing over all of my personal info just so JKSV can support it.
  4. Overhauled WebDav code.

    • Completely reworked: The WebDav code has been rewritten from the ground up.
    • Namespace agnostic: Instead of slicing and splicing namespaces to find XML tags, the new code ignores them entirely. This eliminates unnecessary string allocations and improves compatibility.
    • Recursive fetching: Your entire WebDav listing is now fetched and processed recursively on boot, rather than on-demand. This eliminates UI pauses when servers respond slowly.
    • Consistency: Changing the output path for a title on your Switch now also updates the folder on your WebDav server automatically. This should have been like this in the first place...
    • Instructions for setting up WebDav can be found here.
  5. Reworked Google Drive code.

    • Major cleanup: The Google Drive integration has been heavily reworked, fixing various issues and inconsistencies.
    • Full title support: Folder names once again use full UTF-8 titles. This was changed with the previous WebDav implementation and has been reverted.
    • New login method: Instead of relying on the Switch’s built-in web browser, JKSV now uses the Limited Input method. You can now log in with your phone or another device instead.
    • Instructions for setting up Google Drive can be found here.
  6. Reworked file handling logic.

    • Complete overhaul: All file handling logic has been rewritten from the ground up.
    • Bug fix: This addresses a rare issue where JKSV could get stuck at the end of a file transfer.
  7. Reworked UI Code.

    • Complete overhaul: All UI code and elements have been rewritten and fine-tuned.
    • Familiar Layout: The interface remains familiar, but everything underneath is completely different.
    • Better translation support: The UI was designed from the ground up with translations in mind. In the original, this was just tacked on later.
    • Text Menu (JKSM 2016) Mode Returns: For fans of the original JKSM on 3DS, JKSV now supports JKSM Mode where titles are listed using text menus instead of an icon grid array.
  8. Additions.

    • Auto-Upload: JKSV can now automatically upload backups to your selected service and remove them from the SD card.
    • Controllable compression level: You can set the compression level used when creating zipped backups.
    • Text Menu (JKSM) mode: Toggle between icon grids and text menus for displaying titles.
    • Toggleable System Saves: You can now toggle whether scanning, loading, and display Device, BCAT, Cache, and System is desired. Disabling all of them also improves boot times.
    • JKSV now includes a metadata file in backups containing information about the save. This improves accuracy and reliability when restoring saves.
  9. Notes concerning missing features.

    • Include Device Saves with Users hasn't been implemented yet. It requires some careful consideration and planning.
    • File Mode is not available yet.
    • Filtering paths from backup and deletion is not yet implemented.
  10. Additional Notes.

    • Most backups from the original JKSV are compatible. Exceptions include titles that extend save data, which are now handled correctly in the rewrite.
    • The SVI format has been revised. SVI files from the original JKSV are not compatible with this rewrite.
    • The translations provided are all completed by AI. If you have revisions or would like to fix them, feel free to do so!
    • Some work may still be needed regarding cache type saves and handling them.
    • JKSV's rewrite does not use the same configuration file as the original. You will need to reconfigure it.

Extra, extra notes:

  1. Uses FsLib, a C++ wrapper library I wrote around 3DS and Switch FS calls.

    • More control: FsLib allows me finer control over file operations.
      • For example, if the final size of a file is known ahead of time, FsLib can skip redundant calls to extend the file during writes. This speeds up file transfers.
    • Paths are standardized upon construction to ensure compatibility with the Switch's FS.
    • Improved error handling and logging: Every operation returns whether it succeeded. If not, FsLib records an internal error string with the location and error code for easier debugging.
    • Because of this, the option Use FS Commands Directly has been removed as it serves no purpose anymore.
  2. Uses SDLLib, a C++ wrapper library I wrote containing reusable functions all of my projects share.

    • Central Texture Manager: All textures are now loaded, tracked, and freed by a single manager, eliminating duplicate handling.
    • Surfaces & Textures wrapped: SDL Surfaces and Textures are wrapped in smart pointers or classes, ensuring proper cleanup.
    • Improved text handling: Text handling has been reworked and improved compared to the original JKSV implementation.

TL;DR

This is effectively a completely different program. It looks like JKSV, runs like JKSV, but it's a completely different beast.

Support

I don’t expect it, and it’s absolutely not required, but rewriting JKSV to be the best it can be has, and still is, taking a lot of time and hard work. If you’d like to show your appreciation, you can now, and I truly do appreciate it.

Support me for the countless hours I poured into JKSV

Don't miss a new JKSV release

NewReleases is sending notifications on new releases.