Skip to content

NeelFrostrain/UnrealLauncher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

206 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Unreal Launcher

A lightweight, cross-platform Electron desktop app for discovering, launching, and managing Unreal Engine installations and projects โ€” no Epic Games Launcher required.

Version Status License Platform

Repo Size Commit Activity Open Issues Code Coverage

Node Electron React TypeScript Rust

Quick Links:

Website Releases Discord Issues


What It Does

Unreal Launcher is a full replacement for the Epic Games Launcher for day-to-day Unreal Engine development. It auto-scans your drives for installed engines and .uproject files, lets you launch them with one click, browses your Fab marketplace assets, and stays completely out of your way. No bloat, no login, no waiting.

Supports Windows, macOS, and Linux with native performance optimizations and platform-specific features.

Tech Stack: TypeScript ยท React 19 ยท Electron 39 ยท Vite 7 ยท Tailwind CSS 4 ยท Zustand ยท Framer Motion ยท Rust (napi-rs)


Project Stats

GitHub Stars GitHub Forks GitHub Issues GitHub PRs Last Commit


Core Features

Engine Management

  • Auto-Scan Engines โ€” Discovers UE4 & UE5 installations across common paths
  • Windows Registry Discovery โ€” Reads registry via reg.exe to find Epic-installed engines automatically
  • Manual Engine Add โ€” Browse and validate any custom engine folder
  • Engine Alias โ€” Set custom nicknames for engine instances to tell duplicates apart
  • One-Click Launch โ€” Start any engine version instantly
  • Background Size Calculation โ€” Folder size computed without blocking the UI
  • Marketplace Plugin Browser โ€” Lists all installed marketplace plugins per engine
  • Engine Deletion โ€” Remove engines from the list (files remain untouched)

Project Management

  • Auto-Scan Projects โ€” Recursively finds all .uproject files across your drives
  • Batch Import โ€” Add up to 20 projects at once from a single folder
  • One-Click Launch โ€” Open any project in its matching engine editor
  • Game Mode Launch โ€” Launch projects directly in -game mode
  • List & Grid View โ€” Toggle between flat list and thumbnail grid (preference persisted)
  • Favorites System โ€” Pin projects with a star; dedicated Favorites tab
  • Hidden Projects Tab โ€” Hide projects non-destructively; restore any time
  • Advanced Sorting โ€” Sort by name, last opened, date created, size, or engine version (asc/desc, persisted)
  • Real-Time Search โ€” Filter projects by name instantly
  • Per-Project Size Calculation โ€” Background calculation with live progress
  • Log Viewer โ€” Tail the latest .log file from Saved/Logs/ directly in the app
  • Git Integration โ€” Detect branch, remote URL, initialize repos with UE-ready .gitignore
  • File Editor โ€” Edit DefaultEngine.ini and .uproject files in-app with find/replace
  • Rich Context Menu โ€” Git tools, project tools, organize options via right-click menu
  • Open in Explorer โ€” Jump to project folder or open in terminal

Fab Marketplace Browser

  • Auto-Detect Fab Cache โ€” Finds Epic/Fab vault cache in common paths
  • Custom Folder Support โ€” Point to any custom Fab download directory
  • Asset Scanning โ€” Extracts name, version, description, icon, compatible UE versions
  • Asset Type Detection โ€” Classifies assets as Plugin, Content Pack, or Project
  • Asset Thumbnails โ€” Browse with visual previews
  • Direct Fab Links โ€” Click to open assets on Fab marketplace

UE Tracer (Windows)

  • Background Tracking โ€” Rust executable runs silently and records engine/project usage
  • Data Merging โ€” Tracer data merged with saved data on every scan
  • Windows Startup โ€” Optionally auto-start tracer with Windows via registry
  • Process Detection โ€” Check if tracer is currently running
  • Data Directory Access โ€” View and manage tracer data from Settings

