Build from source
The TRS Launcher is a Tauri 2 app: a Rust core does the work, a Nuxt 4 single-page app is the interface. The in-game TRS Client is a separate Gradle project in the same repository.
What is where
| Folder | What it is |
|---|---|
app/ | Nuxt 4 frontend (SPA, no SSR) |
src-tauri/src/ | Tauri app: commands, task registry, error mapping, plugins |
src-tauri/crates/core/ | trs-core: the launcher core, independent of the UI |
src-tauri/resources/client-mod/ | Prebuilt TRS Client jars bundled with the launcher |
client-mod/ | TRS Client: shared core plus Fabric, Forge and NeoForge builds |
packaging/ | AUR and Flatpak recipes, Linux desktop files |
tests/ | Frontend tests (Vitest) |
The website and the TRS API live in api/ on the website branch (see below).
Requirements
- Node.js 22 or newer and pnpm (the version is pinned in
package.json;corepack enablesets it up) - Rust (stable, MSVC toolchain) via rustup
- Visual Studio Build Tools with "Desktop development with C++"
- WebView2 (preinstalled on Windows 10 and 11)
- Node.js 22 or newer and pnpm
- Rust (stable) via rustup
- the WebKitGTK and GTK development packages:
sudo apt install build-essential curl file pkg-config libssl-dev libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev libxdo-dev
sudo pacman -S --needed base-devel webkit2gtk-4.1 gtk3 libayatana-appindicator librsvg openssl xdotool
sudo dnf install gcc-c++ openssl-devel webkit2gtk4.1-devel gtk3-devel libappindicator-gtk3-devel librsvg2-devel libxdo-devel
Run the launcher in dev mode
Get the code
git clone https://github.com/theredstonee/TRS-Launcher.git
cd TRS-Launcher
Install the dependencies
pnpm install
This also runs nuxt prepare.
Start it
pnpm app:dev
This starts the Nuxt dev server on http://localhost:3000 and opens the Tauri window with hot reload. The first run
compiles the Rust part and takes a while.
TRS_LAUNCHER_HOME to a separate folder to keep your test data away from your real launcher data.Run the checks
These are the same checks the CI runs on every push and pull request.
pnpm typecheck
pnpm test
pnpm generate # the Tauri crate needs a built frontend
cd src-tauri
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
The launch pipeline can be tested without the interface. It downloads and starts the given version in its own data folder:
cd src-tauri
cargo run -p trs-core --example launch -- <data-dir> 1.21.1 [vanilla|fabric|quilt|forge|neoforge] [seconds]
To try the crash helper rules on a log or crash report (also in src-tauri):
cargo run -p trs-core --example crash_scan -- <log-or-crash-report> [--memory MB --system MB]
Build installers
pnpm app:build
The NSIS installer ends up in src-tauri/target/release/bundle.
pnpm tauri build --bundles appimage,deb,rpm
The AUR and Flatpak recipes are in packaging/.
pnpm tauri build --config '{"bundle":{"createUpdaterArtifacts":false}}' (the value can also be a path to a JSON file
with the same content).CurseForge needs an API key at build time: the environment variable CURSEFORGE_API_KEY, or the file
~/.tauri/curseforge-api-key (%USERPROFILE%\.tauri\curseforge-api-key on Windows). Without a key, the build works
and simply hides CurseForge.
Build the TRS Client
You don't need to build the mod to build the launcher – prebuilt jars are in src-tauri/resources/client-mod/.
Requirements: a JDK 21 or newer to run Gradle. Gradle toolchains download JDK 17, 21 or 25 for compiling when they are missing.
Every loader family is its own Gradle build with its own wrapper:
| Folder | Loader and versions | Build |
|---|---|---|
client-mod/ (root, fabric/) | Fabric 1.14.4–26.3 | ./gradlew collectLauncherJars |
client-mod/neoforge/ | NeoForge 1.20.2–26.3 | ./gradlew collectLauncherJars |
client-mod/forge/ | Forge 1.20–26.3 | ./gradlew :collectLauncherJars |
client-mod/forge-mojmap-legacy/ | Forge 1.14.4, 1.15.2, 1.16.x, 1.17.1, 1.18.x, 1.19.x | ./gradlew collectLauncherJars |
client-mod/forge-1.13.2/ | Forge 1.13.2 | ./gradlew build |
client-mod/legacy/ | Forge 1.8.9–1.12.2 | ./gradlew collectLauncherJars |
client-mod/legacy-1.7.10/ | Forge 1.7.10 | ./gradlew build |
For the Fabric build in client-mod/:
./gradlew build # every version + the unit tests of common/
./gradlew :fabric:1.21.1:build # a single version
./gradlew :fabric:1.21.1:runClient # start that Minecraft version with the mod (game folder: client-mod/run)
./gradlew collectLauncherJars # write dist/*.jar and dist/builds.json for the launcher
.\gradlew or gradlew.bat instead of ./gradlew. Build the projects one after another – they all
write into the same client-mod/dist/.Website and API
The website and the TRS API are a separate Nuxt 4/Nitro project on the website branch. It has its own
package.json and lockfile and needs Node.js 24.11 or newer.
git checkout website
cd api
pnpm install
pnpm typecheck && pnpm lint && pnpm test
The public endpoints of the API are described in Public API.