API reference
Full method-by-method reference for window.Electron, grouped by module — one page per src/main/*.ts file, matching how the source itself is organized (see Architecture). Read this page first: it explains the throwing vs .safe pattern every single method in this API follows, then indexes every module.
If you just want task-oriented examples and the React hooks, see Usage instead — this section is for looking up an exact method signature once you already know what you need.
How every call is built
electron/preload.ts calls createElectronBridge() (src/preload/index.ts), which builds one raw object first — every wrapped method on it resolves to an IpcResult<T> ({ ok: true, data } or { ok: false, error }) and never throws. That raw object is exposed as-is at window.Electron.safe.*. The default, throwing window.Electron.* surface is then derived from that same raw object by two small helpers in src/preload/ipc.ts:
// src/preload/ipc.ts (verbatim)
export function unwrap<T>(promise: Promise<IpcResult<T>>): Promise<T> {
return promise.then((result) => {
if (!result.ok) throw new IpcError(result.error.code, result.error.message);
return result.data;
});
}
export function unwrapAll<T extends object>(ns: T): UnwrapIpcResult<T> {
/* wraps every method on ns with unwrap() */
}
export function unwrapSome<T extends object>(ns: T, keys: readonly (keyof T)[]): UnwrapIpcResult<T> {
/* wraps only the named methods; everything else on ns is copied through as-is */
}
No method body is ever hand-duplicated between the two flavors — window.Electron.clipboard.readText() and window.Electron.safe.clipboard.readText() call the exact same main-process handler over the exact same IPC channel (clipboard:readText). The only difference is what happens to a { ok: false } result on the way back to your code:
window.Electron.<ns>.<method>() |
window.Electron.safe.<ns>.<method>() |
|
|---|---|---|
| Success | resolves with the data directly | resolves { ok: true, data } |
| Failure | throws an IpcError (.code, .message) |
resolves { ok: false, error: { code, message } } — never throws |
Use the throwing default when a failure is exceptional and you're fine with a try/catch (or letting it bubble to an error boundary / onElectronError). Reach for .safe when a failure is a normal branch you want to check inline — the two most common cases are NOT_CONFIGURED (a feature you haven't turned on yet) and UNSUPPORTED_OS (a platform-gated method):
// Throwing default — try/catch
import { isIpcError } from '@devioarts/electron';
try {
await window.Electron.autoLaunch.setEnabled(true);
} catch (e) {
if (isIpcError(e) && e.code === 'UNSUPPORTED_OS') return; // expected on Linux
throw e;
}
// .safe mirror — no try/catch, just check result.ok
const result = await window.Electron.safe.autoLaunch.setEnabled(true);
if (!result.ok) {
if (result.error.code === 'UNSUPPORTED_OS') return; // expected on Linux
console.error(result.error.message);
}
Both forms are always available side by side — .safe is not a config flag or a different bridge, it's the same window.Electron object with a safe property hanging off it.
Not every method has a .safe counterpart
A handful of methods are plain event subscriptions or fire-and-forget calls that can never fail in a way worth reporting — they have no IpcResult, and therefore no .safe variant, because there is nothing to unwrap either way. Calling them is inherently "safe": onDeepLink, onShortcut, onMenuAction, onPowerMonitorEvent, onScreenEvent, onElectronError, onAppStateChange, and updater.quitAndInstall(). These exist only on the default window.Electron.* surface (updater.on() is the one exception — see the Updater page — it's also mirrored onto .safe.updater.on() as the literal same function, since it never throws either).
Per-namespace .safe coverage
Some namespaces are fully wrapped (every method has a .safe twin); some are partially wrapped (the namespace mixes request/response methods with an on() event subscriber — only the request/response methods have a .safe twin, since subscribers never throw to begin with):
| Namespace | .safe coverage |
Methods without a .safe twin |
|---|---|---|
Flat top-level (window control, app info, badge, progress bar, file drag, power monitor idle state, power save blocker, screen queries, registerShortcut/unregisterShortcut, showContextMenu) |
Full | — |
updater |
Partial | quitAndInstall() (fire-and-forget), on() (subscription, but mirrored onto .safe unchanged) |
dialogs |
Full | — |
secureStorage |
Full | — |
protocols |
Full | — |
session |
Full | — |
downloads |
Partial | on() |
print |
Full | — |
desktopCapture |
Full | — |
autoLaunch |
Full | — |
nativeTheme |
Partial | onUpdated() |
windows |
Full | — |
externalCommands |
Partial | onOutput(), onExit() |
clipboard |
Full | — |
notifications |
Partial | on() |
systemPreferences |
Full | — |
crashReporter |
Full | — |
utilityProcess |
Partial | onMessage(), onExit() |
Filesystem (plugin) |
Full | — |
Preferences (plugin) |
Full | — |
Network (plugin) |
Partial | on() |
FileViewer (plugin) |
Full | — |
PrivacyScreen (plugin) |
Full | — |
Deep link / shortcuts events / menu actions / power monitor events / screen events / app state / errors (onDeepLink, onShortcut, onMenuAction, onPowerMonitorEvent, onScreenEvent, onAppStateChange, onElectronError) |
None — pure event subscriptions, not part of .safe at all |
all of them |
Error codes
Every IpcError (thrown) or IpcResult.error (from .safe) carries a machine-readable code: IpcErrorCode:
| Code | Meaning |
|---|---|
VALIDATION |
The call's arguments failed a check (bad shape, disallowed value, argument not in an allowlist). |
NOT_CONFIGURED |
The feature exists on the bridge but is off — the matching electron.config.ts key isn't enabled, or the alias/task isn't declared. |
RUNTIME |
The underlying operation failed at run time (process spawn failed, file operation errored, ...). |
UNSUPPORTED_OS |
The method is gated to specific platforms and the current OS isn't one of them (e.g. autoLaunch on Linux). |
FORBIDDEN |
The IPC sender-trust check rejected the calling frame. Should not happen from the app's own main window under normal operation — see Architecture: IPC trust model. |
UNKNOWN |
An unclassified failure, typically an unexpected exception caught by trustedIpcHandleSafe()'s catch-all. |
Modules
| Page | Bridge surface | Channel prefix | Source |
|---|---|---|---|
| System & window | Flat top-level: quit, minimize, ..., getAppVersion, getDeviceId, setBadgeCount, setProgressBar, startFileDrag, onAppStateChange |
system:* |
src/main/system.ts |
| Managed windows | windows.* |
windows:* |
src/main/windows.ts |
| Updater | updater.* |
updater:* |
src/main/updater.ts |
| Dialogs | dialogs.* |
dialogs:* |
src/main/dialogs.ts |
| Secure storage | secureStorage.* |
secureStorage:* |
src/main/secure-storage.ts |
| Protocols | protocols.* |
protocol:* |
src/main/protocol.ts |
| Session | session.* |
session:* |
src/main/session.ts |
| Downloads | downloads.* |
downloads:* |
src/main/downloads.ts |
print.* |
print:* |
src/main/print.ts |
|
| Desktop capture | desktopCapture.* |
desktopCapture:* |
src/main/desktop-capture.ts |
| Auto launch | autoLaunch.* |
autoLaunch:* |
src/main/auto-launch.ts |
| Native theme | nativeTheme.* |
nativeTheme:* |
src/main/native-theme.ts |
| External commands | externalCommands.* |
externalCommands:* |
src/main/external-commands.ts |
| Clipboard | clipboard.* |
clipboard:* |
src/main/clipboard.ts |
| Notifications | notifications.* |
notifications:* |
src/main/notifications.ts |
| System preferences | systemPreferences.* |
systemPreferences:* |
src/main/system-preferences.ts |
| Crash reporter | crashReporter.* |
crashReporter:* |
src/main/crash-reporter.ts |
| Utility process | utilityProcess.* |
utilityProcess:* |
src/main/utility-process.ts |
| Power | flat: getPowerMonitorIdleState, ..., onPowerMonitorEvent |
powerMonitor:*, powerSaveBlocker:* |
src/main/power-monitor.ts, src/main/power-save-blocker.ts |
| Screen | flat: getAllDisplays, ..., onScreenEvent |
screen:* |
src/main/screen.ts |
| Shortcuts | flat: registerShortcut, unregisterShortcut, onShortcut |
shortcuts:* |
src/main/shortcuts.ts |
| Menu | flat: showContextMenu, onMenuAction |
menu:* |
src/main/menu.ts |
| Deep linking | flat: onDeepLink |
(native URL scheme, not IPC) | src/main/deep-link.ts |
| Errors | flat: onElectronError |
electronError |
src/main/process-guardian.ts |
| Plugins: Built-in plugins | Filesystem.*, Preferences.*, Network.*, FileViewer.*, PrivacyScreen.* |
plugin:<Name>:* |
src/plugins/* |
Next: Usage for the React hooks and extending the bridge, or Configuration for what to set in electron.config.ts to unlock the opt-in modules above.