3DS Store › Apps › ReSharp3DS

ReSharp3DS changelog

v2.3.6 · Oct 20, 2026

<img width="284" height="459" alt="image" src="https://github.com/user-attachments/assets/d8220e5b-0904-4228-8afd-4ee7535dc182" />

Fast CIA Installation

<img width="246" height="246" alt="qr-code" src="https://github.com/user-attachments/assets/fe4b2d8d-76e2-4b54-baa0-b12ff6de7cb7" />

ReSharp3DS Loader Update

  • Add credits
  • Update UI
  • Improvements to the Translation System @HadriX69
  • Bugs Fixes
  • Update app informations ( New icon, new author )

v2.2.6 · Sep 6, 2026

<img width="284" height="459" alt="image" src="https://github.com/user-attachments/assets/1177410a-fd5c-44e5-afc4-af6e982c9d28" />

Fast CIA Installation

<img width="246" height="246" alt="qr-code(1)" src="https://github.com/user-attachments/assets/ae545b8c-c0a2-4eb6-b395-22a6e629297b" />

ReSharp3DS Launcher Update

  • Improve UI
  • Improve french translation
  • Add new icon

v2.2.5 · Sep 5, 2026

<img width="284" height="459" alt="image" src="https://github.com/user-attachments/assets/b16772a6-9a63-49eb-a931-f4ae9e6908db" />

Fast CIA Installation

<img width="246" height="246" alt="qr-code" src="https://github.com/user-attachments/assets/82deb291-1b6e-4282-89df-a9f4c286fd41" />

ReSharp3DS Runtime Update

  • Remove Updater.cpp, Updater.h
  • Fix compile crash

v2.2.4 · Jun 22, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/9168fcf4-9f7a-492c-9381-ef15543d499b" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS-QR_CODE" src="https://github.com/user-attachments/assets/49d7118a-319e-4760-b637-f55ce205a4a6" />

<p align="center">
<a href="https://discord.gg/RZPgeDpCNQ">Discord server</a>
</p>

ReSharp3DS Runtime Update

Added

  • Added manifest.json support in the launcher.
  • Added support for manifest-based .pe display names.
  • Example: app.pe can now appear as TestApp.
  • Added manifest metadata support:
  • name
  • author
  • version
  • entry
  • description
  • Added selected app metadata display in the launcher:
  • Author: ...
  • Version: ...
  • Added touchscreen support in the launcher.
  • Added better launcher file browser behavior.
  • Added app/folder sorting in the launcher.
  • Added runtime_net.cpp and runtime_net.h.
  • Added runtime network/file helper functions:
  • FileExists
  • DirectoryExists
  • EnsureDirectory
  • DownloadFile
  • Added basic crash log infrastructure.
  • Added basic crash screen infrastructure.
  • Added future log paths:
  • sdmc:/ReSharp3DS/logs/crash.txt
  • sdmc:/ReSharp3DS/logs/clr-panic.txt
  • sdmc:/ReSharp3DS/logs/<AppName>.log
  • Added centralized input snapshot logic.
  • Added cached runtime state for:
  • held buttons
  • pressed-once buttons
  • touch position
  • circle pad position
  • Added graphics target support for top/bottom screen rendering.
  • Added transparent sprite drawing support.

Changed

  • Reworked launcher app naming.
  • The launcher now uses manifest.json to rename the selected .pe entry instead of only renaming the app folder.
  • The launcher now reads the manifest entry field to know which .pe file should receive the display name.
  • Replaced the old update-oriented code with a smaller runtime network helper.
  • Improved input handling by avoiding multiple hidScanInput() calls per frame.
  • Improved app browser organization and metadata rendering.

Removed

  • Removed old updater-style API usage from the launcher.
  • Removed old UpdateInfo / CheckForUpdate style update flow.
  • Removed runtime auto-update behavior from this part of the project.

Fixed

  • Fixed duplicated copy_json_string_value(...) definition in gui.cpp.
  • Fixed generated C++ string literals where \n had been converted into real line breaks.
  • Fixed broken printf(...) statements in:
  • gui.cpp
  • main.cpp
  • runtime_net.cpp
  • Fixed invalid '\0' generation where real null characters were inserted into source code.
  • Fixed launcher metadata display being inserted into the wrong function.
  • Fixed author/version metadata rendering placement.
  • Fixed manifest behavior so metadata can target a .pe file through the entry field.

ReSharp3DS API Update