Appearance & Theming

  • Built-in Themes โ€” Dark, Darker, Midnight Blue, Warm Dark presets
  • Per-Token Color Overrides โ€” Customize any individual color token
  • Saveable Theme Profiles โ€” Save, rename, apply, and delete custom combinations
  • Font Customization โ€” Choose font family and size for the entire UI
  • Border Radius Control โ€” Slider syncs border radius across all UI elements
  • UI Scale Adjustment โ€” Adjust overall UI scale factor
  • One-Click Reset โ€” Reset all appearance customizations to defaults

System & UX

  • Auto-Updates โ€” GitHub Releases-based updates via electron-updater
  • Manual Version Check โ€” Compare against latest GitHub release
  • Single Instance Lock โ€” Second launch focuses existing window
  • Animated Splash Screen โ€” Loading screen on startup
  • Resizable Sidebar โ€” Drag handle to resize or collapse
  • Stacking Toasts โ€” Real-time notifications with auto-dismiss and close button
  • Error Boundary โ€” Recoverable crash screen instead of blank window
  • Auto-Close on Launch โ€” Optionally close app when launching engine/project
  • Discord Feedback โ€” Send bug reports directly to Discord via webhook
  • Cross-Platform Support โ€” Windows, macOS, and Linux with platform-specific optimizations

Feature Summary

Category Count
Engine Management 8
Project Management 14
Fab Marketplace Browser 6
UE Tracer 5
Appearance & Theming 7
System & UX 10
Total 50

Architecture

System Overview

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Renderer Process (React)                 โ”‚
โ”‚  React 19 + TypeScript + Tailwind CSS + Zustand             โ”‚
โ”‚  Pages: Engines ยท Projects ยท Settings ยท About               โ”‚
โ”‚  Components: Cards ยท Toolbars ยท Dialogs ยท Toasts            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚  IPC (contextBridge)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Main Process (Node.js)                   โ”‚
โ”‚  Electron 39 + TypeScript                                   โ”‚
โ”‚  IPC Handlers: engines ยท projects ยท fab ยท tracer ยท misc     โ”‚
โ”‚  Data Store: engines.json ยท projects.json ยท settings.json   โ”‚
โ”‚  Worker Threads: scan ยท size calculation                    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚                          โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Rust N-API Module  โ”‚   โ”‚  Rust Tracer (Windows only)     โ”‚
โ”‚  native/dist/*.node โ”‚   โ”‚  resources/unreal_launcher_     โ”‚
โ”‚  - scan_engines     โ”‚   โ”‚  tracer.exe                     โ”‚
โ”‚  - find_uproject    โ”‚   โ”‚  - Tracks engine/project usage  โ”‚
โ”‚  - get_folder_size  โ”‚   โ”‚  - Writes to Tracer/*.json      โ”‚
โ”‚  - git_status       โ”‚   โ”‚  - Runs detached in background  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Startup Sequence

  1. App launches โ†’ single instance lock acquired
  2. Chromium memory optimizations applied (V8 heap cap, disabled background networking)
  3. local-asset:// custom protocol registered (serves local files to renderer)
  4. Main window created with custom frameless titlebar
  5. IPC handlers registered across 7 modules
  6. Saved data loaded from %APPDATA%/Unreal Launcher/save/ (or platform equivalent)
  7. Tracer data merged if tracerMergeEnabled is set
  8. Renderer loads โ†’ splash screen shown โ†’ React app bootstraps
  9. Default route navigates to Engines page
  10. Background tasks deferred: native module warmup, tracer startup, update check

Scanning Flow

When you click Scan for engines or projects:

  1. Main process spawns a Worker Thread (off the main thread)
  2. Worker loads the Rust N-API native module
  3. Native module performs fast filesystem traversal
  4. Results returned to main process via worker.once('message')
  5. Tracer data merged into results (if enabled)
  6. Saved to engines.json / projects.json
  7. Renderer receives the array and updates the UI

Size Calculation Flow

Size calculation runs entirely in the background:

  1. Worker thread spawned per engine/project (or batch for all projects)
  2. Rust get_folder_size() walks the directory tree (skips .git, node_modules)
  3. Results pushed back to renderer via onSizeCalculated IPC event
  4. Cards update in-place without re-rendering the full list

Data Persistence

All data lives in Electron's userData directory:

Windows:  %APPDATA%\Unreal Launcher\
macOS:    ~/Library/Application Support/Unreal Launcher/
Linux:    ~/.config/Unreal Launcher/

Structure:
โ”œโ”€โ”€ save/
โ”‚   โ”œโ”€โ”€ engines.json           โ† saved engine list
โ”‚   โ”œโ”€โ”€ projects.json          โ† saved project list
โ”‚   โ”œโ”€โ”€ settings.json          โ† app settings + fab path
โ”‚   โ”œโ”€โ”€ engine-scan-paths.json โ† custom engine scan paths (Linux)
โ”‚   โ””โ”€โ”€ project-scan-paths.jsonโ† custom project scan paths (Linux)
โ””โ”€โ”€ Tracer/
    โ”œโ”€โ”€ engines.json           โ† tracer-collected engine data
    โ””โ”€โ”€ projects.json          โ† tracer-collected project data

On each scan, tracer data is merged with saved data. Tracer provides lastOpenedAt timestamps; saved data takes precedence for all other fields.


Tech Stack

Frontend

Library Version Purpose
React 19 UI framework
TypeScript 5.9 Type safety
Tailwind CSS 4 Styling
Zustand 5 State management (navigation)
Framer Motion 12 Animations
Lucide React 1.8 Icons
React Router 7 Page routing
React Window 2 Virtualized lists (large project sets)

Backend (Main Process)

Library Version Purpose
Electron 39 Desktop shell
Node.js 18+ Runtime
electron-updater 6.8 Auto-updates
discord-rpc 4.0 Rich presence

Build Tools

Tool Version Purpose
Vite 7 Bundler
electron-vite 5 Electron + Vite integration
electron-builder 26 Packaging & distribution
Prettier 3 Code formatting
ESLint 9 Linting

Native (Rust)

Crate Purpose
napi / napi-derive N-API bindings for Node.js
serde / serde_json JSON serialization

IPC Handler Reference

The main process exposes the following IPC channels to the renderer:

Engines

Channel Description
scan-engines Scan filesystem + registry + merge tracer data
select-engine-folder Open dialog, validate, add engine
launch-engine Spawn engine executable
delete-engine Remove from store
calculate-engine-size Background folder size
scan-marketplace-plugins List plugins in Engine/Plugins/Marketplace

Projects

Channel Description
scan-projects Find .uproject files + merge tracer data
select-project-folder Open dialog, batch import (max 20)
launch-project Open in editor
launch-project-game Launch in -game mode
open-directory Open folder in Explorer/Finder/File Manager
delete-project Remove from store
calculate-project-size Background folder size
calculate-all-project-sizes Batch size calculation with push events

Project Tools

Channel Description
project-read-log Tail latest .log file (64KB chunks)
project-git-status Read branch, remote URL from .git/
project-git-init git init + create UE .gitignore
project-read-file Read file content (config, uproject)
project-write-file Write file content with validation
open-terminal Launch terminal in project directory

Fab Marketplace

Channel Description
fab-get-default-path Find first existing Fab cache path
fab-select-folder Open dialog for custom Fab folder
fab-scan-folder Scan folder, extract asset metadata
fab-save-path Persist custom path to settings
fab-load-path Load saved Fab path

Tracer (Windows only)

Channel Description
tracer-get-startup Check Windows registry Run key
tracer-set-startup Enable/disable + registry sync + spawn
tracer-is-running Check via tasklist
tracer-get-data-dir Return tracer data directory
tracer-get-merge Get merge-on-scan setting
tracer-set-merge Set merge-on-scan setting
engines-get-registry Get registry scan setting
engines-set-registry Set registry scan setting

Updates

Channel Description
check-for-updates Trigger electron-updater check
download-update Download pending update
install-update Quit and install
get-app-version Return current version string
check-github-version Compare against latest GitHub release

Window & System

Channel Description
window-minimize Minimize window
window-maximize Maximize / restore window
window-close Quit app
window-is-maximized Check window state
open-external Open HTTPS URL in browser
send-discord-webhook Proxy webhook with multipart support
get-native-status Check if Rust module loaded
clear-app-data Wipe engines, projects, settings
clear-tracer-data Wipe tracer data

Project Structure

UnrealLauncher/
โ”œโ”€โ”€ docker/                    # Docker build files
โ”‚   โ”œโ”€โ”€ Dockerfile
โ”‚   โ”œโ”€โ”€ .dockerignore
โ”‚   โ”œโ”€โ”€ build-docker.sh
โ”‚   โ””โ”€โ”€ build-docker.ps1
โ”œโ”€โ”€ docs/                      # Documentation
โ”‚   โ”œโ”€โ”€ BUILD.md
โ”‚   โ”œโ”€โ”€ BUILD_INSTRUCTIONS.md
โ”‚   โ”œโ”€โ”€ CONTRIBUTING.md
โ”‚   โ”œโ”€โ”€ CODE_OF_CONDUCT.md
โ”‚   โ”œโ”€โ”€ DONATE.md
โ”‚   โ”œโ”€โ”€ SECURITY.md
โ”‚   โ””โ”€โ”€ OPTIMIZATION_REPORT.md
โ”œโ”€โ”€ native/                    # Rust N-API native module
โ”‚   โ”œโ”€โ”€ src/lib.rs             # scan_engines, find_uproject, get_folder_size, git_status
โ”‚   โ”œโ”€โ”€ Cargo.toml
โ”‚   โ””โ”€โ”€ dist/                  # Compiled .node binary
โ”œโ”€โ”€ resources/                 # Packaged assets
โ”‚   โ”œโ”€โ”€ icon.ico / icon.png
โ”‚   โ””โ”€โ”€ unreal_launcher_tracer.exe (Windows only)
โ”œโ”€โ”€ scripts/                   # Build helper scripts
โ”‚   โ”œโ”€โ”€ build-admin.ps1        # Windows โ€” elevate + build:win
โ”‚   โ”œโ”€โ”€ build-installer.bat    # Windows โ€” admin installer build
โ”‚   โ”œโ”€โ”€ build-installer.ps1    # Windows โ€” PowerShell installer build
โ”‚   โ””โ”€โ”€ build-linux.sh         # Linux โ€” AppImage + deb build
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ main/                  # Electron main process
โ”‚   โ”‚   โ”œโ”€โ”€ index.ts           # Entry, protocol, single instance, memory opts
โ”‚   โ”‚   โ”œโ”€โ”€ ipcHandlers.ts     # Registers all IPC modules
โ”‚   โ”‚   โ”œโ”€โ”€ store.ts           # Data persistence (engines/projects/settings)
โ”‚   โ”‚   โ”œโ”€โ”€ storeTracerMerge.ts
โ”‚   โ”‚   โ”œโ”€โ”€ updater.ts         # electron-updater setup
โ”‚   โ”‚   โ”œโ”€โ”€ types.ts           # Shared TypeScript types
โ”‚   โ”‚   โ”œโ”€โ”€ logger.ts          # Logging system
โ”‚   โ”‚   โ”œโ”€โ”€ discordPresence.ts # Discord Rich Presence
โ”‚   โ”‚   โ”œโ”€โ”€ ipc/               # IPC handler modules (25+ files)
โ”‚   โ”‚   โ”œโ”€โ”€ utils/             # Utility modules (15+ files)
โ”‚   โ”‚   โ”œโ”€โ”€ scanWorker/        # Worker thread implementations
โ”‚   โ”‚   โ””โ”€โ”€ window/            # Window management (4 files)
โ”‚   โ”œโ”€โ”€ preload/
โ”‚   โ”‚   โ”œโ”€โ”€ index.ts           # contextBridge โ€” exposes electronAPI to renderer
โ”‚   โ”‚   โ””โ”€โ”€ index.d.ts         # Type definitions for window.electronAPI
โ”‚   โ””โ”€โ”€ renderer/
โ”‚       โ””โ”€โ”€ src/
โ”‚           โ”œโ”€โ”€ App.tsx
โ”‚           โ”œโ”€โ”€ main.tsx
โ”‚           โ”œโ”€โ”€ pages/         # Engines, Projects, Settings, About
โ”‚           โ”œโ”€โ”€ components/    # Organized by feature (engines/, projects/, settings/, layout/, ui/)
โ”‚           โ”œโ”€โ”€ hooks/         # Custom React hooks
โ”‚           โ”œโ”€โ”€ types/         # Renderer-side type aliases
โ”‚           โ”œโ”€โ”€ store/         # Zustand state management
โ”‚           โ””โ”€โ”€ utils/         # Theme, settings, asset resolution
โ”œโ”€โ”€ tracer/                    # Rust tracer source (Windows only)
โ”œโ”€โ”€ build/                     # electron-builder assets (icons, entitlements)
โ”œโ”€โ”€ CHANGELOG.md
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ LICENSE
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ electron-builder.yml
โ”œโ”€โ”€ electron.vite.config.ts
โ””โ”€โ”€ tsconfig*.json

Quick Start

Prerequisites

  • Node.js 18+ (check with node --version)
  • Rust toolchain (for native modules & tracer) โ€” Install
  • npm (comes with Node.js)

Setup

git clone https://github.com/NeelFrostrain/UnrealLauncher.git
cd UnrealLauncher
npm install

Development

npm run dev

The app will launch in development mode with hot reload enabled.

Preview Production Build

npm run start

Building

Full Production Build

# Build tracer + app for current platform
npm run build

Platform-Specific Packages

npm run build:win    # Windows NSIS installer (.exe)
npm run build:mac    # macOS DMG (.dmg) โ€” Coming Soon
npm run build:linux  # Linux AppImage + DEB

Unpacked Build (for testing)

npm run build:unpack

Build Status Badges:

Build Tests TypeScript ESLint

See docs/BUILD.md for the full build guide including native modules and the Rust tracer.


Available Scripts

Command Description
npm run dev Start in development mode
npm run start Preview production build
npm run build Build for current platform
npm run build:win Windows installer
npm run build:mac macOS package
npm run build:linux Linux package
npm run build:native Build Rust N-API native module
npm run build:tracer Build Rust tracer executable
npm run typecheck TypeScript type checking
npm run lint Run ESLint
npm run lint:fix Fix ESLint issues
npm run format Format with Prettier
npm run clean Remove build artifacts

Distribution

Platform Format Architecture Status Badge
Windows NSIS installer .exe x64 Stable Windows
macOS .dmg x64, arm64 Coming Soon macOS
Linux AppImage x64 Stable Linux
Linux .deb x64 Stable Debian

Published to GitHub Releases: NeelFrostrain/UnrealLauncher/releases


Contributing

See docs/CONTRIBUTING.md for the full guide.

Quick Contribution Steps

  1. Fork the repo
  2. Create a feature branch: git checkout -b feature/your-feature
  3. Run type checking and linting: npm run typecheck && npm run lint
  4. Commit your changes
  5. Open a pull request

License

Copyright (c) 2026 NeelFrostrain. All rights reserved.

This project uses a proprietary license. You may download and run the compiled binary for personal use, but you may not copy, modify, redistribute, or use the source code in your own projects.

See LICENSE for full terms.


Support & Community

Channel Contact & Support Link
๐Ÿ› Bug Reports GitHub Issues
๐Ÿ’ฌ Q&A & Ideas GitHub Discussions
๐ŸŽฎ Community Discord
โœ‰๏ธ Direct Mail Email
โ˜• Support Me Ko-fi

Community Badges:

Discord GitHub Discussions Ko-fi


Acknowledgments

Built with by Neel Frostrain

Special thanks to the Unreal Engine community and all contributors who have helped shape this project.


About

A lightweight Electron desktop app for discovering, launching, and managing Unreal Engine installations and projects.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors