* Fix app.makeSingleInstance hanging on posix systems Wait for the IO thread to be a thing before attempting to listen on the socket Fixes #9880 * Move OnBrowserReady call to PreMainMessageLoopRun to account for timing issues on macOS * Woops, how did that happen ;) * Refactor as per @zcbenz comments Also fix issue where we run the single instance callback *not* on the UI thread, this apparently results in a hung process. * Appease the linting gods * Create watcher when message loop is ready * spec: Add test case for app.makeSingleInstance * Fix missing extension when saving a file without filters Previously, when triggering the save dialog through e.g. `<a download>` links (e.g. http://jsfiddle.net/koldev/cW7W5/), the extension was only saved if Finder was set to show all extensions by default. We now always display the extension to make sure that it is saved. If we want to keep the extension hidden, we could also populate the allowed file types array with the extension from the default filename, but that would have interfered with how we set the filters. * Try to make test less flaky * Try simpler test * Fix stdout detection * Try longer timeout on test
📝 Available Translations: Korean | Simplified Chinese | Brazilian Portuguese | Traditional Chinese | Spanish | Turkish | German
The Electron framework lets you write cross-platform desktop applications using JavaScript, HTML and CSS. It is based on Node.js and Chromium and is used by the Atom editor and many other apps.
Follow @ElectronJS on Twitter for important announcements.
This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to electron@github.com.
Installation
To install prebuilt Electron binaries, use npm.
The preferred method is to install Electron as a development dependency in your
app:
npm install electron --save-dev --save-exact
The --save-exact flag is recommended as Electron does not follow semantic
versioning. For info on how to manage Electron versions in your apps, see
Electron versioning.
For more installation options and troubleshooting tips, see installation.
Quick Start
Clone and run the electron/electron-quick-start repository to see a minimal Electron app in action:
git clone https://github.com/electron/electron-quick-start
cd electron-quick-start
npm install
npm start
Resources for Learning Electron
- electron.atom.io/docs - all of Electron's documentation
- electron/electron-quick-start - a very basic starter Electron app
- electron.atom.io/community/#boilerplates - sample starter apps created by the community
- electron/simple-samples - small applications with ideas for taking them further
- electron/electron-api-demos - an Electron app that teaches you how to use Electron
- hokein/electron-sample-apps - small demo apps for the various Electron APIs
Programmatic usage
Most people use Electron from the command line, but if you require electron inside
your Node app (not your Electron app) it will return the file path to the
binary. Use this to spawn Electron from Node scripts:
const electron = require('electron')
const proc = require('child_process')
// will print something similar to /Users/maf/.../Electron
console.log(electron)
// spawn Electron
const child = proc.spawn(electron)
Mirrors
Documentation Translations
- Brazilian Portuguese
- Korean
- Japanese
- Spanish
- Simplified Chinese
- Traditional Chinese
- Turkish
- Thai
- Ukrainian
- Russian
- French
- Indonesian
Community
You can ask questions and interact with the community in the following locations:
electroncategory on the Atom forums#atom-shellchannel on FreenodeAtomchannel on Slackelectron-ru(Russian)electron-br(Brazilian Portuguese)electron-kr(Korean)electron-jp(Japanese)electron-tr(Turkish)electron-id(Indonesia)
Check out awesome-electron for a community maintained list of useful example apps, tools and resources.
License
When using the Electron or other GitHub logos, be sure to follow the GitHub logo guidelines.