Build IPC for Electron with tRPC
- Expose APIs from Electron's main process to one or more render processes.
- Build fully type-safe IPC.
- Secure alternative to opening servers on localhost.
- Full support for queries, mutations, and subscriptions.
# Using pnpm
pnpm add electron-trpc
# Using yarn
yarn add electron-trpc
# Using npm
npm install --save electron-trpc
-
Add your tRPC router to the Electron main process using
createIPCHandler
:import { app } from 'electron'; import { createIPCHandler } from 'electron-trpc/main'; import { router } from './api'; app.on('ready', () => { const win = new BrowserWindow({ webPreferences: { // Replace this path with the path to your preload file (see next step) preload: 'path/to/preload.js', }, }); createIPCHandler({ router, windows: [win] }); });
-
Expose the IPC to the render process from the preload file:
import { exposeElectronTRPC } from 'electron-trpc/main'; process.once('loaded', async () => { exposeElectronTRPC(); });
Note:
electron-trpc
depends oncontextIsolation
being enabled, which is the default. -
When creating the client in the render process, use the
ipcLink
(instead of the HTTP or batch HTTP links):import { createTRPCProxyClient } from '@trpc/client'; import { ipcLink } from 'electron-trpc/renderer'; export const client = createTRPCProxyClient({ links: [ipcLink()], });
-
Now you can use the client in your render process as you normally would (e.g. using
@trpc/react
).