[{"data":1,"prerenderedAt":1320},["ShallowReactive",2],{"navigation_docs_en":3,"-en-developers-build-from-source":259,"-en-developers-build-from-source-surround":1315},[4,38,110,190,232],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":-1},"Getting started","i-lucide-rocket","\u002Fen\u002Fgetting-started","en\u002F1.getting-started\u002Findex",[10,13,18,23,28,33],{"title":11,"path":7,"stem":8,"icon":12},"Overview","i-lucide-layout-grid",{"title":14,"path":15,"stem":16,"icon":17},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F01.installation","i-lucide-download",{"title":19,"path":20,"stem":21,"icon":22},"Sign in","\u002Fen\u002Fgetting-started\u002Fsign-in","en\u002F1.getting-started\u002F02.sign-in","i-lucide-log-in",{"title":24,"path":25,"stem":26,"icon":27},"Your first instance","\u002Fen\u002Fgetting-started\u002Ffirst-instance","en\u002F1.getting-started\u002F03.first-instance","i-lucide-play",{"title":29,"path":30,"stem":31,"icon":32},"Android: install the APK","\u002Fen\u002Fgetting-started\u002Fandroid","en\u002F1.getting-started\u002F04.android","i-lucide-smartphone",{"title":34,"path":35,"stem":36,"icon":37},"iPhone\u002FiPad: install with AltStore\u002FSideStore","\u002Fen\u002Fgetting-started\u002Fiphone-ipad","en\u002F1.getting-started\u002F05.iphone-ipad","i-lucide-tablet-smartphone",{"title":39,"icon":40,"path":41,"stem":42,"children":43,"page":-1},"Launcher","i-lucide-app-window","\u002Fen\u002Flauncher","en\u002F2.launcher\u002Findex",[44,45,50,55,60,65,70,75,80,85,90,95,100,105],{"title":11,"path":41,"stem":42,"icon":12},{"title":46,"path":47,"stem":48,"icon":49},"Instances","\u002Fen\u002Flauncher\u002Finstances","en\u002F2.launcher\u002F01.instances","i-lucide-boxes",{"title":51,"path":52,"stem":53,"icon":54},"Mod loaders","\u002Fen\u002Flauncher\u002Fmod-loaders","en\u002F2.launcher\u002F02.mod-loaders","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Mods","\u002Fen\u002Flauncher\u002Fmods","en\u002F2.launcher\u002F03.mods","i-lucide-puzzle",{"title":61,"path":62,"stem":63,"icon":64},"Modpacks","\u002Fen\u002Flauncher\u002Fmodpacks","en\u002F2.launcher\u002F04.modpacks","i-lucide-package",{"title":66,"path":67,"stem":68,"icon":69},"Share modpacks","\u002Fen\u002Flauncher\u002Fshare-modpacks","en\u002F2.launcher\u002F05.share-modpacks","i-lucide-share-2",{"title":71,"path":72,"stem":73,"icon":74},"Import from other launchers","\u002Fen\u002Flauncher\u002Fimport","en\u002F2.launcher\u002F06.import","i-lucide-folder-input",{"title":76,"path":77,"stem":78,"icon":79},"Clips & screenshots","\u002Fen\u002Flauncher\u002Fclips","en\u002F2.launcher\u002F07.clips","i-lucide-clapperboard",{"title":81,"path":82,"stem":83,"icon":84},"Friends & chat","\u002Fen\u002Flauncher\u002Fsocial","en\u002F2.launcher\u002F08.social","i-lucide-messages-square",{"title":86,"path":87,"stem":88,"icon":89},"Achievements","\u002Fen\u002Flauncher\u002Fachievements","en\u002F2.launcher\u002F09.achievements","i-lucide-trophy",{"title":91,"path":92,"stem":93,"icon":94},"Skins & capes","\u002Fen\u002Flauncher\u002Fwardrobe","en\u002F2.launcher\u002F10.wardrobe","i-lucide-shirt",{"title":96,"path":97,"stem":98,"icon":99},"Settings","\u002Fen\u002Flauncher\u002Fsettings","en\u002F2.launcher\u002F11.settings","i-lucide-settings",{"title":101,"path":102,"stem":103,"icon":104},"Updates","\u002Fen\u002Flauncher\u002Fupdates","en\u002F2.launcher\u002F12.updates","i-lucide-refresh-cw",{"title":106,"path":107,"stem":108,"icon":109},"Servers","\u002Fen\u002Flauncher\u002Fservers","en\u002F2.launcher\u002F13.servers","i-lucide-server",{"title":111,"icon":112,"path":113,"stem":114,"children":115,"page":-1},"TRS Client","i-lucide-blocks","\u002Fen\u002Fclient","en\u002F3.client\u002Findex",[116,117,121,126,131,136,141,146,151,156,160,165,170,175,180,185],{"title":11,"path":113,"stem":114,"icon":12},{"title":118,"path":119,"stem":120,"icon":112},"What is the TRS Client?","\u002Fen\u002Fclient\u002Foverview","en\u002F3.client\u002F01.overview",{"title":122,"path":123,"stem":124,"icon":125},"TRS menu and HUD editor","\u002Fen\u002Fclient\u002Fmenu-and-hud-editor","en\u002F3.client\u002F02.menu-and-hud-editor","i-lucide-layout-dashboard",{"title":127,"path":128,"stem":129,"icon":130},"Performance and FPS","\u002Fen\u002Fclient\u002Fperformance","en\u002F3.client\u002F03.performance","i-lucide-gauge",{"title":132,"path":133,"stem":134,"icon":135},"PvP modules","\u002Fen\u002Fclient\u002Fpvp","en\u002F3.client\u002F04.pvp","i-lucide-swords",{"title":137,"path":138,"stem":139,"icon":140},"Zoom, freelook and toggle sprint","\u002Fen\u002Fclient\u002Fzoom-and-freelook","en\u002F3.client\u002F05.zoom-and-freelook","i-lucide-zoom-in",{"title":142,"path":143,"stem":144,"icon":145},"Minimap, waypoints and world map","\u002Fen\u002Fclient\u002Fminimap-and-world-map","en\u002F3.client\u002F06.minimap-and-world-map","i-lucide-map",{"title":147,"path":148,"stem":149,"icon":150},"Redstone tools","\u002Fen\u002Fclient\u002Fredstone-tools","en\u002F3.client\u002F07.redstone-tools","i-lucide-zap",{"title":152,"path":153,"stem":154,"icon":155},"Circuit library","\u002Fen\u002Fclient\u002Fcircuit-library","en\u002F3.client\u002F08.circuit-library","i-lucide-cpu",{"title":157,"path":158,"stem":159,"icon":94},"Emotes, capes, wardrobe and accounts","\u002Fen\u002Fclient\u002Femotes-and-capes","en\u002F3.client\u002F09.emotes-and-capes",{"title":161,"path":162,"stem":163,"icon":164},"Screenshots, clips and panoramas","\u002Fen\u002Fclient\u002Fscreenshots-and-clips","en\u002F3.client\u002F10.screenshots-and-clips","i-lucide-camera",{"title":166,"path":167,"stem":168,"icon":169},"World notes","\u002Fen\u002Fclient\u002Fnotes","en\u002F3.client\u002F11.notes","i-lucide-notebook-pen",{"title":171,"path":172,"stem":173,"icon":174},"Chat and comfort","\u002Fen\u002Fclient\u002Fchat-and-comfort","en\u002F3.client\u002F12.chat-and-comfort","i-lucide-message-square",{"title":176,"path":177,"stem":178,"icon":179},"Social in game","\u002Fen\u002Fclient\u002Fsocial-in-game","en\u002F3.client\u002F13.social-in-game","i-lucide-users",{"title":181,"path":182,"stem":183,"icon":184},"Default keys","\u002Fen\u002Fclient\u002Fkeybinds","en\u002F3.client\u002F14.keybinds","i-lucide-keyboard",{"title":186,"path":187,"stem":188,"icon":189},"Host a world for friends","\u002Fen\u002Fclient\u002Fworld-hosting","en\u002F3.client\u002F15.world-hosting","i-lucide-globe",{"title":191,"icon":192,"path":193,"stem":194,"children":195,"page":-1},"Help","i-lucide-life-buoy","\u002Fen\u002Fhelp","en\u002F4.help\u002Findex",[196,197,202,207,212,217,222,227],{"title":11,"path":193,"stem":194,"icon":12},{"title":198,"path":199,"stem":200,"icon":201},"Crash helper","\u002Fen\u002Fhelp\u002Fcrash-helper","en\u002F4.help\u002F01.crash-helper","i-lucide-heart-pulse",{"title":203,"path":204,"stem":205,"icon":206},"Common problems","\u002Fen\u002Fhelp\u002Fcommon-problems","en\u002F4.help\u002F02.common-problems","i-lucide-circle-help",{"title":208,"path":209,"stem":210,"icon":211},"Java & memory","\u002Fen\u002Fhelp\u002Fjava","en\u002F4.help\u002F03.java","i-lucide-coffee",{"title":213,"path":214,"stem":215,"icon":216},"Linux","\u002Fen\u002Fhelp\u002Flinux","en\u002F4.help\u002F04.linux","i-lucide-terminal",{"title":218,"path":219,"stem":220,"icon":221},"Logs","\u002Fen\u002Fhelp\u002Flogs","en\u002F4.help\u002F05.logs","i-lucide-scroll-text",{"title":223,"path":224,"stem":225,"icon":226},"Report a bug","\u002Fen\u002Fhelp\u002Freport-a-bug","en\u002F4.help\u002F06.report-a-bug","i-lucide-bug",{"title":228,"path":229,"stem":230,"icon":231},"Privacy","\u002Fen\u002Fhelp\u002Fprivacy","en\u002F4.help\u002F07.privacy","i-lucide-shield-check",{"title":233,"icon":234,"path":235,"stem":236,"children":237,"page":-1},"Developers","i-lucide-code-xml","\u002Fen\u002Fdevelopers","en\u002F5.developers\u002Findex",[238,239,244,249,254],{"title":11,"path":235,"stem":236,"icon":12},{"title":240,"path":241,"stem":242,"icon":243},"Build from source","\u002Fen\u002Fdevelopers\u002Fbuild-from-source","en\u002F5.developers\u002F01.build-from-source","i-lucide-hammer",{"title":245,"path":246,"stem":247,"icon":248},"Contributing","\u002Fen\u002Fdevelopers\u002Fcontributing","en\u002F5.developers\u002F02.contributing","i-lucide-git-pull-request",{"title":250,"path":251,"stem":252,"icon":253},"Translating","\u002Fen\u002Fdevelopers\u002Ftranslating","en\u002F5.developers\u002F03.translating","i-lucide-languages",{"title":255,"path":256,"stem":257,"icon":258},"Public API","\u002Fen\u002Fdevelopers\u002Fpublic-api","en\u002F5.developers\u002F04.public-api","i-lucide-braces",{"id":260,"title":240,"body":261,"description":1308,"extension":1309,"links":1310,"meta":1311,"navigation":1312,"path":241,"seo":1313,"stem":242,"__hash__":1314},"docs_en\u002Fen\u002F5.developers\u002F01.build-from-source.md",{"type":262,"value":263,"toc":1295},"minimark",[264,276,281,375,394,398,606,610,691,699,707,711,714,794,797,874,885,929,933,983,990,1008,1012,1017,1027,1030,1151,1157,1202,1219,1223,1236,1286,1291],[265,266,267,268,275],"p",{},"The TRS Launcher is a ",[269,270,274],"a",{"href":271,"rel":272},"https:\u002F\u002Ftauri.app",[273],"nofollow","Tauri 2"," app: a Rust core does the work, a Nuxt 4 single-page app is the\ninterface. The in-game TRS Client is a separate Gradle project in the same repository.",[277,278,280],"h2",{"id":279},"what-is-where","What is where",[282,283,284,297],"table",{},[285,286,287],"thead",{},[288,289,290,294],"tr",{},[291,292,293],"th",{},"Folder",[291,295,296],{},"What it is",[298,299,300,312,322,335,345,355,365],"tbody",{},[288,301,302,309],{},[303,304,305],"td",{},[306,307,308],"code",{},"app\u002F",[303,310,311],{},"Nuxt 4 frontend (SPA, no SSR)",[288,313,314,319],{},[303,315,316],{},[306,317,318],{},"src-tauri\u002Fsrc\u002F",[303,320,321],{},"Tauri app: commands, task registry, error mapping, plugins",[288,323,324,329],{},[303,325,326],{},[306,327,328],{},"src-tauri\u002Fcrates\u002Fcore\u002F",[303,330,331,334],{},[306,332,333],{},"trs-core",": the launcher core, independent of the UI",[288,336,337,342],{},[303,338,339],{},[306,340,341],{},"src-tauri\u002Fresources\u002Fclient-mod\u002F",[303,343,344],{},"Prebuilt TRS Client jars bundled with the launcher",[288,346,347,352],{},[303,348,349],{},[306,350,351],{},"client-mod\u002F",[303,353,354],{},"TRS Client: shared core plus Fabric, Forge and NeoForge builds",[288,356,357,362],{},[303,358,359],{},[306,360,361],{},"packaging\u002F",[303,363,364],{},"AUR and Flatpak recipes, Linux desktop files",[288,366,367,372],{},[303,368,369],{},[306,370,371],{},"tests\u002F",[303,373,374],{},"Frontend tests (Vitest)",[265,376,377,378,381,382,388,389,393],{},"The website and the TRS API live in ",[306,379,380],{},"api\u002F"," on the ",[383,384,385],"strong",{},[306,386,387],{},"website"," branch (see ",[269,390,392],{"href":391},"#website-and-api","below",").",[277,395,397],{"id":396},"requirements","Requirements",[399,400,401,450],"tabs",{},[402,403,405],"tabs-item",{"label":404},"Windows",[406,407,408,427,438,444],"ul",{},[409,410,411,414,415,418,419,422,423,426],"li",{},[383,412,413],{},"Node.js 22"," or newer and ",[383,416,417],{},"pnpm"," (the version is pinned in ",[306,420,421],{},"package.json","; ",[306,424,425],{},"corepack enable"," sets it up)",[409,428,429,432,433],{},[383,430,431],{},"Rust"," (stable, MSVC toolchain) via ",[269,434,437],{"href":435,"rel":436},"https:\u002F\u002Frustup.rs",[273],"rustup",[409,439,440,443],{},[383,441,442],{},"Visual Studio Build Tools"," with \"Desktop development with C++\"",[409,445,446,449],{},[383,447,448],{},"WebView2"," (preinstalled on Windows 10 and 11)",[402,451,452,471],{"label":213},[406,453,454,460,468],{},[409,455,456,414,458],{},[383,457,413],{},[383,459,417],{},[409,461,462,464,465],{},[383,463,431],{}," (stable) via ",[269,466,437],{"href":435,"rel":467},[273],[409,469,470],{},"the WebKitGTK and GTK development packages:",[472,473,474,530,570],"code-group",{},[475,476,482],"pre",{"className":477,"code":478,"filename":479,"language":480,"meta":481,"style":481},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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\n","Debian\u002FUbuntu","bash","",[306,483,484],{"__ignoreMap":481},[485,486,489,493,497,500,503,506,509,512,515,518,521,524,527],"span",{"class":487,"line":488},"line",1,[485,490,492],{"class":491},"sBMFI","sudo",[485,494,496],{"class":495},"sfazB"," apt",[485,498,499],{"class":495}," install",[485,501,502],{"class":495}," build-essential",[485,504,505],{"class":495}," curl",[485,507,508],{"class":495}," file",[485,510,511],{"class":495}," pkg-config",[485,513,514],{"class":495}," libssl-dev",[485,516,517],{"class":495}," libwebkit2gtk-4.1-dev",[485,519,520],{"class":495}," libgtk-3-dev",[485,522,523],{"class":495}," libayatana-appindicator3-dev",[485,525,526],{"class":495}," librsvg2-dev",[485,528,529],{"class":495}," libxdo-dev\n",[475,531,534],{"className":477,"code":532,"filename":533,"language":480,"meta":481,"style":481},"sudo pacman -S --needed base-devel webkit2gtk-4.1 gtk3 libayatana-appindicator librsvg openssl xdotool\n","Arch",[306,535,536],{"__ignoreMap":481},[485,537,538,540,543,546,549,552,555,558,561,564,567],{"class":487,"line":488},[485,539,492],{"class":491},[485,541,542],{"class":495}," pacman",[485,544,545],{"class":495}," -S",[485,547,548],{"class":495}," --needed",[485,550,551],{"class":495}," base-devel",[485,553,554],{"class":495}," webkit2gtk-4.1",[485,556,557],{"class":495}," gtk3",[485,559,560],{"class":495}," libayatana-appindicator",[485,562,563],{"class":495}," librsvg",[485,565,566],{"class":495}," openssl",[485,568,569],{"class":495}," xdotool\n",[475,571,574],{"className":477,"code":572,"filename":573,"language":480,"meta":481,"style":481},"sudo dnf install gcc-c++ openssl-devel webkit2gtk4.1-devel gtk3-devel libappindicator-gtk3-devel librsvg2-devel libxdo-devel\n","Fedora",[306,575,576],{"__ignoreMap":481},[485,577,578,580,583,585,588,591,594,597,600,603],{"class":487,"line":488},[485,579,492],{"class":491},[485,581,582],{"class":495}," dnf",[485,584,499],{"class":495},[485,586,587],{"class":495}," gcc-c++",[485,589,590],{"class":495}," openssl-devel",[485,592,593],{"class":495}," webkit2gtk4.1-devel",[485,595,596],{"class":495}," gtk3-devel",[485,598,599],{"class":495}," libappindicator-gtk3-devel",[485,601,602],{"class":495}," librsvg2-devel",[485,604,605],{"class":495}," libxdo-devel\n",[277,607,609],{"id":608},"run-the-launcher-in-dev-mode","Run the launcher in dev mode",[611,612,614,619,645,649,661,668,672,684],"steps",{"level":613},"3",[615,616,618],"h3",{"id":617},"get-the-code","Get the code",[475,620,622],{"className":477,"code":621,"language":480,"meta":481,"style":481},"git clone https:\u002F\u002Fgithub.com\u002Ftheredstonee\u002FTRS-Launcher.git\ncd TRS-Launcher\n",[306,623,624,635],{"__ignoreMap":481},[485,625,626,629,632],{"class":487,"line":488},[485,627,628],{"class":491},"git",[485,630,631],{"class":495}," clone",[485,633,634],{"class":495}," https:\u002F\u002Fgithub.com\u002Ftheredstonee\u002FTRS-Launcher.git\n",[485,636,638,642],{"class":487,"line":637},2,[485,639,641],{"class":640},"s2Zo4","cd",[485,643,644],{"class":495}," TRS-Launcher\n",[615,646,648],{"id":647},"install-the-dependencies","Install the dependencies",[475,650,652],{"className":477,"code":651,"language":480,"meta":481,"style":481},"pnpm install\n",[306,653,654],{"__ignoreMap":481},[485,655,656,658],{"class":487,"line":488},[485,657,417],{"class":491},[485,659,660],{"class":495}," install\n",[265,662,663,664,667],{},"This also runs ",[306,665,666],{},"nuxt prepare",".",[615,669,671],{"id":670},"start-it","Start it",[475,673,675],{"className":477,"code":674,"language":480,"meta":481,"style":481},"pnpm app:dev\n",[306,676,677],{"__ignoreMap":481},[485,678,679,681],{"class":487,"line":488},[485,680,417],{"class":491},[485,682,683],{"class":495}," app:dev\n",[265,685,686,687,690],{},"This starts the Nuxt dev server on ",[306,688,689],{},"http:\u002F\u002Flocalhost:3000"," and opens the Tauri window with hot reload. The first run\ncompiles the Rust part and takes a while.",[692,693,694,695,698],"tip",{},"Set ",[306,696,697],{},"TRS_LAUNCHER_HOME"," to a separate folder to keep your test data away from your real launcher data.",[700,701,702,703,706],"note",{},"Development builds without a signed-in account start the game in Minecraft's official ",[383,704,705],{},"demo mode",". Release builds\nalways need an account that owns the game.",[277,708,710],{"id":709},"run-the-checks","Run the checks",[265,712,713],{},"These are the same checks the CI runs on every push and pull request.",[472,715,716,736],{},[475,717,720],{"className":477,"code":718,"filename":719,"language":480,"meta":481,"style":481},"pnpm typecheck\npnpm test\n","Frontend",[306,721,722,729],{"__ignoreMap":481},[485,723,724,726],{"class":487,"line":488},[485,725,417],{"class":491},[485,727,728],{"class":495}," typecheck\n",[485,730,731,733],{"class":487,"line":637},[485,732,417],{"class":491},[485,734,735],{"class":495}," test\n",[475,737,739],{"className":477,"code":738,"filename":431,"language":480,"meta":481,"style":481},"pnpm generate            # the Tauri crate needs a built frontend\ncd src-tauri\ncargo clippy --workspace --all-targets -- -D warnings\ncargo test --workspace\n",[306,740,741,752,759,783],{"__ignoreMap":481},[485,742,743,745,748],{"class":487,"line":488},[485,744,417],{"class":491},[485,746,747],{"class":495}," generate",[485,749,751],{"class":750},"sHwdD","            # the Tauri crate needs a built frontend\n",[485,753,754,756],{"class":487,"line":637},[485,755,641],{"class":640},[485,757,758],{"class":495}," src-tauri\n",[485,760,762,765,768,771,774,777,780],{"class":487,"line":761},3,[485,763,764],{"class":491},"cargo",[485,766,767],{"class":495}," clippy",[485,769,770],{"class":495}," --workspace",[485,772,773],{"class":495}," --all-targets",[485,775,776],{"class":495}," --",[485,778,779],{"class":495}," -D",[485,781,782],{"class":495}," warnings\n",[485,784,786,788,791],{"class":487,"line":785},4,[485,787,764],{"class":491},[485,789,790],{"class":495}," test",[485,792,793],{"class":495}," --workspace\n",[265,795,796],{},"The launch pipeline can be tested without the interface. It downloads and starts the given version in its own data\nfolder:",[475,798,800],{"className":477,"code":799,"language":480,"meta":481,"style":481},"cd src-tauri\ncargo run -p trs-core --example launch -- \u003Cdata-dir> 1.21.1 [vanilla|fabric|quilt|forge|neoforge] [seconds]\n",[306,801,802,808],{"__ignoreMap":481},[485,803,804,806],{"class":487,"line":488},[485,805,641],{"class":640},[485,807,758],{"class":495},[485,809,810,812,815,818,821,824,827,829,833,836,840,843,847,850,853,856,858,861,863,866,868,871],{"class":487,"line":637},[485,811,764],{"class":491},[485,813,814],{"class":495}," run",[485,816,817],{"class":495}," -p",[485,819,820],{"class":495}," trs-core",[485,822,823],{"class":495}," --example",[485,825,826],{"class":495}," launch",[485,828,776],{"class":495},[485,830,832],{"class":831},"sMK4o"," \u003C",[485,834,835],{"class":495},"data-di",[485,837,839],{"class":838},"sTEyZ","r",[485,841,842],{"class":831},">",[485,844,846],{"class":845},"sbssI"," 1.21.1",[485,848,849],{"class":838}," [vanilla",[485,851,852],{"class":831},"|",[485,854,855],{"class":491},"fabric",[485,857,852],{"class":831},[485,859,860],{"class":491},"quilt",[485,862,852],{"class":831},[485,864,865],{"class":491},"forge",[485,867,852],{"class":831},[485,869,870],{"class":491},"neoforge]",[485,872,873],{"class":838}," [seconds]\n",[265,875,876,877,880,881,884],{},"To try the ",[269,878,879],{"href":199},"crash helper"," rules on a log or crash report (also in ",[306,882,883],{},"src-tauri","):",[475,886,888],{"className":477,"code":887,"language":480,"meta":481,"style":481},"cargo run -p trs-core --example crash_scan -- \u003Clog-or-crash-report> [--memory MB --system MB]\n",[306,889,890],{"__ignoreMap":481},[485,891,892,894,896,898,900,902,905,907,909,912,915,917,920,923,926],{"class":487,"line":488},[485,893,764],{"class":491},[485,895,814],{"class":495},[485,897,817],{"class":495},[485,899,820],{"class":495},[485,901,823],{"class":495},[485,903,904],{"class":495}," crash_scan",[485,906,776],{"class":495},[485,908,832],{"class":831},[485,910,911],{"class":495},"log-or-crash-repor",[485,913,914],{"class":838},"t",[485,916,842],{"class":831},[485,918,919],{"class":838}," [--memory ",[485,921,922],{"class":495},"MB",[485,924,925],{"class":495}," --system",[485,927,928],{"class":495}," MB]\n",[277,930,932],{"id":931},"build-installers","Build installers",[399,934,935,955],{},[402,936,937,949],{"label":404},[475,938,940],{"className":477,"code":939,"language":480,"meta":481,"style":481},"pnpm app:build\n",[306,941,942],{"__ignoreMap":481},[485,943,944,946],{"class":487,"line":488},[485,945,417],{"class":491},[485,947,948],{"class":495}," app:build\n",[265,950,951,952,667],{},"The NSIS installer ends up in ",[306,953,954],{},"src-tauri\u002Ftarget\u002Frelease\u002Fbundle",[402,956,957,978],{"label":213},[475,958,960],{"className":477,"code":959,"language":480,"meta":481,"style":481},"pnpm tauri build --bundles appimage,deb,rpm\n",[306,961,962],{"__ignoreMap":481},[485,963,964,966,969,972,975],{"class":487,"line":488},[485,965,417],{"class":491},[485,967,968],{"class":495}," tauri",[485,970,971],{"class":495}," build",[485,973,974],{"class":495}," --bundles",[485,976,977],{"class":495}," appimage,deb,rpm\n",[265,979,980,981,667],{},"The AUR and Flatpak recipes are in ",[306,982,361],{},[700,984,985,986,989],{},"Official releases sign the update files with the project's private key. Without that key, the build can end with an\nerror about a missing private key after the installers are made. Turn the update files off for your own builds:\n",[306,987,988],{},"pnpm tauri build --config '{\"bundle\":{\"createUpdaterArtifacts\":false}}'"," (the value can also be a path to a JSON file\nwith the same content).",[265,991,992,995,996,999,1000,1003,1004,1007],{},[383,993,994],{},"CurseForge"," needs an API key at build time: the environment variable ",[306,997,998],{},"CURSEFORGE_API_KEY",", or the file\n",[306,1001,1002],{},"~\u002F.tauri\u002Fcurseforge-api-key"," (",[306,1005,1006],{},"%USERPROFILE%\\.tauri\\curseforge-api-key"," on Windows). Without a key, the build works\nand simply hides CurseForge.",[277,1009,1011],{"id":1010},"build-the-trs-client","Build the TRS Client",[265,1013,1014,1015,667],{},"You don't need to build the mod to build the launcher – prebuilt jars are in ",[306,1016,341],{},[265,1018,1019,1022,1023,1026],{},[383,1020,1021],{},"Requirements:"," a ",[383,1024,1025],{},"JDK 21"," or newer to run Gradle. Gradle toolchains download JDK 17, 21 or 25 for compiling when\nthey are missing.",[265,1028,1029],{},"Every loader family is its own Gradle build with its own wrapper:",[282,1031,1032,1044],{},[285,1033,1034],{},[288,1035,1036,1038,1041],{},[291,1037,293],{},[291,1039,1040],{},"Loader and versions",[291,1042,1043],{},"Build",[298,1045,1046,1065,1079,1094,1108,1123,1137],{},[288,1047,1048,1057,1060],{},[303,1049,1050,1052,1053,1056],{},[306,1051,351],{}," (root, ",[306,1054,1055],{},"fabric\u002F",")",[303,1058,1059],{},"Fabric 1.14.4–26.3",[303,1061,1062],{},[306,1063,1064],{},".\u002Fgradlew collectLauncherJars",[288,1066,1067,1072,1075],{},[303,1068,1069],{},[306,1070,1071],{},"client-mod\u002Fneoforge\u002F",[303,1073,1074],{},"NeoForge 1.20.2–26.3",[303,1076,1077],{},[306,1078,1064],{},[288,1080,1081,1086,1089],{},[303,1082,1083],{},[306,1084,1085],{},"client-mod\u002Fforge\u002F",[303,1087,1088],{},"Forge 1.20–26.3",[303,1090,1091],{},[306,1092,1093],{},".\u002Fgradlew :collectLauncherJars",[288,1095,1096,1101,1104],{},[303,1097,1098],{},[306,1099,1100],{},"client-mod\u002Fforge-mojmap-legacy\u002F",[303,1102,1103],{},"Forge 1.14.4, 1.15.2, 1.16.x, 1.17.1, 1.18.x, 1.19.x",[303,1105,1106],{},[306,1107,1064],{},[288,1109,1110,1115,1118],{},[303,1111,1112],{},[306,1113,1114],{},"client-mod\u002Fforge-1.13.2\u002F",[303,1116,1117],{},"Forge 1.13.2",[303,1119,1120],{},[306,1121,1122],{},".\u002Fgradlew build",[288,1124,1125,1130,1133],{},[303,1126,1127],{},[306,1128,1129],{},"client-mod\u002Flegacy\u002F",[303,1131,1132],{},"Forge 1.8.9–1.12.2",[303,1134,1135],{},[306,1136,1064],{},[288,1138,1139,1144,1147],{},[303,1140,1141],{},[306,1142,1143],{},"client-mod\u002Flegacy-1.7.10\u002F",[303,1145,1146],{},"Forge 1.7.10",[303,1148,1149],{},[306,1150,1122],{},[265,1152,1153,1154,1156],{},"For the Fabric build in ",[306,1155,351],{},":",[475,1158,1160],{"className":477,"code":1159,"language":480,"meta":481,"style":481},".\u002Fgradlew build                      # every version + the unit tests of common\u002F\n.\u002Fgradlew :fabric:1.21.1:build       # a single version\n.\u002Fgradlew :fabric:1.21.1:runClient   # start that Minecraft version with the mod (game folder: client-mod\u002Frun)\n.\u002Fgradlew collectLauncherJars        # write dist\u002F*.jar and dist\u002Fbuilds.json for the launcher\n",[306,1161,1162,1172,1182,1192],{"__ignoreMap":481},[485,1163,1164,1167,1169],{"class":487,"line":488},[485,1165,1166],{"class":491},".\u002Fgradlew",[485,1168,971],{"class":495},[485,1170,1171],{"class":750},"                      # every version + the unit tests of common\u002F\n",[485,1173,1174,1176,1179],{"class":487,"line":637},[485,1175,1166],{"class":491},[485,1177,1178],{"class":495}," :fabric:1.21.1:build",[485,1180,1181],{"class":750},"       # a single version\n",[485,1183,1184,1186,1189],{"class":487,"line":761},[485,1185,1166],{"class":491},[485,1187,1188],{"class":495}," :fabric:1.21.1:runClient",[485,1190,1191],{"class":750},"   # start that Minecraft version with the mod (game folder: client-mod\u002Frun)\n",[485,1193,1194,1196,1199],{"class":487,"line":785},[485,1195,1166],{"class":491},[485,1197,1198],{"class":495}," collectLauncherJars",[485,1200,1201],{"class":750},"        # write dist\u002F*.jar and dist\u002Fbuilds.json for the launcher\n",[692,1203,1204,1205,1208,1209,1212,1213,1215,1216,667],{},"On Windows, use ",[306,1206,1207],{},".\\gradlew"," or ",[306,1210,1211],{},"gradlew.bat"," instead of ",[306,1214,1166],{},". Build the projects one after another – they all\nwrite into the same ",[306,1217,1218],{},"client-mod\u002Fdist\u002F",[277,1220,1222],{"id":1221},"website-and-api","Website and API",[265,1224,1225,1226,1228,1229,1231,1232,1235],{},"The website and the TRS API are a separate Nuxt 4\u002FNitro project on the ",[306,1227,387],{}," branch. It has its own\n",[306,1230,421],{}," and lockfile and needs ",[383,1233,1234],{},"Node.js 24.11"," or newer.",[475,1237,1239],{"className":477,"code":1238,"language":480,"meta":481,"style":481},"git checkout website\ncd api\npnpm install\npnpm typecheck && pnpm lint && pnpm test\n",[306,1240,1241,1251,1258,1264],{"__ignoreMap":481},[485,1242,1243,1245,1248],{"class":487,"line":488},[485,1244,628],{"class":491},[485,1246,1247],{"class":495}," checkout",[485,1249,1250],{"class":495}," website\n",[485,1252,1253,1255],{"class":487,"line":637},[485,1254,641],{"class":640},[485,1256,1257],{"class":495}," api\n",[485,1259,1260,1262],{"class":487,"line":761},[485,1261,417],{"class":491},[485,1263,660],{"class":495},[485,1265,1266,1268,1271,1274,1277,1280,1282,1284],{"class":487,"line":785},[485,1267,417],{"class":491},[485,1269,1270],{"class":495}," typecheck",[485,1272,1273],{"class":831}," &&",[485,1275,1276],{"class":491}," pnpm",[485,1278,1279],{"class":495}," lint",[485,1281,1273],{"class":831},[485,1283,1276],{"class":491},[485,1285,735],{"class":495},[265,1287,1288,1289,667],{},"The public endpoints of the API are described in ",[269,1290,255],{"href":256},[1292,1293,1294],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":481,"searchDepth":637,"depth":637,"links":1296},[1297,1298,1299,1304,1305,1306,1307],{"id":279,"depth":637,"text":280},{"id":396,"depth":637,"text":397},{"id":608,"depth":637,"text":609,"children":1300},[1301,1302,1303],{"id":617,"depth":761,"text":618},{"id":647,"depth":761,"text":648},{"id":670,"depth":761,"text":671},{"id":709,"depth":637,"text":710},{"id":931,"depth":637,"text":932},{"id":1010,"depth":637,"text":1011},{"id":1221,"depth":637,"text":1222},"Set up Node, pnpm and Rust, run the launcher in dev mode, run the checks, build installers and build the TRS Client mod.","md",null,{},{"icon":243},{"title":240,"description":1308},"WdRrarefKpyV6hBgNNYfm4oMSNM7Q0KjzgVyn6-25S8",[1316,1318],{"title":11,"path":235,"stem":236,"description":1317,"icon":12,"children":-1},"Source code, building TRS Launcher from source, the TRS API and how to contribute.",{"title":245,"path":246,"stem":247,"description":1319,"icon":248,"children":-1},"Branches and pull requests, code rules, tests, the English and German changelog, and the GPL-3.0 license.",1791894782402]