<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Tray</title> </head> <body> <div> <h1>Tray</h1> <h3> The <code>tray</code> module allows you to create an icon in the operating system's notification area. </h3> <p>This icon can also have a context menu attached.</p> <p> Open the <a href="https://electronjs.org/docs/api/tray"> full API documentation (opens in new window) </a> in your browser. </p> </div> <div> <div> <div> <div> <button id="put-in-tray">View Demo</button> <span id="tray-countdown"></span> </div> <p> The demo button sends a message to the main process using the <code>ipc</code> module. In the main process the app is told to place an icon, with a context menu, in the tray. </p> <p> In this example the tray icon can be removed by clicking 'Remove' in the context menu or selecting the demo button again. </p> <h5>Main Process</h5> <pre> <code> const path = require('path') const {ipcMain, app, Menu, Tray} = require('electron') let appIcon = null ipcMain.on('put-in-tray', (event) => { const iconName = process.platform === 'win32' ? 'windows-icon.png' : 'iconTemplate.png' const iconPath = path.join(__dirname, iconName) appIcon = new Tray(iconPath) const contextMenu = Menu.buildFromTemplate([{ label: 'Remove', click: () => { event.sender.send('tray-removed') } }]) appIcon.setToolTip('Electron Demo in the tray.') appIcon.setContextMenu(contextMenu) }) ipcMain.on('remove-tray', () => { appIcon.destroy() }) app.on('window-all-closed', () => { if (appIcon) appIcon.destroy() }) </code> </pre> <h5>Renderer Process</h5> <pre> <code> const ipc = require('electron').ipcRenderer const trayBtn = document.getElementById('put-in-tray') let trayOn = false trayBtn.addEventListener('click', function (event) { if (trayOn) { trayOn = false document.getElementById('tray-countdown').innerHTML = '' ipc.send('remove-tray') } else { trayOn = true const message = 'Click demo again to remove.' document.getElementById('tray-countdown').innerHTML = message ipc.send('put-in-tray') } }) // Tray removed from context menu on icon ipc.on('tray-removed', function () { ipc.send('remove-tray') trayOn = false document.getElementById('tray-countdown').innerHTML = '' }) </code> </pre> <div> <h2>ProTip</h2> <strong>Tray support in Linux.</strong> <p> On Linux distributions that only have app indicator support, users will need to install <code>libappindicator1</code> to make the tray icon work. See the <a href="https://electronjs.org/docs/api/tray"> full API documentation (opens in new window) </a> for more details about using Tray on Linux. </p> </div> </div> </div> </div> <script> // You can also require other files to run in this process require("./renderer.js"); </script> </body> </html>