Gopher64 fork with netplay session save/resume and desync auto-resync
This repository has been archived on 2026-08-27. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Claude 98d9c6f0d0
Some checks failed
Rust / build-linux (linux-x86_64, X64, ubuntu-24.04, x86_64-unknown-linux-gnu) (pull_request) Failing after 8s
Rust / build-android (29.0.14206865, ubuntu-24.04, 33) (pull_request) Failing after 4s
Rust-lint / lint-linux (pull_request) Failing after 18s
Rust / build-linux (linux-aarch64, ARM64, ubuntu-24.04-arm, aarch64-unknown-linux-gnu) (pull_request) Has been cancelled
Rust / build-windows (windows-aarch64, woa64, windows-11-arm, aarch64-pc-windows-msvc) (pull_request) Has been cancelled
Rust / build-windows (windows-x86_64, win64, windows-2025, x86_64-pc-windows-msvc) (pull_request) Has been cancelled
Rust / build-macos (macos-aarch64, ARM64, aarch64-apple-darwin) (pull_request) Has been cancelled
Rust / Collect release artifacts (pull_request) Has been cancelled
Fix review findings: expose netplay callbacks on AppWindow, use rfd::AsyncFileDialog, set is_host on lobby update
Finding 1: the Rust side calls on_netplay_resume_session,
on_netplay_save_session and set_netplay_is_host on AppWindow, but the
callbacks/property were only declared on the NetplayCreate/NetplayWait
sub-components. appwindow.slint now declares callback
netplay_resume_session(string), callback netplay_save_session and the
in-out property netplay_is_host <=> NetplayWaitData.is_host, and
forwards them at the NetplayCreate/NetplayWait instantiation sites,
matching the existing netplay callback pattern.

Finding 2: rfd::AsyncFilePicker does not exist in rfd 0.17; the crate
exports AsyncFileDialog (already used by this repo in src/ui/gui.rs).
Switch the resume file picker to rfd::AsyncFileDialog and use
FileHandle::path() for the display path.

Finding 3: set is_host from the ResponseSession lobby update instead of
at wait-window open, comparing the local player name against players[0]
(the session creator, always registered first). Re-evaluates on every
lobby update.
2026-08-25 22:19:56 -05:00
.cargo gopher64-netplay#16: runnable build gate on the review box 2026-08-25 16:21:01 -05:00
.github ci: pin actions/checkout to v4 (node20) — v7 needs node24, unsupported by host runner 2026-08-25 22:18:33 +02:00
android-project re-arrange input profiles (#1150) 2026-07-05 10:43:23 +00:00
data add instructions for input profile (#1179) 2026-08-03 15:43:27 +00:00
docs fix(#16): wire provisioned cmake lib root + link/run tests in the gate (review bounce) 2026-08-25 16:21:01 -05:00
parallel-rdp add gpu hints on windows (#1158) 2026-07-13 07:17:35 +00:00
retroachievements update rcheevos (#1172) 2026-07-23 22:11:01 +00:00
scripts fix(#16): wire provisioned cmake lib root + link/run tests in the gate (review bounce) 2026-08-25 16:21:01 -05:00
src Fix review findings: expose netplay callbacks on AppWindow, use rfd::AsyncFileDialog, set is_host on lobby update 2026-08-25 22:19:56 -05:00
.gitignore ignore settings.json 2025-05-16 13:32:54 +02:00
.gitmodules RetroAchievements (#710) 2026-04-07 08:59:03 +02:00
build.rs use idle (#1039) 2026-06-08 13:23:22 +00:00
Cargo.lock update quick-xml (#1195) 2026-08-24 13:10:50 +00:00
Cargo.toml update quick-xml (#1195) 2026-08-24 13:10:50 +00:00
LICENSE Initial Commit 2023-10-04 14:33:17 -06:00
README.md Update contribution guidelines (#1143) 2026-07-01 07:58:17 +00:00
rust-toolchain.toml update rust (#1190) 2026-08-20 18:39:19 +00:00

gopher64

Gopher64 is a cross-platform N64 emulator. Some notable features:

  • Netplay
  • Homebrew support
  • Upscaling
  • CRT shader
  • Emulate CPU overclocking
  • Cheats
  • Savestates
  • RetroAchievements

download

Windows:

MacOS:

Linux:

  • Standalone executable: gopher64-linux-x86_64
  • Flatpak: flatpak install flathub io.github.gopher64.gopher64

Android:

wiki

https://github.com/gopher64/gopher64/wiki

discord

Discord invite link

controls

Keys are mapped according to these defaults. Xbox-style controllers also have a default mapping applied.

netplay

Gopher64 supports P2P netplay (online play with others).

Please read the guide before trying out netplay.

portable mode

If you would like to keep all the game data in the same folder as the executable, you just need to create a file called "portable.txt" in the same directory as the executable.

flatpak

If you want to run the flatpak from the command line, you need to add the --filesystem=host:ro option, for example:

flatpak run --filesystem=host:ro io.github.gopher64.gopher64 /path/to/rom.z64

building and usage

  1. Linux only: install the SDL3 dependencies
  2. Install rust
  3. git clone --recursive https://github.com/gopher64/gopher64.git
  4. cd gopher64
  5. cargo build --release
  6. ./target/release/gopher64 /path/to/rom.z64

contributing

PRs that are vibe coded and/or co-authored by AI agents (Plan/Agent mode) are not permitted. If you are going to submit a PR, it should be scoped to a single feature/improvement.

Please contact me via a GitHub issue or Discord (loganmc10) before doing substantial work on a PR.

license

Gopher64 is licensed under the GPLv3 license. Many portions of gopher64 have been adapted from mupen64plus and/or ares. The license for mupen64plus can be found here. The license for ares can be found here.

privacy and code signing policy

Free code signing for the Windows release is provided by SignPath.io, certificate by SignPath Foundation.

During online netplay sessions, the server logs your IP address and basic session information (game title and session name) for operational purposes. No additional personal data is collected or stored.

If you enable the RetroAchievements feature, some data is sent to their systems. Please see their terms here.