electron-react-window allows you to open and manage multiple Electron windows while using a single renderer/index.html
. This keeps your project maintainable and makes creating new windows simple.
🔹 Key Benefits:
- Uses a single renderer for multiple windows.
- Simplifies window management.
- Currently supports React.
npm install @gridminder/electron-react-window
The WindowRenderer
component manages multiple Electron windows.
import {
WindowRenderer,
openWindow,
closeWindow,
} from '@gridminder/electron-react-window/renderer';
function App() {
return (
<SomeProviders>
<WindowRenderer isMain>
<h1>Main Window</h1>
<button
onClick={() =>
openWindow('settings', { width: 200, height: 300, x: 20, y: 10 })
}
>
Open Settings
</button>
</WindowRenderer>
<WindowRenderer id="settings">
<h1>Config Window</h1>
<button onClick={() => closeWindow('settings')}>Close</button>
</WindowRenderer>
</SomeProviders>
);
}
The preload script helps bridge the main and renderer processes.
import { preloadMultiWindowManger } from '@gridminder/electron-react-window/preload';
preloadMultiWindowManger();
The setupWindowRouter
function initializes window management.
import { app, BrowserWindow, shell } from 'electron';
import { setupWindowRouter } from '@gridminder/electron-react-window/main';
import { join } from 'path';
app.whenReady().then(() => {
const mainWindow = new BrowserWindow({
webPreferences: {
preload: join(__dirname, '../preload/index.js'),
},
});
setupWindowRouter({
preload: join(__dirname, '../preload/index.js'),
mainWindow,
setupWindowHooks: (browserWindow) => {
browserWindow.webContents.setWindowOpenHandler((details) => {
shell.openExternal(details.url);
return { action: 'deny' };
});
if (process.env['ELECTRON_RENDERER_URL']) {
browserWindow.loadURL(process.env['ELECTRON_RENDERER_URL']);
} else {
browserWindow.loadFile(join(__dirname, '../renderer/index.html'));
}
},
});
});
A React component for managing windows.
Prop | Type | Description |
---|---|---|
isMain |
boolean |
Defines the main Electron window. |
id |
string |
Unique identifier for the window. |
Opens a new window with the specified id
.
openWindow('settings', { width: 100, height: 200, x: 100, y: 50 });
Closes the window with the given id
.
closeWindow('settings');
Contributions are welcome! Please open an issue or submit a pull request.
MIT License.