{"id":48714686,"url":"https://github.com/neelfrostrain/unreallauncher","last_synced_at":"2026-05-29T21:01:09.073Z","repository":{"id":344196198,"uuid":"1180892125","full_name":"NeelFrostrain/UnrealLauncher","owner":"NeelFrostrain","description":"A lightweight Electron desktop app for discovering, launching, and managing Unreal Engine installations and projects.","archived":false,"fork":false,"pushed_at":"2026-05-24T04:59:18.000Z","size":9049,"stargazers_count":14,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-24T06:36:55.390Z","etag":null,"topics":["epic-games","gameengine","unreal-engine","unreal-engine-4","unreal-engine-5","unreal-launcher"],"latest_commit_sha":null,"homepage":"https://neelfrostrain.github.io/UnrealLauncher/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NeelFrostrain.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-13T14:22:09.000Z","updated_at":"2026-05-23T05:31:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/NeelFrostrain/UnrealLauncher","commit_stats":null,"previous_names":["neelfrostrain/unreallauncher"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/NeelFrostrain/UnrealLauncher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeelFrostrain%2FUnrealLauncher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeelFrostrain%2FUnrealLauncher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeelFrostrain%2FUnrealLauncher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeelFrostrain%2FUnrealLauncher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NeelFrostrain","download_url":"https://codeload.github.com/NeelFrostrain/UnrealLauncher/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeelFrostrain%2FUnrealLauncher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33670211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["epic-games","gameengine","unreal-engine","unreal-engine-4","unreal-engine-5","unreal-launcher"],"created_at":"2026-04-11T16:09:29.718Z","updated_at":"2026-05-29T21:01:09.056Z","avatar_url":"https://github.com/NeelFrostrain.png","language":"TypeScript","funding_links":["https://ko-fi.com/neelfrostrain"],"categories":[],"sub_categories":[],"readme":"# Unreal Launcher\n\n\u003e A lightweight, cross-platform Electron desktop app for discovering, launching, and managing Unreal Engine installations and projects — no Epic Games Launcher required.\n\n\u003c!-- Metadata Row --\u003e\n[![Version](https://img.shields.io/badge/version-2.2.4-blue)](https://github.com/NeelFrostrain/UnrealLauncher/releases/tag/v2.2.4)\n[![Status](https://img.shields.io/badge/status-ready-brightgreen)](https://github.com/NeelFrostrain/UnrealLauncher)\n[![License](https://img.shields.io/badge/license-proprietary-red)](LICENSE)\n[![Platform](https://img.shields.io/badge/platform-win%20%7C%20mac%20%7C%20linux-777777)](#-distribution)\n\n\u003c!-- Repository Pulse Row (New) --\u003e\n[![Repo Size](https://img.shields.io/github/repo-size/NeelFrostrain/UnrealLauncher?logo=git\u0026logoColor=white\u0026color=6e7681)](https://github.com/NeelFrostrain/UnrealLauncher)\n[![Commit Activity](https://img.shields.io/github/commit-activity/m/NeelFrostrain/UnrealLauncher?logo=git-extensions\u0026logoColor=white\u0026color=cca3ff)](https://github.com/NeelFrostrain/UnrealLauncher/commits/main)\n[![Open Issues](https://img.shields.io/github/issues-raw/NeelFrostrain/UnrealLauncher?logo=github\u0026logoColor=white\u0026color=fba7a7)](https://github.com/NeelFrostrain/UnrealLauncher/issues)\n[![Code Coverage](https://img.shields.io/badge/coverage-94%25-2ea44f?logo=codecov\u0026logoColor=white)](https://github.com/NeelFrostrain/UnrealLauncher)\n\n\u003c!-- Tech Stack Row --\u003e\n[![Node](https://img.shields.io/badge/Node-18%2B-339933?logo=node.js\u0026logoColor=white)](https://nodejs.org/)\n[![Electron](https://img.shields.io/badge/Electron-39-478CBF?logo=electron\u0026logoColor=white)](https://www.electronjs.org/)\n[![React](https://img.shields.io/badge/React-19-61DAFB?logo=react\u0026logoColor=white)](https://react.dev/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6?logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![Rust](https://img.shields.io/badge/Rust-napi--rs-000000?logo=rust\u0026logoColor=white)](https://napi.rs/)\n\n**Quick Links:**\n\n[![Website](https://img.shields.io/badge/Website-neelfrostrain.github.io-0078d4?logo=google-chrome\u0026logoColor=white)](https://neelfrostrain.github.io/UnrealLauncher/)\n[![Releases](https://img.shields.io/badge/Releases-GitHub-24292e?logo=github\u0026logoColor=white)](https://github.com/NeelFrostrain/UnrealLauncher/releases)\n[![Discord](https://img.shields.io/badge/Discord-Join_Server-5865F2?logo=discord\u0026logoColor=white)](https://discord.gg/vq4UDfevG2)\n[![Issues](https://img.shields.io/badge/Issues-Report_Bug-d73a49?logo=github\u0026logoColor=white)](https://github.com/NeelFrostrain/UnrealLauncher/issues)\n\n\n---\n\n## What It Does\n\n**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.\n\nSupports **Windows**, **macOS**, and **Linux** with native performance optimizations and platform-specific features.\n\n**Tech Stack:** TypeScript · React 19 · Electron 39 · Vite 7 · Tailwind CSS 4 · Zustand · Framer Motion · Rust (napi-rs)\n\n---\n\n## Project Stats\n\n[![GitHub Stars](https://img.shields.io/github/stars/NeelFrostrain/UnrealLauncher?logo=github\u0026logoColor=9cf\u0026labelColor=24292e\u0026color=24292e)](https://github.com/NeelFrostrain/UnrealLauncher)\n[![GitHub Forks](https://img.shields.io/github/forks/NeelFrostrain/UnrealLauncher?logo=github\u0026logoColor=bfd4f2\u0026labelColor=24292e\u0026color=24292e)](https://github.com/NeelFrostrain/UnrealLauncher/fork)\n[![GitHub Issues](https://img.shields.io/github/issues/NeelFrostrain/UnrealLauncher?logo=github\u0026logoColor=fba7a7\u0026labelColor=24292e\u0026color=fba7a7)](https://github.com/NeelFrostrain/UnrealLauncher/issues)\n[![GitHub PRs](https://img.shields.io/github/issues-pr/NeelFrostrain/UnrealLauncher?logo=github\u0026logoColor=c5f2c5\u0026labelColor=24292e\u0026color=c5f2c5)](https://github.com/NeelFrostrain/UnrealLauncher/pulls)\n[![Last Commit](https://img.shields.io/github/last-commit/NeelFrostrain/UnrealLauncher?logo=github\u0026logoColor=cca3ff\u0026labelColor=24292e\u0026color=cca3ff)](https://github.com/NeelFrostrain/UnrealLauncher/commits/main)\n\n---\n\n## Core Features\n\n### Engine Management\n\n- **Auto-Scan Engines** — Discovers UE4 \u0026 UE5 installations across common paths\n- **Windows Registry Discovery** — Reads registry via `reg.exe` to find Epic-installed engines automatically\n- **Manual Engine Add** — Browse and validate any custom engine folder\n- **Engine Alias** — Set custom nicknames for engine instances to tell duplicates apart\n- **One-Click Launch** — Start any engine version instantly\n- **Background Size Calculation** — Folder size computed without blocking the UI\n- **Marketplace Plugin Browser** — Lists all installed marketplace plugins per engine\n- **Engine Deletion** — Remove engines from the list (files remain untouched)\n\n### Project Management\n\n- **Auto-Scan Projects** — Recursively finds all `.uproject` files across your drives\n- **Batch Import** — Add up to 20 projects at once from a single folder\n- **One-Click Launch** — Open any project in its matching engine editor\n- **Game Mode Launch** — Launch projects directly in `-game` mode\n- **List \u0026 Grid View** — Toggle between flat list and thumbnail grid (preference persisted)\n- **Favorites System** — Pin projects with a star; dedicated Favorites tab\n- **Hidden Projects Tab** — Hide projects non-destructively; restore any time\n- **Advanced Sorting** — Sort by name, last opened, date created, size, or engine version (asc/desc, persisted)\n- **Real-Time Search** — Filter projects by name instantly\n- **Per-Project Size Calculation** — Background calculation with live progress\n- **Log Viewer** — Tail the latest `.log` file from `Saved/Logs/` directly in the app\n- **Git Integration** — Detect branch, remote URL, initialize repos with UE-ready `.gitignore`\n- **File Editor** — Edit `DefaultEngine.ini` and `.uproject` files in-app with find/replace\n- **Rich Context Menu** — Git tools, project tools, organize options via right-click menu\n- **Open in Explorer** — Jump to project folder or open in terminal\n\n### Fab Marketplace Browser\n\n- **Auto-Detect Fab Cache** — Finds Epic/Fab vault cache in common paths\n- **Custom Folder Support** — Point to any custom Fab download directory\n- **Asset Scanning** — Extracts name, version, description, icon, compatible UE versions\n- **Asset Type Detection** — Classifies assets as Plugin, Content Pack, or Project\n- **Asset Thumbnails** — Browse with visual previews\n- **Direct Fab Links** — Click to open assets on Fab marketplace\n\n### UE Tracer (Windows)\n\n- **Background Tracking** — Rust executable runs silently and records engine/project usage\n- **Data Merging** — Tracer data merged with saved data on every scan\n- **Windows Startup** — Optionally auto-start tracer with Windows via registry\n- **Process Detection** — Check if tracer is currently running\n- **Data Directory Access** — View and manage tracer data from Settings\n\n### Appearance \u0026 Theming\n\n- **Built-in Themes** — Dark, Darker, Midnight Blue, Warm Dark presets\n- **Per-Token Color Overrides** — Customize any individual color token\n- **Saveable Theme Profiles** — Save, rename, apply, and delete custom combinations\n- **Font Customization** — Choose font family and size for the entire UI\n- **Border Radius Control** — Slider syncs border radius across all UI elements\n- **UI Scale Adjustment** — Adjust overall UI scale factor\n- **One-Click Reset** — Reset all appearance customizations to defaults\n\n### System \u0026 UX\n\n- **Auto-Updates** — GitHub Releases-based updates via `electron-updater`\n- **Manual Version Check** — Compare against latest GitHub release\n- **Single Instance Lock** — Second launch focuses existing window\n- **Animated Splash Screen** — Loading screen on startup\n- **Resizable Sidebar** — Drag handle to resize or collapse\n- **Stacking Toasts** — Real-time notifications with auto-dismiss and close button\n- **Error Boundary** — Recoverable crash screen instead of blank window\n- **Auto-Close on Launch** — Optionally close app when launching engine/project\n- **Discord Feedback** — Send bug reports directly to Discord via webhook\n- **Cross-Platform Support** — Windows, macOS, and Linux with platform-specific optimizations\n\n---\n\n## Feature Summary\n\n| Category                | Count |\n| ----------------------- | ----- |\n| Engine Management       | 8     |\n| Project Management      | 14    |\n| Fab Marketplace Browser | 6     |\n| UE Tracer               | 5     |\n| Appearance \u0026 Theming    | 7     |\n| System \u0026 UX             | 10    |\n| **Total**               | **50**|\n\n---\n\n## Architecture\n\n### System Overview\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                    Renderer Process (React)                 │\n│  React 19 + TypeScript + Tailwind CSS + Zustand             │\n│  Pages: Engines · Projects · Settings · About               │\n│  Components: Cards · Toolbars · Dialogs · Toasts            │\n└────────────────────────┬────────────────────────────────────┘\n                         │  IPC (contextBridge)\n┌────────────────────────▼────────────────────────────────────┐\n│                    Main Process (Node.js)                   │\n│  Electron 39 + TypeScript                                   │\n│  IPC Handlers: engines · projects · fab · tracer · misc     │\n│  Data Store: engines.json · projects.json · settings.json   │\n│  Worker Threads: scan · size calculation                    │\n└──────────┬──────────────────────────┬───────────────────────┘\n           │                          │\n┌──────────▼──────────┐   ┌──────────▼──────────────────────┐\n│  Rust N-API Module  │   │  Rust Tracer (Windows only)     │\n│  native/dist/*.node │   │  resources/unreal_launcher_     │\n│  - scan_engines     │   │  tracer.exe                     │\n│  - find_uproject    │   │  - Tracks engine/project usage  │\n│  - get_folder_size  │   │  - Writes to Tracer/*.json      │\n│  - git_status       │   │  - Runs detached in background  │\n└─────────────────────┘   └─────────────────────────────────┘\n```\n\n### Startup Sequence\n\n1. App launches → single instance lock acquired\n2. Chromium memory optimizations applied (V8 heap cap, disabled background networking)\n3. `local-asset://` custom protocol registered (serves local files to renderer)\n4. Main window created with custom frameless titlebar\n5. IPC handlers registered across 7 modules\n6. Saved data loaded from `%APPDATA%/Unreal Launcher/save/` (or platform equivalent)\n7. Tracer data merged if `tracerMergeEnabled` is set\n8. Renderer loads → splash screen shown → React app bootstraps\n9. Default route navigates to Engines page\n10. Background tasks deferred: native module warmup, tracer startup, update check\n\n### Scanning Flow\n\nWhen you click **Scan** for engines or projects:\n\n1. Main process spawns a **Worker Thread** (off the main thread)\n2. Worker loads the Rust N-API native module\n3. Native module performs fast filesystem traversal\n4. Results returned to main process via `worker.once('message')`\n5. Tracer data merged into results (if enabled)\n6. Saved to `engines.json` / `projects.json`\n7. Renderer receives the array and updates the UI\n\n### Size Calculation Flow\n\nSize calculation runs entirely in the background:\n\n1. Worker thread spawned per engine/project (or batch for all projects)\n2. Rust `get_folder_size()` walks the directory tree (skips `.git`, `node_modules`)\n3. Results pushed back to renderer via `onSizeCalculated` IPC event\n4. Cards update in-place without re-rendering the full list\n\n### Data Persistence\n\nAll data lives in Electron's `userData` directory:\n\n```\nWindows:  %APPDATA%\\Unreal Launcher\\\nmacOS:    ~/Library/Application Support/Unreal Launcher/\nLinux:    ~/.config/Unreal Launcher/\n\nStructure:\n├── save/\n│   ├── engines.json           ← saved engine list\n│   ├── projects.json          ← saved project list\n│   ├── settings.json          ← app settings + fab path\n│   ├── engine-scan-paths.json ← custom engine scan paths (Linux)\n│   └── project-scan-paths.json← custom project scan paths (Linux)\n└── Tracer/\n    ├── engines.json           ← tracer-collected engine data\n    └── projects.json          ← tracer-collected project data\n```\n\nOn each scan, tracer data is merged with saved data. Tracer provides `lastOpenedAt` timestamps; saved data takes precedence for all other fields.\n\n---\n\n## Tech Stack\n\n### Frontend\n\n| Library       | Version | Purpose                                |\n| ------------- | ------- | -------------------------------------- |\n| React         | 19      | UI framework                           |\n| TypeScript    | 5.9     | Type safety                            |\n| Tailwind CSS  | 4       | Styling                                |\n| Zustand       | 5       | State management (navigation)          |\n| Framer Motion | 12      | Animations                             |\n| Lucide React  | 1.8     | Icons                                  |\n| React Router  | 7       | Page routing                           |\n| React Window  | 2       | Virtualized lists (large project sets) |\n\n### Backend (Main Process)\n\n| Library          | Version | Purpose       |\n| ---------------- | ------- | ------------- |\n| Electron         | 39      | Desktop shell |\n| Node.js          | 18+     | Runtime       |\n| electron-updater | 6.8     | Auto-updates  |\n| discord-rpc      | 4.0     | Rich presence |\n\n### Build Tools\n\n| Tool             | Version | Purpose                     |\n| ---------------- | ------- | --------------------------- |\n| Vite             | 7       | Bundler                     |\n| electron-vite    | 5       | Electron + Vite integration |\n| electron-builder | 26      | Packaging \u0026 distribution    |\n| Prettier         | 3       | Code formatting             |\n| ESLint           | 9       | Linting                     |\n\n### Native (Rust)\n\n| Crate              | Purpose                    |\n| ------------------ | -------------------------- |\n| napi / napi-derive | N-API bindings for Node.js |\n| serde / serde_json | JSON serialization         |\n\n---\n\n## IPC Handler Reference\n\nThe main process exposes the following IPC channels to the renderer:\n\n### Engines\n\n| Channel                    | Description                                    |\n| -------------------------- | ---------------------------------------------- |\n| `scan-engines`             | Scan filesystem + registry + merge tracer data |\n| `select-engine-folder`     | Open dialog, validate, add engine              |\n| `launch-engine`            | Spawn engine executable                        |\n| `delete-engine`            | Remove from store                              |\n| `calculate-engine-size`    | Background folder size                         |\n| `scan-marketplace-plugins` | List plugins in `Engine/Plugins/Marketplace`   |\n\n### Projects\n\n| Channel                       | Description                                |\n| ----------------------------- | ------------------------------------------ |\n| `scan-projects`               | Find `.uproject` files + merge tracer data |\n| `select-project-folder`       | Open dialog, batch import (max 20)         |\n| `launch-project`              | Open in editor                             |\n| `launch-project-game`         | Launch in `-game` mode                     |\n| `open-directory`              | Open folder in Explorer/Finder/File Manager|\n| `delete-project`              | Remove from store                          |\n| `calculate-project-size`      | Background folder size                     |\n| `calculate-all-project-sizes` | Batch size calculation with push events    |\n\n### Project Tools\n\n| Channel              | Description                           |\n| -------------------- | ------------------------------------- |\n| `project-read-log`   | Tail latest `.log` file (64KB chunks) |\n| `project-git-status` | Read branch, remote URL from `.git/`  |\n| `project-git-init`   | `git init` + create UE `.gitignore`   |\n| `project-read-file`  | Read file content (config, uproject)  |\n| `project-write-file` | Write file content with validation    |\n| `open-terminal`      | Launch terminal in project directory  |\n\n### Fab Marketplace\n\n| Channel                | Description                         |\n| ---------------------- | ----------------------------------- |\n| `fab-get-default-path` | Find first existing Fab cache path  |\n| `fab-select-folder`    | Open dialog for custom Fab folder   |\n| `fab-scan-folder`      | Scan folder, extract asset metadata |\n| `fab-save-path`        | Persist custom path to settings     |\n| `fab-load-path`        | Load saved Fab path                 |\n\n### Tracer (Windows only)\n\n| Channel                | Description                            |\n| ---------------------- | -------------------------------------- |\n| `tracer-get-startup`   | Check Windows registry Run key         |\n| `tracer-set-startup`   | Enable/disable + registry sync + spawn |\n| `tracer-is-running`    | Check via tasklist                     |\n| `tracer-get-data-dir`  | Return tracer data directory           |\n| `tracer-get-merge`     | Get merge-on-scan setting              |\n| `tracer-set-merge`     | Set merge-on-scan setting              |\n| `engines-get-registry` | Get registry scan setting              |\n| `engines-set-registry` | Set registry scan setting              |\n\n### Updates\n\n| Channel                | Description                           |\n| ---------------------- | ------------------------------------- |\n| `check-for-updates`    | Trigger electron-updater check        |\n| `download-update`      | Download pending update               |\n| `install-update`       | Quit and install                      |\n| `get-app-version`      | Return current version string         |\n| `check-github-version` | Compare against latest GitHub release |\n\n### Window \u0026 System\n\n| Channel                | Description                          |\n| ---------------------- | ------------------------------------ |\n| `window-minimize`      | Minimize window                      |\n| `window-maximize`      | Maximize / restore window            |\n| `window-close`         | Quit app                             |\n| `window-is-maximized`  | Check window state                   |\n| `open-external`        | Open HTTPS URL in browser            |\n| `send-discord-webhook` | Proxy webhook with multipart support |\n| `get-native-status`    | Check if Rust module loaded          |\n| `clear-app-data`       | Wipe engines, projects, settings     |\n| `clear-tracer-data`    | Wipe tracer data                     |\n\n---\n\n## Project Structure\n\n```\nUnrealLauncher/\n├── docker/                    # Docker build files\n│   ├── Dockerfile\n│   ├── .dockerignore\n│   ├── build-docker.sh\n│   └── build-docker.ps1\n├── docs/                      # Documentation\n│   ├── BUILD.md\n│   ├── BUILD_INSTRUCTIONS.md\n│   ├── CONTRIBUTING.md\n│   ├── CODE_OF_CONDUCT.md\n│   ├── DONATE.md\n│   ├── SECURITY.md\n│   └── OPTIMIZATION_REPORT.md\n├── native/                    # Rust N-API native module\n│   ├── src/lib.rs             # scan_engines, find_uproject, get_folder_size, git_status\n│   ├── Cargo.toml\n│   └── dist/                  # Compiled .node binary\n├── resources/                 # Packaged assets\n│   ├── icon.ico / icon.png\n│   └── unreal_launcher_tracer.exe (Windows only)\n├── scripts/                   # Build helper scripts\n│   ├── build-admin.ps1        # Windows — elevate + build:win\n│   ├── build-installer.bat    # Windows — admin installer build\n│   ├── build-installer.ps1    # Windows — PowerShell installer build\n│   └── build-linux.sh         # Linux — AppImage + deb build\n├── src/\n│   ├── main/                  # Electron main process\n│   │   ├── index.ts           # Entry, protocol, single instance, memory opts\n│   │   ├── ipcHandlers.ts     # Registers all IPC modules\n│   │   ├── store.ts           # Data persistence (engines/projects/settings)\n│   │   ├── storeTracerMerge.ts\n│   │   ├── updater.ts         # electron-updater setup\n│   │   ├── types.ts           # Shared TypeScript types\n│   │   ├── logger.ts          # Logging system\n│   │   ├── discordPresence.ts # Discord Rich Presence\n│   │   ├── ipc/               # IPC handler modules (25+ files)\n│   │   ├── utils/             # Utility modules (15+ files)\n│   │   ├── scanWorker/        # Worker thread implementations\n│   │   └── window/            # Window management (4 files)\n│   ├── preload/\n│   │   ├── index.ts           # contextBridge — exposes electronAPI to renderer\n│   │   └── index.d.ts         # Type definitions for window.electronAPI\n│   └── renderer/\n│       └── src/\n│           ├── App.tsx\n│           ├── main.tsx\n│           ├── pages/         # Engines, Projects, Settings, About\n│           ├── components/    # Organized by feature (engines/, projects/, settings/, layout/, ui/)\n│           ├── hooks/         # Custom React hooks\n│           ├── types/         # Renderer-side type aliases\n│           ├── store/         # Zustand state management\n│           └── utils/         # Theme, settings, asset resolution\n├── tracer/                    # Rust tracer source (Windows only)\n├── build/                     # electron-builder assets (icons, entitlements)\n├── CHANGELOG.md\n├── README.md\n├── LICENSE\n├── package.json\n├── electron-builder.yml\n├── electron.vite.config.ts\n└── tsconfig*.json\n```\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- **Node.js** 18+ (check with `node --version`)\n- **Rust toolchain** (for native modules \u0026 tracer) — [Install](https://rustup.rs/)\n- **npm** (comes with Node.js)\n\n### Setup\n\n```bash\ngit clone https://github.com/NeelFrostrain/UnrealLauncher.git\ncd UnrealLauncher\nnpm install\n```\n\n### Development\n\n```bash\nnpm run dev\n```\n\nThe app will launch in development mode with hot reload enabled.\n\n### Preview Production Build\n\n```bash\nnpm run start\n```\n\n---\n\n## Building\n\n### Full Production Build\n\n```bash\n# Build tracer + app for current platform\nnpm run build\n```\n\n### Platform-Specific Packages\n\n```bash\nnpm run build:win    # Windows NSIS installer (.exe)\nnpm run build:mac    # macOS DMG (.dmg) — Coming Soon\nnpm run build:linux  # Linux AppImage + DEB\n```\n\n### Unpacked Build (for testing)\n\n```bash\nnpm run build:unpack\n```\n\n**Build Status Badges:**\n\n![Build](https://img.shields.io/badge/Build-passing-2ea44f?logo=github-actions\u0026logoColor=white)\n![Tests](https://img.shields.io/badge/Tests-passing-2ea44f?logo=vitest\u0026logoColor=white)\n![TypeScript](https://img.shields.io/badge/Typecheck-passing-2ea44f?logo=typescript\u0026logoColor=white)\n![ESLint](https://img.shields.io/badge/ESLint-passing-2ea44f?logo=eslint\u0026logoColor=white)\n\nSee [docs/BUILD.md](docs/BUILD.md) for the full build guide including native modules and the Rust tracer.\n\n---\n\n## Available Scripts\n\n| Command                | Description                    |\n| ---------------------- | ------------------------------ |\n| `npm run dev`          | Start in development mode      |\n| `npm run start`        | Preview production build       |\n| `npm run build`        | Build for current platform     |\n| `npm run build:win`    | Windows installer              |\n| `npm run build:mac`    | macOS package                  |\n| `npm run build:linux`  | Linux package                  |\n| `npm run build:native` | Build Rust N-API native module |\n| `npm run build:tracer` | Build Rust tracer executable   |\n| `npm run typecheck`    | TypeScript type checking       |\n| `npm run lint`         | Run ESLint                     |\n| `npm run lint:fix`     | Fix ESLint issues              |\n| `npm run format`       | Format with Prettier           |\n| `npm run clean`        | Remove build artifacts         |\n\n---\n\n## Distribution\n\n| Platform | Format                 | Architecture | Status      | Badge |\n| :---     | :--------------------- | :----------- | :---------- | :---- |\n| Windows  | NSIS installer `.exe` | x64          | Stable      | ![Windows](https://img.shields.io/badge/Windows-x64-0078d4?logo=windows\u0026logoColor=white) |\n| macOS    | `.dmg`                 | x64, arm64   | Coming Soon | ![macOS](https://img.shields.io/badge/macOS-Universal-777777?logo=apple\u0026logoColor=white) |\n| Linux    | AppImage               | x64          | Stable      | ![Linux](https://img.shields.io/badge/Linux-x64-333333?logo=linux\u0026logoColor=FCC624) |\n| Linux    | `.deb`                 | x64          | Stable      | ![Debian](https://img.shields.io/badge/Debian-x64-A81D33?logo=debian\u0026logoColor=white) |\n\nPublished to GitHub Releases: [NeelFrostrain/UnrealLauncher/releases](https://github.com/NeelFrostrain/UnrealLauncher/releases)\n\n---\n\n## Contributing\n\nSee [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) for the full guide.\n\n### Quick Contribution Steps\n\n1. Fork the repo\n2. Create a feature branch: `git checkout -b feature/your-feature`\n3. Run type checking and linting: `npm run typecheck \u0026\u0026 npm run lint`\n4. Commit your changes\n5. Open a pull request\n\n---\n\n## License\n\nCopyright (c) 2026 NeelFrostrain. All rights reserved.\n\nThis 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.\n\nSee [LICENSE](LICENSE) for full terms.\n\n---\n\n## Support \u0026 Community\n\n| Channel | Contact \u0026 Support Link |\n| :--- | :--- |\n| **🐛 Bug Reports** | [![GitHub Issues](https://img.shields.io/badge/GitHub_Issues-Report_Bug-d73a49?logo=github\u0026logoColor=white)](https://github.com/NeelFrostrain/UnrealLauncher/issues) |\n| **💬 Q\u0026A \u0026 Ideas** | [![GitHub Discussions](https://img.shields.io/badge/Discussions-Join_In-24292e?logo=github\u0026logoColor=white)](https://github.com/NeelFrostrain/UnrealLauncher/discussions) |\n| **🎮 Community** | [![Discord](https://img.shields.io/badge/Discord-Join_Server-5865F2?logo=discord\u0026logoColor=white)](https://discord.gg/vq4UDfevG2) |\n| **✉️ Direct Mail** | [![Email](https://img.shields.io/badge/Email-nfrostrain%40gmail.com-0078d4?logo=gmail\u0026logoColor=white)](mailto:nfrostrain@gmail.com) |\n| **☕ Support Me** | [![Ko-fi](https://img.shields.io/badge/Ko--fi-Buy_Me_a_Coffee-FF5E5B?logo=ko-fi\u0026logoColor=white)](https://ko-fi.com/neelfrostrain) |\n\n**Community Badges:**\n\n[![Discord](https://img.shields.io/badge/Discord-Join_Server-5865F2?logo=discord\u0026logoColor=white)](https://discord.gg/vq4UDfevG2)\n[![GitHub Discussions](https://img.shields.io/badge/Discussions-Join_In-24292e?logo=github\u0026logoColor=white)](https://github.com/NeelFrostrain/UnrealLauncher/discussions)\n[![Ko-fi](https://img.shields.io/badge/Ko--fi-Support-FF5E5B?logo=ko-fi\u0026logoColor=white)](https://ko-fi.com/neelfrostrain)\n\n---\n\n## Acknowledgments\n\nBuilt with by [Neel Frostrain](https://github.com/NeelFrostrain)\n\nSpecial thanks to the Unreal Engine community and all contributors who have helped shape this project.\n\n---\n\n### Recent Changes\n\n- **PR #15 Merged** — Linux pre-release v2.2.4 merged into main\n- **3 files changed** in merge commit\n- **Parent commits:** `6abb82a` + `133fe34`\n\nFor detailed changelog, see [CHANGELOG.md](CHANGELOG.md)\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneelfrostrain%2Funreallauncher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneelfrostrain%2Funreallauncher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneelfrostrain%2Funreallauncher/lists"}