Building from Source
Instructions for building and running Retro Multi Tools from source code.
Requirements
- .NET 8 SDK
- Git
Clone and Build
git clone https://github.com/SvenGDK/RetroMultiTools.git
cd RetroMultiTools
dotnet build
The solution contains two projects:
| Project | Type | Description |
|---|---|---|
RetroMultiTools | Avalonia Desktop (WinExe) | Main application |
RetroMultiTools.Updater | Console (Exe) | External updater that applies downloaded updates |
dotnet build builds both projects.
Run
dotnet run --project RetroMultiTools
Platform-Specific Notes
Linux
Avalonia UI requires several system libraries for rendering. Install them before building:
# Ubuntu / Debian / Linux Mint
sudo apt install libicu-dev libfontconfig1 libx11-6 libice6 libsm6
# Fedora / CentOS Stream / RHEL / Rocky Linux / AlmaLinux / Oracle Linux
sudo dnf install libicu fontconfig libX11 libICE libSM
# Arch Linux
sudo pacman -S icu fontconfig libx11 libice libsm
# Alpine Linux
sudo apk add icu-libs fontconfig libx11 libice libsm
# openSUSE / SLES
sudo zypper install libicu-devel fontconfig libX11-6 libICE6 libSM6
If you encounter a libSkiaSharp error at runtime, install the OpenGL library:
# Ubuntu / Debian / Linux Mint
sudo apt install libgl1-mesa-glx
# Fedora / CentOS Stream / RHEL / Rocky Linux / AlmaLinux / Oracle Linux
sudo dnf install mesa-libGL
# Arch Linux
sudo pacman -S mesa
# Alpine Linux
sudo apk add mesa-gl
# openSUSE / SLES
sudo zypper install Mesa-libGL1
See LINUX.md for full Linux installation details.
macOS
- Requires macOS 10.15 (Catalina) or later.
- On Apple Silicon Macs, ensure you install the ARM64 version of the .NET SDK.
- macOS Gatekeeper may block unsigned builds. Use
xattr -rd com.apple.quarantine RetroMultiToolsto remove the quarantine flag.
See macOS.md for full macOS installation details.
Publish
All release builds are self-contained (include the .NET runtime).
dotnet publish RetroMultiTools -c Release -r win-x64 --self-contained
dotnet publish RetroMultiTools.Updater -c Release -r win-x64 --self-contained
After publishing, copy the updater executable into the main application’s output directory so it is bundled with the release.
Bundling External Files
Release builds also require two external files to be placed in the publish output directory:
| File | Source | Purpose |
|---|---|---|
| SDL2 library | libsdl-org/SDL | Required for gamepad support in Big Picture Mode |
| gamecontrollerdb.txt | SDL_GameControllerDB | SDL2 game controller mappings for automatic controller recognition |
The SDL2 library file name varies by platform:
| Platform | File |
|---|---|
| Windows | SDL2.dll |
| Linux | libSDL2-2.0.so.0 |
| macOS | libSDL2.dylib |
Download the latest gamecontrollerdb.txt:
curl -fsSL -o gamecontrollerdb.txt https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt
Copy both files into the publish output directory alongside the application executable. The CI workflows handle this automatically for all platforms.
Supported Runtime Identifiers
| RID | Platform |
|---|---|
win-x64 | Windows 64-bit (Intel/AMD) |
win-arm64 | Windows ARM64 |
linux-x64 | Linux 64-bit (Intel/AMD) |
linux-arm64 | Linux ARM64 |
osx-x64 | macOS Intel |
osx-arm64 | macOS Apple Silicon |
Dependencies
| Package | Version | Purpose |
|---|---|---|
| Avalonia | 11.3.12 | Cross-platform UI framework |
| Avalonia.Controls.DataGrid | 11.3.12 | DataGrid control |
| Avalonia.Desktop | 11.3.12 | Desktop platform support |
| Avalonia.Themes.Fluent | 11.3.12 | Fluent design theme |
| Avalonia.Fonts.Inter | 11.3.12 | Inter font family |
| Avalonia.Diagnostics | 11.3.12 | Debug diagnostics (Debug builds only) |
| AWSSDK.S3 | 4.0.19 | Amazon S3 file transfers |
| FluentFTP | 53.0.2 | FTP / FTPS file transfers |
| Markdown.Avalonia | 11.0.2 | Markdown rendering |
| SharpCompress | 0.38.0 | Archive extraction (ZIP, RAR, 7z, GZip) |
| SSH.NET | 2025.1.0 | SFTP file transfers |