Wondering what’s next for npm?Check out our public roadmap! »

    electron-better-ipc-ex
    TypeScript icon, indicating that this package has built-in type declarations

    1.1.1 • Public • Published

    electron-better-ipc Build Status

    Simplified IPC communication for Electron apps

    The biggest benefit of this module over the built-in IPC is that it enables you to send a message and get the response back in the same call. This would usually require multiple IPC subscriptions.

    You can use this module directly in both the main and renderer process.

    Install

    $ npm install electron-better-ipc
    

    Requires Electron 5 or later.

    Usage

    Using the built-in IPC

    Here, as an example, we use the built-in IPC to get an emoji by name in the renderer process from the main process. Notice how it requires coordinating multiple IPC subscriptions.

    Main
    const {ipcMain: ipc} = require('electron');
     
    ipc.on('get-emoji', async (event, emojiName) => {
        const emoji = await getEmoji(emojiName);
        event.sender.send('get-emoji-response', emoji);
    });
    Renderer
    const {ipcRenderer: ipc} = require('electron');
     
    ipc.on('get-emoji-response', (event, emoji) => {
        console.log(emoji);
        //=> '🦄'
    });
     
    ipc.send('get-emoji', 'unicorn');

    Using this module

    As you can see below, this module makes it much simpler to handle the communication. You no longer need multiple IPC subscriptions and you can just await the response in the same call.

    Main
    const {ipcMain: ipc} = require('electron-better-ipc');
     
    ipc.answerRenderer('get-emoji', async emojiName => {
        const emoji = await getEmoji(emojiName);
        return emoji;
    });
    Renderer
    const {ipcRenderer: ipc} = require('electron-better-ipc');
     
    (async () => {
        const emoji = await ipc.callMain('get-emoji', 'unicorn');
        console.log(emoji);
        //=> '🦄'
    })();

    Here we do the inverse of the above, we get an emoji by name in the main process from the renderer process:

    Renderer
    const {ipcRenderer: ipc} = require('electron-better-ipc');
     
    ipc.answerMain('get-emoji', async emojiName => {
        const emoji = await getEmoji(emojiName);
        return emoji;
    });
    Main
    const {ipcMain: ipc} = require('electron-better-ipc');
     
    (async () => {
        const emoji = await ipc.callFocusedRenderer('get-emoji', 'unicorn');
        console.log(emoji);
        //=> '🦄'
    })();

    API

    The module exports ipcMain and ipcRenderer objects which enhance the built-in ipc module with some added methods, so you can use them as a replacement for electron.ipcMain/electron.ipcRenderer.

    Main process

    ipcMain.callRenderer(browserWindow, channel, data?)

    Send a message to the given window.

    In the renderer process, use ipcRenderer.answerMain to reply to this message.

    Returns a Promise<unknown> with the reply from the renderer process.

    browserWindow

    Type: BrowserWindow

    The window to send the message to.

    channel

    Type: string

    The channel to send the message on.

    data

    Type: unknown

    The data to send to the receiver.

    ipcMain.callFocusedRenderer(channel, data?)

    Send a message to the focused window, as determined by electron.BrowserWindow.getFocusedWindow.

    In the renderer process, use ipcRenderer.answerMain to reply to this message.

    Returns a Promise<unknown> with the reply from the renderer process.

    channel

    Type: string

    The channel to send the message on.

    data

    Type: unknown

    The data to send to the receiver.

    ipcMain.answerRenderer(channel, callback)

    This method listens for a message from ipcRenderer.callMain defined in a renderer process and replies back.

    Returns a function, that when called, removes the listener.

    channel

    Type: string

    The channel to send the message on.

    callback(data?, browserWindow)

    Type: Function | AsyncFunction

    The return value is sent back to the ipcRenderer.callMain in the renderer process.

    ipcMain.answerRenderer(browserWindow, channel, callback)

    This method listens for a message from ipcRenderer.callMain defined in the given BrowserWindow's renderer process and replies back.

    Returns a function, that when called, removes the listener.

    browserWindow

    Type: BrowserWindow

    The window for which to expect the message.

    channel

    Type: string

    The channel to send the message on.

    callback(data?, browserWindow)

    Type: Function | AsyncFunction

    The return value is sent back to the ipcRenderer.callMain in the renderer process.

    ipcMain.sendToRenderers(channel, data?)

    Send a message to all renderer processes (windows).

    channel

    Type: string

    The channel to send the message on.

    data

    Type: unknown

    The data to send to the receiver.

    Renderer process

    ipcRenderer.callMain(channel, data?)

    Send a message to the main process.

    In the main process, use ipcMain.answerRenderer to reply to this message.

    Returns a Promise<unknown> with the reply from the main process.

    channel

    Type: string

    The channel to send the message on.

    data

    Type: unknown

    The data to send to the receiver.

    ipcRenderer.answerMain(channel, callback)

    This method listens for a message from ipcMain.callRenderer defined in the main process and replies back.

    Returns a function, that when called, removes the listener.

    channel

    Type: string

    The channel to send the message on.

    callback(data?)

    Type: Function | AsyncFunction

    The return value is sent back to the ipcMain.callRenderer in the main process.

    Related

    Install

    npm i electron-better-ipc-ex

    DownloadsWeekly Downloads

    3

    Version

    1.1.1

    License

    MIT

    Unpacked Size

    18.3 kB

    Total Files

    10

    Last publish

    Collaborators

    • avatar