
Nintendo Switch homebrew · Ren'Py 8.5.3 · CPython 3.12
rpynx
Play Ren'Py games on Switch
A loader for the Nintendo Switch that runs legally obtained, DRM-free Ren'Py games from the SD card, with a desktop importer and a remappable controller system.
Unofficial homebrew. Not affiliated with Ren'Py or Nintendo.
Project status
6 of 9 stages done. Now: M7 · second hardware round.
- M1
- M2
- M3
- M4
- M5
- M6
- M7
- TX
- M8
- M1 Toolchain Done Loader and runtime chain-load each other on a Switch (run 1)
- M2 Input system Done Menus, D-pad, A and the cursor work on a Switch; touch, docked play and reconnect are unverified
- M3 Python runtime Done Static CPython 3.12.8; self-test passes 66/66 required imports on a Switch (runs 4, 20)
- M4 Ren'Py engine Done Ren'Py 8.5.3 runs The Question (run 5) and a recompiled Ren'Py 7 game (run 13)
- M5 Importer Done Its export of The Question launched on a Switch (run 9)
- M6 Gameplay reliability Done Relaunch, sleep, error dialog, saves, remaps and the emergency combo verified (runs 22–27)
- M7 Game library (LVGL) In progress First hardware test done 2026-10-22; second round pending; covers and Change picture host-tested only
- TX Transfer Planned FTP server in the loader, then USB
- M8 Release validation Planned Not started
Verified on a Switch
- Loader and runtime chain-load both waysrun 1
- Python self-test, 66/66 required importsrun 4, 20
- Ren'Py 8.5.3 renders with GLES 3.2 and quits cleanlyrun 5
- Importer export launches from the libraryrun 9
- Three games in a row in one processrun 12
- Ren'Py 7 game recompiled on the consolerun 13
- Music and sound, also from an .rparun 21
- Quit, then start another game without a crashrun 24
- Error dialog, link notice, overlapping buttonsrun 25
- Save and load back to the same line; remap used in a gamerun 26
- Emergency combo saved for the loader; applet mode refusedrun 27
Not verified on hardware yet
- Covers, backgrounds and Change pictureHost-tested
- The LVGL loader's second round of changesHost-tested
- No cursor after touch; game menus open on their side menuDesktop only
- Touch, docked play, controller reconnectHW unverified
- Smooth video playbackHW unverified
- Importer on Windows (tested with Windows faked on macOS)Desktop only
Full record: statuses and test runs.
What rpynx is
rpynx is three programs that work together:
- The loader (
renpy-loader.nro) is the game library on the Switch. It lists your games with their covers, checks that each one can start, and holds the controller settings. - The runtime (
renpy-runtime.nro) is the engine: a static CPython 3.12.8 with the official Ren’Py 8.5.3 built in. The loader hands a game to it, and it returns to the loader when the game quits. - The importer runs on macOS or Windows. It checks a game, writes a
manifest.jsonthat tells the loader what the game needs, and copies it to the SD card or uploads it to the Switch over Wi-Fi.
rpynx contains no game assets and no Nintendo SDK material, and it does not circumvent DRM. Use only games you own in DRM-free form.
important
rpynx is a work in progress, and nothing has been released yet. Every claim about the console in these docs names the hardware run that checked it. Anything without a run number has been tested on a desktop or not at all.
Documentation
- Getting started What you need, where the files go on the SD card, and how to start your first game with full memory.
- Importer The desktop app and command line that check a game, write its manifest and copy it to the SD card or the Switch.
- Loader The game library on the Switch: layouts, game details, the + menu, controller settings and diagnostics.
- Playing Controls in a game, the virtual cursor, the Switch keyboard, saves, HOME and sleep, and what happens with links.
- Compatibility Which Ren'Py versions run, what the statuses mean, which games were tested, and the known limits.
- Troubleshooting Where the logs are, what the error dialog means, how to read crash reports, and fixes for common problems.
- Reference The file formats and options rpynx reads and writes, field by field.
- Design The loader's own design tokens and components, and how controller navigation works. For contributors to the loader UI.
- Building from source The pinned container toolchain, the build targets, the test suites, and the licences of what you build.