eRPC Communication Guide
This skill provides mandatory instructions for implementing type-safe IPC using eRPC in this project.
1. Main Process Implementation
- Route Definition: Must use the project's provided router utility to define tRPC routes.
- Handler Initialization: Must use
createIPCHandlerfromerpc/mainto bind the router to Electron windows. - Context Injection: Should provide necessary instances (e.g.,
BrowserWindoworTray) throughcreateContext.
// Always initialize createIPCHandler within the app ready lifecycle
import { createIPCHandler } from 'erpc/main'
import { routers } from './rpcs'
createIPCHandler({
createContext: async () => ({ win: mainWindow, tray: appTray }),
router: routers,
windows: [mainWindow]
})
2. Preload Script Configuration
- Expose Bridge Interface: Must call
exposeElectronTRPC()provided byerpc/mainin the preload script. - Lifecycle: Should be called inside
process.once('loaded').
import { exposeElectronTRPC } from 'erpc/main'
process.once('loaded', () => {
exposeElectronTRPC()
})
3. Renderer Process Usage
- Client Creation: Create tRPC client using
ipcLinkfromerpc/renderer. - Type Safety: Always import
Routertype from main process to ensure complete end-to-end type safety.
import { createTRPCClient } from '@trpc/client'
import { ipcLink } from 'erpc/renderer'
import type { Router } from '@desktop/rpcs' // Import Router type from main process
export const trpc = createTRPCClient<Router>({
links: [ipcLink()]
})
4. Routes and Endpoints Best Practices
- Single Responsibility: Each route should correspond to a specific service in the main process (e.g.,
window,file,dialog). - Parameter Validation: It is strictly prohibited to write complex business logic in Router. Router is only responsible for validating input and output parameters; business logic must be delegated to Service (e.g., calling
WindowService.open()). - Type Reference: For complex object parameters, type definitions must be placed under the
packages/erpcpackage and shared between both ends, avoiding direct cross-package imports of entity logic.