Environment variables
Create a.env file in apps/desktop/ to configure optional features:
ScreenScraper API
GameLord uses ScreenScraper for game metadata and cover art:Register for an account
Visit screenscraper.fr and create a free account.
Request developer credentials
Post in the developer forum requesting a dev ID and password. Include your project name and purpose.
Without ScreenScraper credentials, artwork sync will fail. The app will still function, but games won’t have cover art or metadata.
Build-time variables
These are used during packaging and notarization:Code signing variables are only needed for distribution builds (
pnpm run publish). Development builds work without them.User data directory
GameLord stores all runtime data in the Electron user data directory:- macOS
- Linux
- Windows
Directory structure
The user data directory is created automatically on first launch. You can open it from the app via the Settings menu (planned feature).
Runtime configuration files
library-config.json
Stores library scan paths and system configurations:System definition fields
System definition fields
- id: Unique identifier (e.g.,
nes,snes,genesis) - name: Full display name
- shortName: Abbreviated name for UI space constraints
- manufacturer: Console manufacturer
- extensions: Supported file extensions (include
.zip/.7zfor compressed ROMs) - requiresBios: Whether the system needs BIOS files
- biosFiles (optional): Array of required BIOS filenames
library.json
Game library database (managed byLibraryService):
Don’t edit
library.json manually while the app is running - changes will be overwritten. Use the library UI or IPC handlers to modify game data.Core configuration
Core paths
Cores are downloaded automatically to:Download core from buildbot
Visit buildbot.libretro.com and navigate to your platform:
- macOS ARM64:
apple/osx/arm64/latest/ - macOS x86_64:
apple/osx/x86_64/latest/ - Linux x86_64:
linux/x86_64/latest/ - Windows x86_64:
windows/x86_64/latest/
Extract the core
Unzip the downloaded
.zip file. You’ll get a .dylib (macOS), .so (Linux), or .dll (Windows) file.BIOS files
Some systems (Saturn, PlayStation) require BIOS files:- Sega Saturn
- PlayStation
Required files in
GameLord/BIOS/:sega_101.bin(Japanese BIOS)mpr-17933.bin(US/EU BIOS)
The
BIOS/ directory is created automatically on first launch. Place BIOS files there and restart the app.Logging
Logging is handled byelectron-log:
Log locations
- macOS
- Linux
- Windows
Log levels
Viewing logs
Viewing logs
Development:Production:
Performance tuning
Frame pacing
Adjust the spin threshold for frame timing (incore-worker.ts):
Audio buffer size
Adjust the audio ring buffer size (inlibretro_core.cc):
Hash concurrency
Adjust parallel hashing during library scans (inLibraryService.ts):
Development mode features
Git branch indicator
The dev build injects git context as compile-time constants:Hot reload
Main process and workers rebuild on file changes, but require a full restart. Renderer uses React Fast Refresh for instant updates.If hot reload stops working, restart the dev server:
Ctrl+C then pnpm startNext steps
Architecture
Understand the multi-process architecture and data flow
Libretro cores
Learn about core integration, system support, and BIOS requirements