Open-source Nintendo Switch 2 emulator · GPL-3.0-or-later

Switch 2 emulation tuned for integrated GPUs

Guarana is a fork of Lichii for laptops and handhelds without a gaming graphics card. Intel Arc iGPUs come first, AMD Radeon iGPU handhelds next. The work goes into frame pacing, frame generation and GPU fixes, and we publish what we measure with the caveats.

Windows 11 x64 is the tested platform. Official downloads come only from GitHub Releases. No keys, firmware or games included.

Measured on real hardware

One laptop, one scene, the fix off and then on. That is the whole claim.

Game fps with the global-memory routing fix

22.83

14.75 without it, same scene

Foliage draw, GPU time

5.8ms

15.7 ms without the fix

Game
The Legend of Zelda: Ocarina of Time, Hyrule Field
Laptop
Intel Core Ultra 9 285H with Arc 140T
Driver
Intel 32.0.101.9175
Change
EDEN_NX2_GM=11, frame generation off

What the fix does: shader loads from global memory used to search every bound buffer at run time. With EDEN_NX2_GM=11, buffer base addresses are computed once and each load searches only the buffers its address can come from. Game fps counts only frames the game renders; generated frames never count.

All results, the play configuration and third-party reports

Bring your own keys, firmware and games

Guarana contains no encryption keys, no firmware and no games. Dump them from a Nintendo Switch 2 and games you own. We don't help anyone get them elsewhere, and issues or pull requests that ask for them or share them are closed.

Legal details

How frame pacing and frame generation work

Frame pacing

Pacing is how evenly frames reach the screen. Thirty frames spaced 33.3 ms apart feel smoother than forty that arrive in uneven bursts. With frame generation on, each generated frame keeps the screen for an equal share of the time between real frames. Not finished: a presenter locked to the display's vblank, so frames change every 16.67 ms at 60 Hz, is in progress to remove the micro-stutter that remains.

Frame generation, without added latency

After the game renders a frame, Guarana predicts the next ones by moving its pixels along the game's own motion vectors. Because this extrapolates forward instead of waiting for a future frame, it adds no latency. The HUD is kept apart from the 3D image, so text and menus don't smear. Motion data is wired up for Ocarina of Time so far.

Measured GPU fixes

A change ships when it shows a measured gain on a verified scene. The global-memory routing fix took the Hyrule Field foliage draw from 15.7 to 5.8 ms on Arc 140T.

Optimized builds

Release builds are compiled with ThinLTO and profile-guided optimization (PGO).

Uneven: frames arrive in bursts

Paced: every frame keeps the screen for the same time

Each mark is a frame reaching the screen. Solid dots: frames the game rendered. Rings: frames predicted by frame generation. Even spacing is the goal; the vblank-locked presenter that finishes it is in progress.

Known issues, in the open

  • Pacing micro-stutter: the fix (a vblank-locked 16.67 ms presenter) is in progress.
  • First visit to an area hitches while shaders compile; later visits load them from the cache.
  • Intel driver cache race: a fix is in progress.

Device status

Tested means we measured it. Community reports means someone else did, on their build. Untested means nobody has reported yet, so your report counts.

  • TestedMeasured by the maintainers on this build.
  • Community reportsReported by others, on other builds. Not verified by us.
  • UntestedNobody has reported it yet. Send a report.

Integrated GPUs

Core Ultra 200H laptops (Arrow Lake-H)

Intel Arc 140T

14.75 → 22.83 game fps in Hyrule Field (GM=11, frame generation off).

Tested

Core Ultra 200V laptops and handhelds (Lunar Lake)

Intel Arc 140V

Third-party report: 22–24 fps in gameplay, on another build.

Community reports

Ryzen 7040/8040 laptops; Z1 Extreme and Z2 handhelds

AMD Radeon 780M

RDNA 3, 12 CUs (also in Z1 Extreme and Z2). No reports yet.

Untested

Ryzen AI 300 laptops; Z2 Extreme handhelds

AMD Radeon 890M

Third-party report: about 30 fps in Ocarina of Time on a ROG Xbox Ally X (Lichii #1433).

Community reports

Ryzen AI Max+ 395 laptops and mini PCs (Strix Halo)

AMD Radeon 8060S

RDNA 3.5, 40 CUs, 256-bit memory. No reports yet.

Untested

Handhelds

Core Ultra 7 258V · Arc 140V

MSI Claw 8 AI+

Arc 140V, 32 GB. No reports yet.

Untested

Core Ultra 7 155H or Ultra 5 135H · Meteor Lake Arc

MSI Claw A1M

Meteor Lake Arc, 16 GB. No reports yet.

Untested

Ryzen Z1 Extreme · RDNA 3, 12 CUs

ASUS ROG Ally X

Z1 Extreme (780M class), 24 GB. No reports yet.

Untested

Ryzen AI Z2 Extreme · RDNA 3.5, 16 CUs

ASUS ROG Xbox Ally X

Third-party report: about 30 fps in Ocarina of Time (Lichii #1433).

Community reports

Ryzen Z2 Extreme or Ryzen Z2 · 8.8-inch OLED

Lenovo Legion Go 2

Z2 Extreme or Z2, up to 32 GB. No reports yet.

Untested

Valve handheld, LCD and OLED (SteamOS)

Steam Deck

RDNA 2, 8 CUs, 4–15 W, SteamOS. No reports yet.

Untested

Set up in five steps

  1. Download the latest release

    Get it from the GitHub releases page, the only official download.

  2. Extract the whole archive

    Unpack everything into a folder you can write to.

  3. Add your own keys, firmware and games

    Start the emulator and point it at keys, firmware and games dumped from a Switch 2 and games you own. None are included.

  4. Turn on the measured settings

    Switches are off unless set. Add EDEN_NX2_GM=11 to nx2_switches.txt next to the emulator. For frame generation, turn on Enable Frame Generation in the graphics settings, set Target Frame Rate to 60 and add EDEN_NX2_EXTRAPOLATE=1 (Ocarina of Time only).

  5. Let shaders build, then report

    The first visit to each area hitches while shaders compile. Play a while, then send a device report with your game fps.

Help make it fast on your hardware

For people

Send a device report, run the benchmark harness on your machine, or pick an issue. Every pull request is built and tested for free in CI and gets a Windows test build linked on the pull request, so you don't need a fast PC to contribute code.

How to contribute

For AI agents

AGENTS.md has the rules. Issues labeled agent-ready are scoped for agents, and an opt-in debug MCP server lets an agent read status, frame times, screenshots and logs from a running game, and send controller input.

Agent quick start

Built on open source

Guarana ← Lichii ← Eglantine ← Eden ← yuzu. Their copyright notices stay in the code, and their contributors did most of the work this fork stands on. Fixes that aren't specific to integrated GPUs go upstream first.