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.jsonsupport in the launcher. - Added support for manifest-based
.pedisplay names.
- Example:
app.pecan now appear asTestApp. - Added manifest metadata support:
nameauthorversionentrydescription- 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.cppandruntime_net.h. - Added runtime network/file helper functions:
FileExistsDirectoryExistsEnsureDirectoryDownloadFile- Added basic crash log infrastructure.
- Added basic crash screen infrastructure.
- Added future log paths:
sdmc:/ReSharp3DS/logs/crash.txtsdmc:/ReSharp3DS/logs/clr-panic.txtsdmc:/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.jsonto rename the selected.peentry instead of only renaming the app folder. - The launcher now reads the manifest
entryfield to know which.pefile 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/CheckForUpdatestyle update flow. - Removed runtime auto-update behavior from this part of the project.
Fixed
- Fixed duplicated
copy_json_string_value(...)definition ingui.cpp. - Fixed generated C++ string literals where
\nhad been converted into real line breaks. - Fixed broken
printf(...)statements in:
gui.cppmain.cppruntime_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
.pefile through theentryfield.
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:
Vector2Rect- 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
Vector2position 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
snprintfpath-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
- Add french translation
- Add real HTTP update system -> host.saysaa.fr/
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.txtIt's ready but not yet deployed because I still need to buy hosting servers :( - Move important files to a
binsubfolder
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'é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()andgui_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
Colorconstants 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.ctogui.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.pesupports 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
STARTtoSTART + 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()
