Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RustRomM

A cross-platform desktop client for RomM. Browse your library, download games, and launch them in the emulator you already use — on Linux, macOS and Windows.

Unofficial. Not affiliated with or endorsed by the RomM project.

RustRomM browsing a RomM library


Why

RomM's built-in browser player (EmulatorJS) works, but gamepad support in the browser is janky — input lag, dropped buttons, remapping that doesn't stick. The Android client, Argosy, is seamless by comparison because it plays natively.

RustRomM takes the same approach on the desktop: it is a launcher, not an emulator. It finds your games, downloads them, and hands the file to RetroArch, PPSSPP, Dolphin or whatever you prefer. Controller support is then whatever your emulator already does — which is to say, properly.

What it does

  • Connect to any RomM server with your normal username and password
  • Browse the whole library or filter by platform, with cover art
  • Search across your collection
  • Download games, with progress, cancellation, and no half-written files left behind
  • Launch straight into your emulator, configurable per platform
  • Remembers your server; optionally remembers your password

What it doesn't do (yet)

  • Emulate anything itself — by design, see above
  • Save/state sync back to RomM
  • Gamepad navigation of RustRomM's own interface (you still use mouse and keyboard to browse; the game is played on the pad)
  • Collections, achievements, multiplayer

Install

Download a build for your platform from Releases. Both x86_64 and arm64 are built for all three operating systems:

x86_64 arm64
Linux rustromm-linux-x86_64.tar.gz rustromm-linux-arm64.tar.gz
macOS rustromm-macos-x86_64.tar.gz (Intel) rustromm-macos-arm64.tar.gz (M-series)
Windows rustromm-windows-x86_64.zip rustromm-windows-arm64.zip

Every build except Intel macOS is compiled and runs the test suite on a runner of its own architecture — including both arm64 targets. The Intel macOS binary is cross-compiled from an Apple Silicon runner, since GitHub is retiring its Intel macOS image, so it is the one build not covered by a test run.

macOS and Windows builds are unsigned, so the OS will warn on first launch — on macOS, right-click the app and choose Open; on Windows, More info → Run anyway.

From source

Needs Rust 1.85 or newer.

git clone https://github.com/cloudmaking/rustromm.git
cd rustromm
cargo run --release

On Linux you may also need the usual GUI development libraries:

sudo apt install libxkbcommon-dev libwayland-dev libx11-dev \
                 libxcursor-dev libxrandr-dev libxi-dev

Using it

  1. Launch it, enter your RomM server address (192.168.1.10:8087 is fine — http:// is assumed if you leave the scheme off), your username and password.
  2. Pick a platform on the left, or search.
  3. Download a game, then Play.

Pointing it at an emulator

Settings → Emulators. Set a default and, optionally, one per platform.

retroarch -L /usr/lib/libretro/snes9x_libretro.so
"C:\Program Files\RetroArch\retroarch.exe" -L cores\genesis_plus_gx.dll
/Applications/PPSSPPSDL.app/Contents/MacOS/PPSSPPSDL

Use {rom} where the file path should go. If you leave it out, the path is appended at the end — which is what almost every emulator expects, so usually you can just name the program.

With nothing configured, Play hands the file to your operating system's default handler.

Where things are stored

Settings ~/.config/rustromm/config.json (Linux), ~/Library/Application Support/uk.cloudmaking.rustromm/ (macOS), %APPDATA%\cloudmaking\rustromm\ (Windows)
Downloads Your Downloads folder, under RustRomM/<platform>/ — changeable in Settings

Set RUSTROMM_CONFIG_DIR to override the settings location — handy for a portable install.

On passwords: "Remember password" stores it in that config file as plain text, with owner-only permissions on Linux and macOS. It is not encrypted. Leave the box unticked if that bothers you and type it each launch.

Development

cargo test          # 40 tests, no server required
cargo clippy --all-targets
cargo fmt

The suite has four layers:

Layer What it covers
Unit tests (13) URL normalising, emulator command parsing, config fallbacks, size formatting
API tests (20) The full HTTP stack against a mock RomM server — auth headers, query strings, streaming downloads, cancellation, error mapping
UI tests (7) The real widget tree, headless, via egui_kittest — connect flow, error states, library rendering
Live tests (8) Opt-in, against a real RomM instance

Live tests are skipped unless you point them at a server:

RUSTROMM_LIVE_URL=http://192.168.1.10:8087 \
RUSTROMM_LIVE_USER=you \
RUSTROMM_LIVE_PASS=secret \
cargo test --test live_tests -- --nocapture

These are the ones that catch RomM changing its API shape, which the mocks cannot see by construction. Verified against RomM 5.1.0.

Credits

  • RomM — the server this talks to (AGPL-3.0)
  • Argosy — the Android client whose approach and interface this follows (GPL-3.0)
  • Built with egui

Licence

GPL-3.0-or-later. See LICENSE.

RustRomM follows the design of Argosy, which is GPL-3.0, so it is GPL-3.0 too — anything derived from this has to stay open as well.

Support

If this is useful to you: Buy me a coffee · PayPal

About

Cross-platform desktop client for RomM — browse your library, download games, launch them in your emulator. Linux, macOS, Windows.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages