Electron Game Updater is an application built with Electron and React, designed to simplify the process of installing and updating games on Windows. This application features support for multiple games, automatic updates, and seamless patching through compressed files.
- Supports multiple games in one launcher
- Portable
.exefor easy distribution - Automatically updates game files and itself
- 7zip integration
- Custom game launch commands with parameters
- Multi-language support (English, Portuguese, Taiwan Chinese)
- Voice pack selection for games that support it
- Per-game maintenance mode to disable individual games during updates
- Smooth progress bars with exponential smoothing
- Real-time download statistics (speed, time remaining, file size)
- Per-game settings (language, voice pack) with persistent storage
The application downloads and extracts the latest game files or patches from hosted URLs, comparing versions defined in a JSON configuration file. It auto-updates the games as well as the launcher itself.
Note: The diagram below is a simplified version of the application’s workflow.
- Node.js: Make sure you have Node.js installed. The highest supported version is
16.20.2. You can download it here.
The application requires a hosted JSON file that defines the games, their versions, and URLs for updates.
Example of a JSON file:
{
"launcherVer": 2,
"launcherUrl": "https://your-server.com/launcher.exe",
"games": [
{
"name": "game1",
"startCmd": "start game1.exe param1 param2",
"clientVer": 1,
"clientUrl": "https://your-server.com/game1-client.7z",
"patchUrls": [
"https://your-server.com/game1-patch1.7z",
"https://your-server.com/game1-patch2.7z"
],
"maintenance": false,
"voicePacks": [
{
"value": "EN",
"label": "English"
},
{
"value": "PT",
"label": "Português"
},
{
"value": "KR",
"label": "한국어 음성"
}
]
},
{
"name": "game2",
"startCmd": "start game2.exe paramA paramB",
"clientVer": 1,
"clientUrl": "https://your-server.com/game2-client.7z",
"patchUrls": [],
"maintenance": true
}
]
}-
launcherVer: Version of the launcher.
-
games: Array of games with their respective launch commands, version numbers, and URLs for the client and patches.
-
client: When you upload a new client, increment the
clientVerby 1 and update theclientUrlif necessary. Note that when a new client is uploaded,patchUrlsshould be reset to an empty array, indicating that there are no patches associated with the new client version. -
patch:
- Use an array called
patchUrls, where each URL points to an individual patch file (e.g.,"https://your-server.com/game1-patch1.7z"). - To apply incremental updates, ensure that each new patch file is appended to
patchUrlsin the correct order. For example, if there are three patches available,patchUrlsshould contain links togame1-patch1.7z,game1-patch2.7z, andgame1-patch3.7z. - If the array is empty, no patch will be applied.
- Use an array called
-
maintenance: (Optional) Set to
trueto put a specific game in maintenance mode, disabling only that game. -
voicePacks: (Optional) Array of voice pack options for the game. Each voice pack should have:
- value: The code used in the game's launch command (e.g., "EN", "PT", "KR")
- label: The display name shown in the UI (e.g., "English", "Português", "한국어 음성")
-
The launcher supports dynamic language and voice pack selection:
- Language Selection: Users can choose between English, Portuguese, and Taiwan Chinese
- Voice Pack Selection: Games can offer multiple voice pack options (only shown if
voicePacksarray is present) - EGULANG Parameter: The launcher automatically replaces
EGULANGplaceholder instartCmdwith the combined language and voice pack parameter:- Language only:
"EN"(when no voice pack is selected) - Language + Voice Pack:
"EN_KR"(when voice pack is selected) - Example:
"start game.exe EGULANG"becomes"start game.exe EN_KR"
- Language only:
- Per-Game Settings: Each game remembers its own language and voice pack selection
- UI Translation: The launcher UI automatically translates based on the selected language
git clone https://github.com/gustavokei/electron-game-updater.gitEdit the defaultConfig object in src/constants/index.js to point to your hosted JSON file:
export const DEFAULT_CONFIG = {
updaterUrl: "https://your-server.com/your-json-file.json", // Your JSON URL goes here
launcherVer: 1,
selectedGame: "",
games: [],
};Images and icons are located in src/renderer/assets. Customize these assets to fit your games.
Adjust the background-image properties of .game-icon and .game-patcher in src/renderer/styles.scss to use the same game.name property from your JSON configuration.
The launcher supports multiple languages. Edit the translation files in src/locales/:
en.json- English translationspt.json- Portuguese translationstw.json- Taiwan Chinese translations
Add new languages by creating additional JSON files and updating src/utils/i18n.js.
Navigate to the project's root directory and run:
npm installTo create the executable:
npm run buildThis will generate a launcher.exe in the ./dist directory.
For development and testing, you can run the project in development mode with hot reload:
npm run devIn development mode, the application ignores the launcherVer checking, which allows for easier testing without needing to increment the version for each change.
Users are encouraged to open issues for any bugs or feature requests and to submit pull requests for improvements. Your contributions help make this project better for everyone!
This project is licensed under the MIT License, which allows you to use, modify, and distribute the software freely, as long as the original license and copyright notice are included in any copies or substantial portions of the software.

