A song browser for YARG. Runs on the machine hosting the game and serves your library to any phone on the network — sortable, filterable, searchable, with album art, 30-second previews, and whatever is playing right now.
It reads YARG's own files and never writes to them. Scan in YARG and every connected phone updates itself; there is nothing to export and nothing to keep in sync.
Try the demo → — the real app, a made-up library, no install required.
Needs Node 20+ and a YARG install that has scanned at least once.
git clone --recurse-submodules https://github.com/DevPrice/YASS.git
cd YASS
npm install
npm run build
npm start # http://localhost:4321Open the address on your phone — the server listens on the LAN, so
http://<your-lan-ip>:4321 works from anywhere in the house.
If YARG isn't in the default location, set YASS_YARG_DATA_DIR to the folder holding
currentSong.json and songcache.bin. That's the only path there is to set, and usually
it's found for you.
Default YARG data folders
| OS | Path |
|---|---|
| Windows | %USERPROFILE%\AppData\LocalLow\YARC\YARG\release |
| macOS | ~/Library/Application Support/YARC/YARG/release |
| Linux | ~/.config/unity3d/YARC/YARG/release |
Swap release for nightly or dev to match your build. If YARG was launched with
-persistent-data-path, that path wins and you'll have to set this by hand.
A portable executable that puts YASS in the notification area: a QR code with the address to hand guests, settings behind native file pickers, and the server running underneath it.
npm run dist # -> dist/YASS.exe on Windows (~82 MB)
# -> dist/YASS.AppImage on LinuxThe files the releases page hands out
carry the version — YASS-1.0.0.exe, YASS-1.0.0-x86_64.AppImage — so a download
can be told apart from the next one. A local build keeps the plain name and
overwrites itself, which is what you want when you are building it repeatedly.
Nothing to install either way, and it builds for the platform you run it on. The Windows build is unsigned, so SmartScreen warns on first run.
On Linux, chmod +x the AppImage and run it. Two things differ from Windows:
- AppImages mount themselves with FUSE, which Ubuntu 24.04 and up no longer ship.
Either install
libfuse2, or run it with--appimage-extract-and-run. - ffmpeg — which album art and previews need — is not fetched for you, because the
build YASS pins is a Windows one.
apt install ffmpeg(or your distro's equivalent, orYASS_FFMPEG=/path/to/ffmpeg) and restart the server. Without it the song list works and the art stays dark.
There's no settings screen in the web app — it's opened by a room full of guests, and
configuration isn't theirs. Use the tray app, or edit
%APPDATA%/yass/settings.json (~/Library/Application Support/yass on macOS,
$XDG_CONFIG_HOME/yass on Linux). The path is printed at startup.
Each setting has an environment override, which applies to that run only and is never written to the file:
| Setting | Env var | Default |
|---|---|---|
yargDataDir |
YASS_YARG_DATA_DIR |
Auto-detected — see above |
host |
YASS_HOST |
0.0.0.0 |
port |
YASS_PORT |
4321 |
pollIntervalMs |
YASS_POLL_INTERVAL_MS |
10000 |
| — | YASS_FFMPEG |
Fetched on demand |
| — | YASS_GENRE_MAPPINGS |
Found in YARG's install |
client/ Vite + React 19 + Tailwind 4
server/ Hono on Node — the API, and in production the client too
desktop/ Electron tray app
shared/ Types used by both
| Command | Does |
|---|---|
npm run dev |
Client on :5173, API on :4321 |
npm run build |
Client and server |
npm start |
The built server, one process, one port |
npm run dev:demo |
The serverless demo, locally |
npm run build:demo |
The demo as a static site in client/dist |
npm run dist |
Everything, packaged for the platform you're on |
npm test |
Tests, against real captures in fixtures/ |
The submodule isn't optional. vendor/opensource is
YARC-Official/OpenSource, the registry that
turns a chart's source id into a name and an icon — rb3dlc into Rock Band 3 DLC. The
build fails without it. git submodule update --init if you cloned the plain way.
npm run build:demo swaps everything behind the network for client/src/mock/ — 1,650
invented songs, generated cover art, and a simulated now-playing feed. Nothing in it is a
real release or anyone's real library. It's what
GitHub Pages serves, deployed by
.github/workflows/pages.yml on every push that touches the client.
- The library comes from
songcache.bin, the index YARG writes when it scans. The server watches that file, so a scan reaches every phone in about half a second. Nothing is filtered out, including songs above YARG's Max Song Rating. - Album art and previews are read straight out of the charts — SNG,
.yargsongand CON all work. ffmpeg does the decoding; it's downloaded once and cached. Without it those features stay dark and everything else is fine. - Genres are normalized the way YARG normalizes them, using the same
Genrelizer mappings the game downloads,
so
Alt RockandAlternative Rockstop being separate filters. - The banner can pick up YARG's stage lighting. Turn on Settings → Experimental →
Other → Enable UDP data stream and the now-playing banner tints to match the venue.
Nothing flashes, and it's off under
prefers-reduced-motion.
YARG-DATA-FORMATS.md documents the file formats behind all of
that.
Public domain, under the Unlicense — take it, sell it, fork it, no attribution
required. That covers our work but not what travels with it: the source badges, the fonts,
YARG's design tokens, and a genre normaliser ported from LGPL-3.0 source.
THIRD-PARTY-NOTICES.md has the details, and is worth reading
before you ship anything commercial.
YASS is unofficial and unaffiliated with YARC, Harmonix, Activision or Epic Games.