Added

  • Added native runtime binding for returning to the launcher:
  • RuntimeReturnToLauncher
  • Added native debug log binding:
  • DebugLogFile
  • Added native graphics target binding:
  • GraphicsSetTarget
  • Added native transparent sprite binding:
  • GraphicsDrawSpriteTransparent
  • Added support for native top/bottom screen drawing target selection.
  • Added native transparent sprite rendering.
  • Added native debug file logging path support.
  • Added native system info improvements:
  • battery level
  • free memory
  • New 3DS detection
  • Added improved input native behavior using cached frame input data.

Changed

  • Native input calls now read from a cached input snapshot instead of scanning input repeatedly.
  • Native graphics code can now target different screens.
  • Native debug logging is prepared to write logs into the ReSharp3DS logs folder.
  • Native runtime behavior is prepared for cleaner launcher return handling.

Fixed

  • Fixed pressed-once input stability by preparing frame-based input state.
  • Fixed broken native C++ string literals generated during integration.
  • Fixed crash/debug helper code generation issues.

ReSharp3DS SDK Update

Added

  • Added C# helper enum:
  • Button
  • Added C# screen target enum:
  • ScreenTarget
  • Added C# helper structs:
  • Vector2
  • Rect
  • Added C# utility class:
  • Timer
  • Added C# app base class:
  • GameApp
  • Added input helpers:
  • Input.IsHeld(Button button)
  • Input.IsPressed(Button button)
  • Input.CirclePad()
  • Added touch helper:
  • Touch.Position()
  • Added runtime helper:
  • Runtime.ReturnToLauncher()
  • Added debug helpers:
  • Debug.Log(...)
  • Debug.Warn(...)
  • Debug.Error(...)
  • Debug.LogInt(...)
  • Added graphics helpers:
  • Graphics.SetTarget(ScreenTarget.Top)
  • Graphics.SetTarget(ScreenTarget.Bottom)
  • Graphics.DrawSpriteTransparent(...)
  • Added save helpers:
  • Save.Exists(...)
  • Save.Delete(...)
  • Save.SetBool(...)
  • Save.GetBool(...)

Changed

  • Improved SDK usability for C# app developers.
  • Made input code cleaner by allowing button enums instead of many direct method calls.
  • Made touch handling cleaner by exposing a Vector2 position helper.
  • Made save data easier to use with boolean helpers.
  • Made graphics code more flexible with screen target support.

Fixed

  • Fixed UI.DrawProgressBar(...) so it avoids invalid/negative fill sizes.
  • Fixed duplicate SDK compile issue explanation:
  • apps must not compile two copies of ReSharp3DS.cs.

Example manifest

{
  "name": "App de test",
  "author": "Saysaa",
  "version": "0.1.0",
  "entry": "app.pe",
  "description": "Application de test pour ReSharp3DS"
}

Expected SD structure:

sdmc:/ReSharp3DS/apps/TestApp/
  manifest.json
  app.pe

Notes

  • This is an integration update.
  • Some features are implemented but still need full real hardware validation.
  • Crash screen and crash log functions exist, but should still be fully wired into every runtime failure path.
  • Some non-blocking snprintf path-length warnings may remain.

v2.1.4 · Jun 21, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/6e9f6714-afb0-401b-8698-67e06dfa81bb" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS-QR_CODE" src="https://github.com/user-attachments/assets/47733927-7660-4f38-b35d-feed612e370c" />

ReSharp3DS Runtime Update

  • Remove update system ( Only for 3DS )
  • Adding touch functionality to the graphical user interfaced
  • Bugs fixes

v2.1.3 · Jun 12, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/0679d3d4-de8a-40ea-a5ec-483944f435e7" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS-QR_CODE" src="https://github.com/user-attachments/assets/8ef4075a-8cf9-4433-9436-7ffb01383f37" />

ReSharp3DS SDK Update

  • Input.IsAPressedOnce / IsBPressedOnce / etc.
  • Graphics.DrawLine
  • Graphics.DrawCircle
  • Graphics.FillCircle
  • Graphics.DrawSprite
  • Graphics.DrawSprite(path, x, y, width, height)
  • Math3DS.Clamp / Abs / Lerp
  • Color.RGB + couleurs constantes
  • Debug.Log / LogInt
  • File.GetSize
  • Directory.ListFiles
  • Directory.ListFolders
  • Runtime.Exit
  • Runtime.Restart
  • Runtime.GetVersion
  • Runtime.GetFps
  • App.Exists
  • App.ReadText
  • App.WriteText
  • Audio.PauseMusic
  • Audio.ResumeMusic
  • Audio.SetMusicLoop
  • Audio.PlaySfx
  • UI.MessageBox
  • UI.DrawButton
  • UI.DrawProgressBar

