Skip to content
Documentation
Getting Started
Create a Interprocess

Create a interprocess

Let's build something simple that can show you some of the interprocess' power!

First, create the following folders at src:

  • shared/ipcs (this folder structure is optional)

Then, create a file named as index.ts in the ipcs folder with the following content:

import { createInterprocess } from 'interprocess'
 
export const { ipcMain, ipcRenderer, exposeApiToGlobalWindow } =
  createInterprocess({
    main: {
      async getPing(_, data: 'ping') {
        const message = `from renderer: ${data} on main process`
 
        console.log(message)
 
        return message
      },
    },
 
    renderer: {
      async getPong(_, data: 'pong') {
        const message = `from main: ${data} on renderer process`
 
        console.log(message)
 
        return message
      },
    },
  })

On the main process:

import { BrowserWindow, app } from 'electron'
 
import { ipcMain } from 'shared/ipcs'
 
const { handle, invoke } = ipcMain
 
app.whenReady().then(() => {
  const mainWindow = new BrowserWindow({
    webPreferences: {
      preload: path.join(__dirname, '../preload/index.js'),
      sandbox: false, // sandbox must be false
    },
  })
 
  handle.getPing()
 
  mainWindow.webContents.on('dom-ready', () => {
    invoke.getPong(mainWindow, 'pong')
  })
})

In the preload script:

import { exposeApiToGlobalWindow } from 'shared/ipcs'
 
const { key, api } = exposeApiToGlobalWindow({
  exposeAll: true, // expose handlers, invokers and removers
})
 
declare global {
  interface Window {
    [key]: typeof api
  }
}

On the renderer process:

const { invoke, handle } = window.api
 
invoke.getPing('ping')
handle.getPong()

This is a simple way to work with interprocess, but there's a lot of more cool features you can take advantage, like overrides, code splitting, invoker's response (for renderer and main process 🎉) and more. Keep reading the docs to get the knowledge to masterize interprocess!

Also, you can take a look the following examples: