A lightweight Electron desktop app for discovering, launching, and managing Unreal Engine installations and projects — no Epic Games Launcher required.
Website
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.
Version: 2.0.1
Stack: TypeScript · React 19 · Electron 39 · Vite 7 · Tailwind CSS 4 · Zustand · Framer Motion · Rust (napi-rs)
Engine Management (7 features)
#
Feature
Description
1
Auto-Scan Engines
Discovers UE4 & UE5 installations across common paths (C:\Program Files\Epic Games, D:\Unreal, etc.)
2
Registry Discovery
Reads Windows registry to find Epic-installed engines automatically
3
Manual Engine Add
Browse and validate any custom engine folder via file dialog
4
One-Click Launch
Start any engine version instantly
5
Engine Size Calculation
Background worker calculates full folder size without blocking the UI
6
Marketplace Plugin Browser
Lists all installed marketplace plugins per engine version
7
Engine Deletion
Remove engines from the list (does not delete files)
Project Management (12 features)
#
Feature
Description
1
Auto-Scan Projects
Recursively finds all .uproject files across your drives
2
Batch Import
Add up to 20 projects at once from a single folder selection
3
One-Click Launch
Open any project in its matching engine editor
4
Game Mode Launch
Launch project directly in -game mode
5
List & Grid View
Toggle between flat list and thumbnail grid; preference is persisted
6
Favorites Tab
Pin projects with a star; dedicated Favorites tab
7
Recent Tab
Projects sorted by actual last-opened timestamp
8
Search / Filter
Real-time name search across all projects
9
Project Size Calculation
Per-project or batch background size calculation
10
Log Viewer
Tail the latest .log file from Saved/Logs/ directly in the app
11
Git Integration
Detect git status (branch, remote URL), initialize a new repo with a UE-ready .gitignore
12
Open in Explorer
Jump to any project folder in Windows Explorer
Fab Marketplace Browser (4 features)
#
Feature
Description
1
Auto-Detect Fab Cache
Finds Epic/Fab vault cache in common %APPDATA% and %LOCALAPPDATA% paths
2
Custom Folder
Point to any custom Fab download directory
3
Asset Scanning
Reads manifests and .uplugin/.uproject files to extract name, version, description, icon, compatible UE versions
4
Asset Type Detection
Classifies each asset as Plugin, Content Pack, or Project
#
Feature
Description
1
Background Tracking
Rust executable (unreal_launcher_tracer.exe) runs silently and records engine/project usage
2
Data Merging
Tracer data is merged with saved data on every scan, enriching lastOpenedAt timestamps
3
Windows Startup
Optionally register tracer in the Windows registry Run key to auto-start with Windows
4
Process Detection
Check if the tracer is currently running via tasklist
5
Data Directory Access
View and manage the tracer data folder from Settings
Appearance & Theming (7 features)
#
Feature
Description
1
Built-in Themes
Dark, Darker, Midnight Blue, Warm Dark presets
2
Per-Token Color Overrides
Override any individual color token in the theme
3
Saveable Profiles
Save, rename, apply, and delete custom theme combinations
4
Font Customization
Choose font family and font size for the entire UI
5
Border Radius Control
Slider syncs border radius across all cards and UI elements
6
UI Scale
Adjust the overall UI scale factor
7
Full Reset
One-click reset all appearance customizations to defaults
#
Feature
Description
1
Auto-Updates
GitHub Releases-based updates via electron-updater with download & install flow
2
Version Check
Manual GitHub version check against latest release
3
Single Instance Lock
Second launch focuses the existing window instead of opening a duplicate
4
Splash Screen
Animated loading screen on startup
5
Resizable Sidebar
Drag handle to resize or fully collapse the sidebar
6
Stacking Toasts
Real-time feedback notifications — auto-dismiss after 4s, max 5 visible, colored accent bar
7
Error Boundary
Recoverable crash screen instead of a blank white window
8
Auto-Close on Launch
Optionally close the app automatically when launching an engine or project
9
Discord Feedback
Send bug reports or feedback directly to Discord via webhook (with file attachments)
Category
Features
Engine Management
7
Project Management
12
Fab Marketplace Browser
4
UE Tracer
5
Appearance & Theming
7
System & UX
9
Total
44
┌─────────────────────────────────────────────────────────────┐
│ Renderer Process │
│ React 19 + TypeScript + Tailwind CSS + Zustand │
│ Pages: Engines · Projects · Settings · About │
│ Components: Cards · Toolbars · Dialogs · Toasts │
└────────────────────────┬────────────────────────────────────┘
│ contextBridge (IPC)
┌────────────────────────▼────────────────────────────────────┐
│ Main Process │
│ Electron 39 + Node.js │
│ IPC Handlers: engines · projects · fab · tracer · misc │
│ Store: engines.json · projects.json · settings.json │
│ Worker Threads: scan · size calculation │
└──────────┬──────────────────────────┬───────────────────────┘
│ │
┌──────────▼──────────┐ ┌──────────▼──────────────────────┐
│ Rust N-API Module │ │ Rust Tracer Executable │
│ 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 │
└─────────────────────┘ └──────────────────────────────────┘
App launches → single instance lock acquired
Chromium memory optimizations applied (V8 heap cap, disabled background networking)
local-asset:// custom protocol registered (serves local files to renderer)
Main window created with custom frameless titlebar
IPC handlers registered across 7 modules
Saved data loaded from %APPDATA%/Unreal Launcher/save/
Tracer data merged if tracerMergeEnabled is set
Renderer loads → splash screen shown → React app bootstraps
Default route navigates to Engines page
When you click Scan for engines or projects:
Main process spawns a Worker Thread (off the main thread)
Worker loads the Rust N-API native module
Native module performs fast filesystem traversal
Results returned to main process via worker.once('message')
Tracer data merged into results
Saved to engines.json / projects.json
Renderer receives the array and updates the UI
Size calculation runs entirely in the background:
Worker thread spawned per engine/project (or batch for all projects)
Rust get_folder_size() walks the directory tree (skips .git, node_modules)
Results pushed back to renderer via onSizeCalculated IPC event
Cards update in-place without re-rendering the full list
All data lives in Electron's userData directory:
%APPDATA%\Unreal Launcher\
├── save\
│ ├── engines.json ← saved engine list
│ ├── projects.json ← saved project list
│ └── settings.json ← app settings + fab path
└── 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.
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)
Library
Version
Purpose
Electron
39
Desktop shell
Node.js
18+
Runtime
electron-updater
6.8
Auto-updates
regedit
5.1
Windows registry access
Tool
Version
Purpose
Vite
7
Bundler
electron-vite
5
Electron + Vite integration
electron-builder
26
Packaging & distribution
Prettier
3
Code formatting
ESLint
9
Linting
Crate
Purpose
napi / napi-derive
N-API bindings for Node.js
serde / serde_json
JSON serialization
The main process exposes the following IPC channels to the renderer:
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
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
delete-project
Remove from store
calculate-project-size
Background folder size
calculate-all-project-sizes
Batch size calculation with push events
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
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
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
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
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
UnrealLauncher/
├── 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
├── 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
│ │ ├── utils.ts # Shared utilities
│ │ ├── window.ts # BrowserWindow creation & management
│ │ ├── types.ts # Shared TypeScript types
│ │ ├── scanWorker.ts # Worker thread entry point
│ │ ├── ipc/
│ │ │ ├── engines.ts # Engine IPC handlers
│ │ │ ├── projects.ts # Project IPC handlers
│ │ │ ├── projectTools.ts# Log viewer, git IPC handlers
│ │ │ ├── fab.ts # Fab marketplace IPC handlers
│ │ │ ├── fabScanner.ts # Fab asset scanning logic
│ │ │ ├── tracer.ts # Tracer IPC handlers
│ │ │ ├── updates.ts # Update IPC handlers
│ │ │ ├── misc.ts # Window, external links, discord
│ │ │ ├── workers.ts # Worker thread pool
│ │ │ └── scanWorkers.ts # Worker scripts (engine/project scan)
│ │ └── utils/
│ │ ├── engines.ts # Engine validation, gradient gen, registry
│ │ ├── folderOps.ts # Folder utilities
│ │ ├── native.ts # Rust module loader (lazy, with JS fallback)
│ │ └── projects.ts # Project utilities
│ ├── preload/
│ │ ├── index.ts # contextBridge — exposes electronAPI to renderer
│ │ └── index.d.ts # Type definitions for window.electronAPI
│ └── renderer/
│ └── src/
│ ├── App.tsx # Router setup (lazy-loaded pages)
│ ├── main.tsx # React entry point
│ ├── pages/
│ │ ├── EnginesPage.tsx
│ │ ├── ProjectsPage.tsx
│ │ ├── SettingsPage.tsx
│ │ └── AboutPage.tsx
│ ├── components/
│ │ ├── engines/ # EngineCard, FabTab, InstalledPluginsTab, ...
│ │ ├── projects/ # ProjectCard, ProjectCardGrid, ProjectLogDialog, ...
│ │ ├── settings/ # AppearanceSection, TracerSection, DataSection, ...
│ │ ├── layout/ # PageWrapper, sidebar
│ │ └── ui/ # ErrorBoundary, ToastContext, DropdownPortal
│ ├── hooks/
│ │ ├── useEngineActions.ts
│ │ ├── useProjectActions.ts
│ │ ├── useProjectFavorites.ts
│ │ ├── useProjectFilters.ts
│ │ ├── useGitStatus.ts
│ │ ├── useTracerSettings.ts
│ │ └── useUpdateCheck.ts
│ ├── store/ # Zustand stores
│ └── utils/ # ThemeContext, settings helpers, theme utils
├── electron.vite.config.ts
├── electron-builder.yml
├── package.json
└── BUILD.md
Node.js 18+
Rust toolchain (for native modules & tracer)
npm
git clone https://github.com/NeelFrostrain/UnrealLauncher.git
cd UnrealLauncher
npm install
# Full production build (tracer + app)
npm run build
# Platform packages
npm run build:win # Windows installer (.exe)
npm run build:mac # macOS (.dmg)
npm run build:linux # Linux (AppImage/DEB)
# Unpacked (no installer, useful for testing)
npm run build:unpack
See BUILD.md for the full build guide including native modules and the Rust tracer.
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 format
Format with Prettier
npm run clean
Remove build artifacts
Platform
Format
Architecture
Windows
NSIS installer .exe
x64
Windows
Unpacked dir
x64
macOS
.dmg
x64, arm64
Linux
AppImage
x64
Linux
.deb
x64
Published to GitHub Releases at: NeelFrostrain/UnrealLauncher
See CONTRIBUTING.md for the full guide.
Fork the repo
Create a branch: git checkout -b feature/your-feature
Run npm run typecheck && npm run lint before committing
Open a pull request
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.