Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions docs/Using/Custom_main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Using custom_main.js

This guide explains how to include and use a `custom_main.js` file in your Electron.NET application for advanced Electron/Node.js customization.

## Why use custom_main.js?

- Add custom Electron features (global shortcuts, tray icons, menus, etc.)
- Integrate Node.js modules (e.g., telemetry, OS APIs)
- Control startup logic (abort, environment checks)
- Set up IPC messaging or preload scripts

## Step-by-Step Process

### 1. Create the custom_main.js file

Place your custom logic in `electron/custom_main.js`:

```javascript
module.exports.onStartup = function(host) {
// Example: Register a global shortcut for opening dev tools
const { app, globalShortcut, BrowserWindow } = require('electron');
app.on('ready', () => {
const ret = globalShortcut.register('Control+Shift+I', () => {
BrowserWindow.getAllWindows().forEach(win => win.webContents.openDevTools());
console.log('Ctrl+Shift+I is pressed: DevTools opened!');
});
});
app.on('will-quit', () => {
globalShortcut.unregisterAll();
});
return true;
};
```

### 2. Configure your .csproj to copy custom_main.js to output

Add this to your `.csproj` file:

```xml
<ItemGroup>
<None Update="electron\custom_main.js">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>.electron\custom_main.js</TargetPath>
</None>
</ItemGroup>
```

### 3. Build and run your app

Use the standard build/run commands:

```powershell
dotnet build
dotnet run
```

Electron.NET will automatically load and execute your `custom_main.js` before initializing the .NET backend.

## Advanced Usage

Use environment variables to control features:

```javascript
const env = process.env.ASPNETCORE_ENVIRONMENT || 'Production';
if (env === 'Development') { /* enable dev features */ }
```

## Notes

- `custom_main.js` must use CommonJS syntax (`module.exports.onStartup = ...`).
- Place the file in your source directory and copy it to `.electron` using `.csproj`.
- Electron.NET will abort startup if `onStartup` returns `false`.

### Complete example is available here [ElectronNetSampleApp](https://github.com/niteshsinghal85/ElectronNetSampleApp)
1 change: 1 addition & 0 deletions docs/_Sidebar.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
- [Startup-Methods](Using/Startup-Methods.md)
- [Debugging](Using/Debugging.md)
- [Package Building](Using/Package-Building.md)
- [Custom Main](Using/Custom_main.md)

# API Reference

Expand Down
Loading