Research
Security News
Threat Actor Exposes Playbook for Exploiting npm to Build Blockchain-Powered Botnets
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
This module provides boilerplate for setting up a menubar application using Electron. All you have to do is point it at your index.html
and menubar
will handle the rest.
✅ Only one dependency, and one peer-dependency.
✅ Works on macOS, Windows and most Linuxes. See details.
✅ 💥 3.6kB minified + gzipped 💥
macOS Mojave 10.14 | Windows 10 | Ubuntu 18.04 |
yarn add menubar
Starting with your own new project, run these commands:
$ yarn add menubar
$ touch myApp.js
$ touch index.html
Fill index.html
with some HTML, and myApp.js
like this:
const { menubar } = require('menubar');
const mb = menubar();
mb.on('ready', () => {
console.log('app is ready');
// your app code here
});
Then use electron
to run the app:
$ electron myApp.js
Alternatively, see examples/hello-world
folder for a simple working example.
Menubar
ClassThe return value of menubar()
is a Menubar
class instance, which has these properties:
app
: the Electron App instance,window
: the Electron Browser Window instance,tray
: the Electron Tray instance,positioner
: the Electron Positioner instance,setOption(option, value)
: change an option after menubar is created,getOption(option)
: get an menubar option,showWindow()
: show the menubar window,hideWindow()
: hide the menubar windowSee the reference API docs.
menubar()
OptionsYou can pass an optional options object into the menubar({ ... })
function:
dir
(default process.cwd()
) - the app source directoryindex
(default file:// + opts.dir + index.html
) - The URL to load the menubar's browserWindow with. The url can be a remote address (e.g. http://
) or a path to a local HTML file using the file://
protocol.browserWindow
- BrowserWindow options to be passed to the BrowserWindow constructor, see Electron docs. Some interesting fields to passed down are:
x
(default undefined
) - the x position of the windowy
(default undefined
) - the y position of the windowwidth
(default 400) - window widthheight
(default 400) - window heightalwaysOnTop
(default false) - if true, the window will not hide on bluricon
(default opts.dir + IconTemplate.png
) - the png icon to use for the menubar. A good size to start with is 20x20. To support retina, supply a 2x sized image (e.g. 40x40) with @2x
added to the end of the name, so icon.png
and icon@2x.png
and Electron will automatically use your @2x
version on retina screens.tooltip
(default empty) - menubar tray icon tooltip texttray
(default created on-the-fly) - an electron Tray
instance. if provided opts.icon
will be ignoredpreloadWindow
(default false) - Create BrowserWindow instance before it is used -- increasing resource usage, but making the click on the menubar load faster.loadUrlOptions
- (default undefined) The options passed when loading the index URL in the menubar's browserWindow. Everything browserWindow.loadURL supports is supported; this object is simply passed onto browserWindow.loadURLshowOnAllWorkspaces
(default true) - Makes the window available on all OS X workspaces.windowPosition
(default trayCenter and trayBottomCenter on Windows) - Sets the window position (x and y will still override this), check positioner docs for valid values.showDockIcon
(default false) - Configure the visibility of the application dock icon.showOnRightClick
(default false) - Show the window on 'right-click' event instead of regular 'click'See the reference API docs.
The Menubar
class is an event emitter:
ready
- when menubar
's tray icon has been created and initialized, i.e. when menubar
is ready to be used. Note: this is different than Electron app's ready
event, which happens much earlier in the processcreate-window
- the line before new BrowserWindow()
is calledbefore-load
- after create window, before loadUrl (can be used for require("@electron/remote/main").enable(webContents)
)after-create-window
- the line after all window init code is done and url was loadedshow
- the line before window.show()
is calledafter-show
- the line after window.show()
is calledhide
- the line before window.hide()
is called (on window blur)after-hide
- the line after window.hide()
is calledafter-close
- after the .window
(BrowserWindow) property has been deletedfocus-lost
- emitted if always-on-top option is set and the user clicks awaymenubar | Electron | Notes |
---|---|---|
9.x.x | >=9.x.x <33.x.x | |
8.x.x | 8.x.xx | |
7.x.x | 7.x.xx | |
6.x.x | >=4.x.x <7.x.x | Not recommended for security reasons |
<= 5.x.x | <= 3.x.x | Please, please don't use these old versions |
See the reference API docs.
mb.on('after-create-window', callback)
to run things after your app has loaded. For example you could run mb.window.openDevTools()
to open the developer tools for debugging, or load a different URL with mb.window.loadURL()
mb.on('focus-lost')
if you would like to perform some operation when using the option browserWindow.alwaysOnTop: true
mb.on('after-hide', () => { mb.app.hide() } )
or similartray.setContextMenu(contextMenu)
, and pass this custom tray to menubar: const mb = menubar({ tray });
. See this example for more information.mb.app.commandLine.appendSwitch('disable-backgrounding-occluded-windows', 'true');
FAQs
high level way to create menubar desktop applications with electron
We found that menubar demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
Security News
NVD’s backlog surpasses 20,000 CVEs as analysis slows and NIST announces new system updates to address ongoing delays.
Security News
Research
A malicious npm package disguised as a WhatsApp client is exploiting authentication flows with a remote kill switch to exfiltrate data and destroy files.