| Crates.io | rgd |
| lib.rs | rgd |
| version | 1.2.2 |
| created_at | 2025-10-02 19:58:46.827193+00 |
| updated_at | 2025-12-01 09:46:50.881736+00 |
| description | Installed game detection utility for Linux |
| homepage | https://github.com/rolv-apneseth/rgd |
| repository | https://github.com/rolv-apneseth/rgd |
| max_upload_size | |
| id | 1864978 |
| size | 58,145 |
Installed game detection utility for Linux. Built to be simple and scriptable.
Can you tell I'm not a graphic designer?
This utility is a CLI front-end for lib_game_detector. It is
intended to be used in scripts, especially with picker programs (e.g. rofi, dmenu, fzf,
etc.) in order to launch games, or perform some other action with the game's details.
I find that searching for games from different sources (e.g. Steam, Heroic, Lutris) is slow, as is just visually searching through a UI. However, detecting games with this tool is fast (~3ms on my machineā¢), as is searching through those games using fuzzy search. This allows me to waste less time looking for what game I want to play, and more time actually playing.
This program in particular is made as a more basic alternative to another project of mine, rofi-games, making it more universally useful. It is very scriptable and can be used with any picker. Check out the extras directory for some examples.
Simply named for the short acronym that isn't used by anything else I'm familiar with: Rolv's Game Detector.
cargo install rgd --locked
Or, directly from source:
cargo install --git https://github.com/rolv-apneseth/rgd --locked
paru -S rgd
Download the tarball corresponding to your computer's architecture (probably x86_64) from the releases page
Unpack the tarball, e.g.:
tar -xf rgd-x86_64-unknown-linux-gnu.tar.gz
Place the rgd binary in your $PATH

rgd list
rgd list --fields="title"
rgd list --fields="title,path-icon" --source "steam"
rgd list --json | jq
fzfsh -c "$(rgd list | fzf -d $'\t' --with-nth 1 | cut -d$'\t' -f2)"
rgd get --fields="path-game-dir" "the finals" | xdg-open
Note: the matching is case-insensitive
$XDG_STATE_HOME/rgd/logsRUST_LOG env var, e.g. RUST_LOG="trace"Examples of basic setups to launch games with different picker programs. You can find more useful scripts in the extras directory - treat the below as a quickstart.
sh -c "$(rgd list --fields="title" | dmenu -i | rgd get --fields="launch-command")"
sh -c "$(rgd list | fzf -d $'\t' --with-nth 1 | cut -d$'\t' -f2)"
sh -c "$(rgd list | rofi -dmenu -display-columns 1 -i | cut -d$'\t' -f2)"
sh -c "$(rgd list | fuzzel --dmenu --counter --with-nth 1 | cut -d$'\t' -f2)"
sh -c "$(rgd list | wofi -i --dmenu --pre-display-cmd="echo \"text:%s:\" | cut -f1" | cut -f2)"
sh -c "$(rgd list --fields="title" | bemenu --list 10 --ignorecase | rgd get --fields="launch-command")"
sh -c "$(rgd list --fields="title" | tofi | rgd get --fields="launch-command")"
sh -c "$(rgd list --fields="title" | yofi dialog | rgd get --fields="launch-command")"
All contributions are welcome. If you run into any problems, or have any suggestions/feedback, feel free to open an issue.
Note, however, that for e.g. support for additional launchers/sources, or game(s) not being detected, lib_game_detector is the correct place to open an issue.
This project is written in Rust, so for contributing features / fixes:
Ensure rustup is installed - this project uses the stable toolchain for most things, but nightly for the formatting.
Make your changes and ensure they work as expected - cargo run -- your_args_here.
Lint + format + run tests:
cargo clippy --all -- -W clippy::all && cargo +nightly fmt && cargo test
I like just, so I keep some utility commands in the justfile. Check that out for additional checks which are run in the CI.
rofi, it's worth checking out.
Additional features include sorting based on access and a full configuration
file for modifying detected games, or adding fully custom entries to the list.This code is licensed under the AGPLv3.
See the LICENSE file for more details.