A reusable, config-driven app launcher skeleton that runs as a stripped-down desktop window via Electron.
I am very proud of this basic but yet very useful applications. It looks, feels and works very well.
| File | Purpose |
|---|---|
index.html |
All UI structure — header, tile grid, settings modal |
styles/*.css |
Visual styling split by concern (theme, layout, components, utilities, animations) |
app.js |
All launcher logic — rendering, app editor, theming |
config.json |
Default apps and theme loaded at startup |
main.js |
Electron host — creates the window, handles IPC |
preload.js |
Secure bridge between the window and Electron |
package.json |
Project scripts and dependencies |
Make sure you have Node.js installed, then from the C:\Forge folder:
# First time only — install Electron
npm install
# Launch the app
npm startClick Settings in the top-right corner of the launcher window to:
- Rename the launcher title and subtitle
- Change the four theme colors live — Background 1, Background 2, Accent, and Text
- Add, edit, or delete app tiles — including a native file Browse button for local executables
Settings (including your apps and colors) are saved automatically when you click Save.
config.json is loaded once when the launcher starts. It defines the default title, theme, and app list before any saved settings are applied.
{
"title": "My Launcher",
"subtitle": "My custom subtitle",
"theme": {
"bg1": "#07111f",
"bg2": "#0d2238",
"accent": "#f5a524",
"text": "#e8f3ff"
}
}bg1/bg2— the two gradient background colors (hex)accent— used for glows, pills, and highlightstext— main readable text color
{
"name": "YouTube",
"type": "web",
"url": "https://youtube.com",
"icon": "📺",
"description": "Watch videos"
}{
"name": "Notepad",
"type": "local",
"path": "C:/Windows/System32/notepad.exe",
"args": "",
"icon": "📝",
"description": "Text editor"
}Arguments are optional — leave args as "" if not needed.
{
"name": "Counter-Strike 2",
"type": "steam",
"id": "730",
"icon": "🎯",
"description": "Tactical shooter"
}Find a Steam App ID at steamdb.info.
The CSS variables in styles/theme.css control the overall look:
:root {
--bg-1: #07111f;
--bg-2: #0d2238;
--glass: rgba(255, 255, 255, 0.07);
--line: rgba(255, 255, 255, 0.18);
--text: #e8f3ff;
--text-soft: #b8cbdd;
--accent: #f5a524;
--accent-2: #ffe3a2;
}These are overridden at runtime by any colors you save in Settings, but editing them here changes the hard defaults.
Open main.js and adjust the values in createMainWindow():
mainWindow = new BrowserWindow({
width: 1120, // starting width in pixels
height: 760, // starting height in pixels
minWidth: 760,
minHeight: 520,
...
});To package the launcher as a standalone Windows executable, install electron-builder:
npm install --save-dev electron-builderAdd a build script to package.json:
"scripts": {
"start": "electron .",
"build": "electron-builder --win --dir"
}Add a build config block to package.json:
"build": {
"appId": "com.forge.launcher",
"productName": "Forge Launcher",
"win": {
"target": "nsis"
},
"files": [
"index.html",
"styles/",
"app.js",
"main.js",
"preload.js",
"config.json"
]
}Then run:
npm run buildThe output installer will be in the dist/ folder.
- In the desktop Electron app, saved settings are encrypted and stored under the app's user data directory.
- Browser-only fallback mode uses
localStorage. - To fully reset in desktop mode, clear the app data folder under
%APPDATA%for Forge. - The Browse button in the App Editor only works in the Electron desktop build — not in a plain browser tab.