A modular Electron desktop app designed for rapid prototyping and collaboration.
- Clean login screen with customizable logo
- Modular landing page where each feature is its own folder
- Automatically generated buttons based on folder names or
button_*.jsfiles - Coordinate-driven grid layout (e.g.
n_m_<feature-name>for row n, column m) - Template folder (
1_3_template_button) with built-in Back/landing logic - Elegant, minimal white UI with subtle gradients
This guide helps you set up and run the app locally, even if you are new to Node.js or Electron.
You will need Node.js (v18 or later) and npm (Node package manager). You can check if they're already installed:
node -v
npm -vIf either command is not found, install them:
macOS (recommended via Homebrew):
brew install nodesudo apt update
sudo apt install nodejs npmπ‘ Tip: You can also use nvm to manage multiple Node.js versions if you're working on different projects.
git clone https://github.com/Summoner-Network/summoner-desktop.git
cd summoner-desktopInstall all project dependencies and dev-only tools:
npm install && npm install glob electron-builder --save-devπ‘ glob is used by
scripts/inject-alert.jsto automatically find and modify allrenderer/**/index.htmlpages before launching or packaging the app.
A build-time injection step has been added to insert a custom alert modal into every page, along with a setup hook that prepares user folders on first launch. Make sure your "scripts" section in package.json includes the following:
(Click to expand) JSON format:
Dev mode (launches Electron):
npm startBuild installers (output in dist/):
npm run buildThen install by opening the generated file for your platform:
- macOS:
dist/*.dmgor*.pkg - Windows:
dist/*.exe - Linux:
dist/*.AppImageor*.deb/*.rpm(depending on config)
Tip
npm run pack builds an unpacked app directory in dist/ without creating an installer.
(Click to expand) Tree structure of the project:
renderer
βββ common
β βββ custom-alert.html
β βββ form-builder.js
β βββ overlay.js
β βββ scanner.js
βββ features
β βββ 1_1_import_agent
β β βββ 1_1_button_use_github.js # JS-based button at row 1, col 1
β β βββ 1_2_button_add_locally.js
β β βββ 1_3_back # βBackβ folder with empty index.html
β β β βββ index.html
β β βββ index.html # hosting landing page
β β βββ landing.js
β βββ 1_2_host_server
β β βββ 1_1_button_generate_and_run.js
β β βββ 1_2_NAT_setup
β β β βββ 1_1_button_open_router.js
β β β βββ 1_2_back
β β β β βββ index.html
β β β βββ index.html
β β β βββ landing.js
β β βββ 1_3_back
β β β βββ index.html
β β βββ index.html
β β βββ landing.js
β β βββ setup.js
β βββ 1_3_newsfeed
β β βββ 1_1_back
β β β βββ index.html
β β βββ index.html
β β βββ landing.js
β βββ 2_1_build_agent
β β βββ 1_1_button_generate.js
β β βββ 1_2_button_recombine.js
β β βββ 1_3_button_optimize.js
β β βββ 1_4_back
β β β βββ index.html
β β βββ index.html
β β βββ landing.js
β β βββ list_agents.js
β βββ 2_2_management
β β βββ 1_1_back
β β β βββ index.html
β β βββ index.html
β β βββ landing.js
β βββ 2_3_settings
β β βββ 1_1_button_reset_app.js
β β βββ 1_2_back
β β β βββ index.html
β β βββ index.html
β β βββ landing.js
β βββ 3_1_launch_agent
β β βββ 1_1_button_launch.js
β β βββ 1_2_back
β β β βββ index.html
β β βββ index.html
β β βββ landing.js
β β βββ list_agents.js
β βββ 3_2_performance
β β βββ 1_1_back
β β β βββ index.html
β β βββ index.html
β β βββ landing.js
β βββ 3_3_quit # quit button
β βββ index.html
βββ landing
β βββ landing.html
β βββ landing.js
βββ login
β βββ 1_1_button_login.js
β βββ index.html
β βββ landing.js
β βββ login.html
βββ style.css
main.js
package.json
-
Folder β Button
Any directory namedn_m_<feature-name>/under
renderer/features/produces a grid button at row n, column m, labeled<feature-name>.
Clicking it loadsn_m_<feature-name>/index.html. -
JS File β Button
Any file namedn_m_button_<action>.jsin a feature folder produces a button at row n, column m, labeled
<action>.
Clicking itrequire()s and runs that script. -
Back Button
To get a Back button, create a foldern_m_back/with an empty
index.htmlinside. Clicking it returns to the main landing page.
The1_3_template_buttonfolder shows this pattern in action.
- Create
renderer/features/n_m_<feature-name>/ - Add an
index.html(andlanding.jsif needed). - Restart the app so that you can see your new button appear at (n,m).
- Place
n_m_button_<action>.jsin any feature folder. - On launch, a button labeled
<action>appears at (n,m) and executes your code.
- Shared styles in
renderer/style.css - Assets (logo, demo.gif) in
assets/ - White + light-gray palette, soft shadows, and Inter or system-sans fonts
- Frontend only; no backend or database.
- Navigation entirely via static HTML, JS, and Electron.
- Designed to mock up UX before wiring in real logic.
Questions or suggestions? Open an issue or ping the team on Discord or Reddit.


{ "name": "summoner-desktop", // ... "description": "Desktop GUI for Summoner", "main": "main.js", // ... "scripts": { "inject-alert": "node scripts/inject-alert.js", "start": "npm run build:dev", "build": "npm run dist", "build:dev": "npm run inject-alert && electron .", "pack": "npm run inject-alert && electron-builder --dir", "dist": "npm run inject-alert && electron-builder --publish never" }, "build": { // ... "productName": "Summoner Desktop", "asar": true, "files": [ "**/*", "!scripts/**" ], "extraResources": [ { "from": "scripts", "to": "scripts", "filter": [ "**/*.sh" ] } ], "mac": { "icon": "assets/icons/logo_mage.icns", "target": [ "dmg", "zip" ] }, "win": { "icon": "assets/icons/logo_mage.ico", "target": [ "nsis" ] }, "linux": { "icon": "assets/icons/logo_mage.png", "target": [ "AppImage", "deb" ] } }, "devDependencies": { "electron": "^35.1.5", "electron-builder": "^26.0.12", "glob": "^11.0.2" } }