Exemple

namespace ReSharp3DS
{
    public class Program
    {
        static bool initialized = false;
        static int x = 150;
        static int y = 110;
        static int lastSaveTime = 0;

        public static void Main()
        {
            if (!initialized)
            {
                initialized = true;

                Console.Clear();
                Debug.Log("ReSharp3DS full API demo");
                Debug.Log(Runtime.GetVersion());

                Audio.Init();
                Audio.SetSfxVolume(80);
                Audio.SetMusicVolume(60);

                x = Save.GetInt("last_x", x);
                y = Save.GetInt("last_y", y);
            }

            x += Input.CirclePadX() / 25;
            y -= Input.CirclePadY() / 25;

            x = Math3DS.Clamp(x, 0, Screen.BottomWidth - 12);
            y = Math3DS.Clamp(y, 0, Screen.BottomHeight - 12);

            if (Touch.IsPressed())
            {
                x = Touch.X();
                y = Touch.Y();
            }

            if (Input.IsAPressedOnce())
            {
                Audio.Beep(Notes.C5, 100);
            }

            if (Input.IsBPressedOnce())
            {
                Save.SetInt("last_x", x);
                Save.SetInt("last_y", y);
                lastSaveTime = Time.Milliseconds();
            }

            if (Input.IsStartPressedOnce())
            {
                Runtime.Exit();
            }

            Graphics.Clear(Color.Black);
            Graphics.DrawText(8, 8, App.GetName(), Color.White);
            Graphics.DrawText(8, 24, "FPS:", Color.Gray);
            Graphics.DrawText(56, 24, Runtime.GetFps().ToString(), Color.Green);

            Graphics.DrawLine(0, 220, 319, 220, Color.Blue);
            Graphics.DrawCircle(x + 6, y + 6, 12, Color.Yellow);
            Graphics.FillRect(x, y, 12, 12, Color.Green);

            if (Time.Milliseconds() - lastSaveTime < 1500)
            {
                UI.DrawProgressBar(8, 200, 120, 10, 100, 100);
                Graphics.DrawText(8, 184, "Saved", Color.White);
            }

            Graphics.Present();
            Runtime.Yield();
        }
    }
}

v2.0.3 · Jun 10, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/b5e25751-371e-4f74-ac36-6c06b992f933" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS-QR_CODE" src="https://github.com/user-attachments/assets/b14618e9-4f83-4e85-b2db-e4b7967a2917" />

ReSharp3DS Runtime Update

ReSharp3DS SDK Update

  • Time API
  • Random API
  • Touch API
  • CirclePad API
  • Screen constants
  • App API
  • SystemInfo API
  • Save API
  • Graphics.DrawBitmap BMP
  • Audio.SetSfxVolume
  • Audio.SetMusicVolume
  • Audio.IsPlaying
  • Audio.IsMusicPlaying

v1.9.3 · Jun 7, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/b2cb4130-4031-4ebe-82b8-81a6ff7dcc66" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS-QR_CODE" src="https://github.com/user-attachments/assets/28c96a6c-4b90-4984-ad7b-cbd0b8d3b2d8" />

ReSharp3DS Runtime Update

  • Add updater system It's ready but not yet deployed because I still need to buy hosting servers :(
  • Auto restore/download mscorlib.pe, latest.txt It's ready but not yet deployed because I still need to buy hosting servers :(
  • Move important files to a bin subfolder

Place bin folder here : :sdmc/ReSharp3DS/bin

v1.8.3 · Jun 7, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/87a731d0-2c9b-4368-878b-5c7dc96833eb" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS-QR_CODE" src="https://github.com/user-attachments/assets/45062bb8-6b3f-439f-88e5-927faa300956" />

ReSharp3DS Runtime Update

  • Update the directory to display subfolders
  • Improve UI
  • Added a 3D banner to the home menu

ReSharp3DS SDK Update

  • Added file management (creating folders and files, writing, reading)

v1.7.3 · Jun 6, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/2576cb17-503a-45a3-bf79-e4c602d59722" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS-QR_CODE" src="https://github.com/user-attachments/assets/cda0017e-5547-4b19-b9c9-ec969598434f" />

ReSharp3DS Runtime Update

  • Add app file explorer
  • New Makefile
  • Dynamic Native Method Mapping

