Simpler approach - pass LD_PRELOAD directly in the shell command
instead of using a wrapper script.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Node.js spawn with detached:true may not properly pass environment
variables on some systems. Using a bash wrapper script guarantees
LD_PRELOAD is set before the game process starts.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Root cause: glibc 2.41 has stricter heap validation that catches a
pre-existing race condition triggered by binary patching.
Changes:
- Add jemalloc auto-detection and usage on Linux
- Add auto-install via pkexec (graphical sudo prompt)
- Clean up clientPatcher.js (remove debug env vars)
- Add null-padding fix for shorter domain replacements
- Document investigation and solution
The launcher now:
1. Auto-detects jemalloc if installed
2. Offers to auto-install if missing (password prompt)
3. Falls back to MALLOC_CHECK_=0 if jemalloc unavailable
Install manually: sudo pacman -S jemalloc (Arch/Steam Deck)
sudo apt install libjemalloc2 (Debian/Ubuntu)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
modManager.js:
- Switch from hardcoded 'junction' to dynamic symlink type based on OS (fixing Linux EPERM).
- Add retry logic for directory removal to handle file locking race conditions.
- Improve broken symlink detection during profile sync.
gameManager.js:
- Implement retry loop (3 attempts) for game directory removal in updateGameFiles to prevent EBUSY/EPERM errors on Windows.
paths.js:
- Prevent fs.mkdirSync failure in getModsPath by pre-checking for broken symbolic links.
* feat: Add Repair Game functionality including UserData backup and cache clearing
* feat: Add In-App Logs Viewer and Logs Folder shortcut
* feat: Add Open Logs feature
* disable dev tools
* Fix Settings UI
* Implement custom mod loading, autoimport, auto repair
* Fixed Custom Mod loading issues and merge issues
* feat: Externalize sensitive API keys and Discord client ID into environment variables using dotenv.
* feat(mods): add profile-based mod management and auto-repair
* modernized UI for GPU Preference option
* feat: auto-detect dedicated GPU on hybrid laptops (iGPU+dGPU)
* feat: detailed GPU info in auto-detection feature on startup
* feat: add GPU options for launcher
- Add GPU preference setting (Auto/Integrated/Dedicated)
- Implement Linux GPU selection with DRI_PRIME and NVIDIA env vars
- Add GPU detection using Electron's app.getGPUInfo()
- Update settings UI with GPU preference dropdown
- Integrate GPU preference into game launch process
* feat: auto-detect dedicated GPU on hybrid laptops (iGPU+dGPU)
* added fallbacks to and option to use integrated GPU.
* add package-lock and fix deps version
* changed 'Nvidia' string to 'NVIDIA'
* fix: selecting `dedicated` option while using nvidia GPU did not set its specific env variables
* remove unused `CONFIG_FILE` variable on launcher core modules
* fix: duplicated save-load gpu detection functions
* move game option settings to the top, while custom java to the bottom
* fix: settings-header margin-bottom from 3rem to 1rem and supress line-clamp warning
Added a full profile system and fixed a few critical mod loading issues.
What changed
Profiles — Implemented proper profile management (create, switch, delete). Each profile now has its own isolated mod list.
Mod Isolation — Fixed ModManager so mods are strictly scoped to the active profile. Browsing and installing only affects the selected profile.
Critical Fix — Fixed a path bug where mods were being saved to ~/AppData/Local on macOS (Windows path) instead of ~/Library/Application Support. Mods now save to the correct location and load correctly in-game.
Stability — Added an auto-sync step before every launch to make sure the physical mods folder always matches the active profile.
UI — Added a profile selector dropdown and a profile management modal.