ReSharp3DS SDK Update

  • Add Audio Support

Available methods:

Audio.Init();
Audio.Beep(int frequency, int durationMs);
Audio.PlayWav(string path);
Audio.SetVolume(int volume);
Audio.Loop(string path);
Audio.StopMusic();
Audio.Stop();
Beep / frequency audio
Audio.Beep(440, 200);
Audio.Beep(880, 150);
Custom WAV playback
Audio.PlayWav("audio.wav");
Audio.PlayWav("sfx/jump.wav");

Paths can be relative to the launched .pe file or absolute:

`Audio.PlayWav("sdmc:/MyGame/sounds/select.wav");
`

Recommended WAV format:

PCM 16-bit
Mono or stereo
44100 Hz or 22050 Hz
Music looping
Audio.SetVolume(80);
Audio.Loop("music.wav");
Audio.StopMusic();

Exemple

namespace ReSharp3DS
{
    public class Program
    {
        static bool initialized = false;
        static bool oldA = false;
        static bool oldX = false;
        static bool oldY = false;

        public static void Main()
        {
            if (!initialized)
            {
                initialized = true;

                Console.Clear();
                Console.WriteLine("Audio test");

                Audio.Init();
                Audio.SetVolume(80);
                Audio.Loop("music.wav");
            }

            bool a = Input.IsAPressed();
            bool x = Input.IsXPressed();
            bool y = Input.IsYPressed();

            if (a && !oldA)
            {
                Audio.PlayWav("audio.wav");
            }

            if (x && !oldX)
            {
                Audio.SetVolume(40);
            }

            if (y && !oldY)
            {
                Audio.StopMusic();
            }

            oldA = a;
            oldX = x;
            oldY = y;

            Runtime.Yield();
        }
    }
}

v1.6.3 · Jun 5, 2026

<img width="600" height="600" alt="Capture d&#39;écran 2026-06-05 163832" src="https://github.com/user-attachments/assets/db1ea165-fe89-47e7-a7a6-ba6f95a6c2eb" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS-QR_CODE" src="https://github.com/user-attachments/assets/ae6bfc36-7a77-4eaa-848f-dd1afcbf5bfe" />

ReSharp3DS Runtime Update

  • Added basic bitmap text rendering for graphics mode.
  • Added support for drawing on the lower screen from C#.
  • Added an automatic console mode when the application does not use the Graphics API.
  • Added gui_can_launch() and gui_shutdown() to preserve the launcher's GUI while allowing the runtime to take over.

ReSharp3DS API Update

  • Ability to create graphical applications!
  • Added Graphics.Clear(int color).
  • Added Graphics.DrawPixel(int x, int y, int color).
  • Added Graphics.FillRect(int x, int y, int width, int height, int color).
  • Added Graphics.DrawRect(int x, int y, int width, int height, int color).
  • Added Graphics.DrawText(int x, int y, string text, int color).
  • Added Graphics.Present().
  • Added basic Color constants to the SDK.

Exemple

namespace ReSharp3DS
{
    public class Program
    {
        static int x = 0;

        public static void Main()
        {
            Graphics.Clear(Color.Black);

            Graphics.DrawText(20, 20, "HELLO GRAPHICS", Color.White);
            Graphics.FillRect(x, 80, 40, 30, Color.Red);

            Graphics.Present();

            x++;

            if (x > 280)
            {
                x = 0;
            }

            Runtime.Yield();
        }
    }
}

v1.5.3 · Jun 5, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/43ffdbc3-789c-451c-a992-18b4fd937105" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS-QR_CODE" src="https://github.com/user-attachments/assets/18f0b938-001c-49f3-a157-07cf714e56ba" />

ReSharp3DS Runtime Update

  • Change the banner, sound, and icon for the .cia file
  • Converting gui.c to gui.cpp
  • Added a graphical user interface to gui.cpp (finally!)
  • Change in version number: Before: v1.3.2, After: v1.3.2-beta.X (This is an example)
  • Bugs Fixes
  • Available on Universal-Updater!

v1.4.3 · Jun 4, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/4d5545f9-a557-49f3-8ab7-bf85448ba16d" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS v1 4 3-QR_CODE" src="https://github.com/user-attachments/assets/f80ff884-77e7-4c28-8a4a-0da197382058" />

ReSharp3DS Runtime Update

  • Improve GUI
  • Samples app.pe supports L and R buttons
  • Added comments to the input sections in main.cpp

v1.4.2 · Jun 4, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/48e7f393-7f57-4dc0-9b8d-81f2d309008b" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS v1 4 2-QR_CODE" src="https://github.com/user-attachments/assets/fd97dc8a-c100-432c-8a4c-dbe2e8c9dd09" />

ReSharp3DS API Update

Add Inputs !

  • Input.IsAPressed()
  • Input.IsBPressed()
  • Input.IsXPressed()
  • Input.IsYPressed()
  • Input.IsLPressed()
  • Input.IsRPressed()
  • Input.IsUpPressed()
  • Input.IsDownPressed()
  • Input.IsLeftPressed()
  • Input.IsRightPressed()

v1.3.2 · Jun 3, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/faca7027-d976-4c61-8c4f-9cb1ef35ef4c" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS v1 3 2-QR_CODE" src="https://github.com/user-attachments/assets/b2b3feba-df1b-43df-8b0e-202b6072a313" />

ReSharp3DS runtime update

  • Added ReSharp Interface
  • Bug fixes

v1.2.2 · Jun 3, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/836ef05c-ec42-4cf6-a2a8-41e7ae2208e7" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS v1 2 2-QR_CODE" src="https://github.com/user-attachments/assets/95460b1b-5268-4bf4-af98-2a8faf315d25" />

ReSharp3DS runtime update

  • Change the path for .pe files from :sdmc/ to :sdmc/ReSharp3DS/

v1.2.1 · Jun 3, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/512e917a-b518-4219-b50b-18b91999a38c" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS v1 2 1-QR_CODE" src="https://github.com/user-attachments/assets/99803fc6-0524-465f-9bc8-141e5239e0ba" />

ReSharp3DS runtime update

  • Fixed C# static state persistence across repeated runtime execution slices.
  • Fixed hardware flickering caused by clearing and redrawing the console every tick.
  • Fixed input handling for START and SELECT.
  • Fixed integer printing from C#.
  • Fixed unstable input behavior by polling HID directly in native input calls.
  • Fixed several runtime/rendering issues observed on real Nintendo 3DS hardware.
  • Removed unnecessary rendering operations from Runtime.Yield().

On the current hardware build, Program.Main() is used as a repeated runtime tick.

This means that the C++ host repeatedly calls the nanoCLR execution engine with a limited execution slice. C# static fields are preserved between calls, so they should be used to store the program state.

Recommended structure:

namespace ReSharp3DS
{
    public class Program
    {
        static bool initialized = false;
        static int frame = 0;
        static bool oldStart = false;
        static bool oldSelect = false;

        public static void Main()
        {
            if (!initialized)
            {
                initialized = true;

                Console.Clear();
                Console.WriteLine("ReSharp3DS running");
                Console.WriteLine("Press START or SELECT.");
            }

            bool start = Input.IsStartPressed();
            bool select = Input.IsSelectPressed();

            if (start && !oldStart)
            {
                Console.WriteLine("START pressed");
            }

            if (select && !oldSelect)
            {
                Console.WriteLine("SELECT pressed");
            }

            oldStart = start;
            oldSelect = select;

            frame++;

            Runtime.Yield();
        }
    }
}

v1.1.0 · Jun 2, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/77110fdf-3b83-4786-a057-dd332156da1e" />

Fast CIA Installation

<img width="250" height="250" alt="ReSharp3DS v1 1 0-QR_CODE" src="https://github.com/user-attachments/assets/6e5b44ee-566c-4f9d-afd0-c39a08355882" />

What's New ?

ReSharp3DS API Update

  • Added Input.IsSelectPressed()
  • Added native SELECT button support
  • Changed host exit combo from START to START + SELECT
  • Fixed native API method registration
  • Fixed input binding issues
  • Add ReSharp3DS.cia

v1.0.0 · Jun 2, 2026

<img width="600" height="600" alt="image" src="https://github.com/user-attachments/assets/c197f28a-7083-4577-833f-7cfe3b6f6101" />

What's New ?

ReSharp3DS API deployment

  • Console.Clear()
  • Console.Write(string text)
  • Console.WriteLine(string text)
  • Input.IsStartPressed()
  • Runtime.Yield()
  • Native C++ bindings for basic console output and input handling
  • Comments in several parts of the code

Native bindings

Native3DS.Clear          -> consoleClear()
Native3DS.Write          -> printf(...)
Native3DS.WriteLine      -> printf(... + newline)
Native3DS.IsStartPressed -> hidKeysHeld() & KEY_START
Native3DS.Yield          -> gfxFlushBuffers() + gspWaitForVBlank()