What is Electron?

Electron is a framework for building desktop applications using JavaScript, HTML, and CSS. By embedding Chromium and Node.js into its binary, Electron allows you to maintain one JavaScript codebase and create cross-platform apps that work on Windows, macOS, and Linux — no native development experience required.

Getting started

We recommend you to start with the tutorial, which guides you through the process of developing an Electron app and distributing it to users. The examples and API documentation are also good places to browse around and discover new things.

Running examples with Electron Fiddle

Electron Fiddle is a sandbox app written with Electron and supported by Electron’s maintainers. We highly recommend installing it as a learning tool to experiment with Electron’s APIs or to prototype features during development.

Fiddle also integrates nicely with our documentation. When browsing through examples in our tutorials, you’ll frequently see an “Open in Electron Fiddle” button underneath a code block. If you have Fiddle installed, this button will open a fiddle.electronjs.org link that will automatically load the example into Fiddle, no copy-pasting required.

docs/fiddles/quick-start (27.0.1)Open in Fiddle

  • main.js
  • preload.js
  • index.html
  1. const { app, BrowserWindow } = require('electron')
  2. const path = require('node:path')
  3. function createWindow () {
  4. const win = new BrowserWindow({
  5. width: 800,
  6. height: 600,
  7. webPreferences: {
  8. preload: path.join(__dirname, 'preload.js')
  9. }
  10. })
  11. win.loadFile('index.html')
  12. }
  13. app.whenReady().then(() => {
  14. createWindow()
  15. app.on('activate', () => {
  16. if (BrowserWindow.getAllWindows().length === 0) {
  17. createWindow()
  18. }
  19. })
  20. })
  21. app.on('window-all-closed', () => {
  22. if (process.platform !== 'darwin') {
  23. app.quit()
  24. }
  25. })
  1. window.addEventListener('DOMContentLoaded', () => {
  2. const replaceText = (selector, text) => {
  3. const element = document.getElementById(selector)
  4. if (element) element.innerText = text
  5. }
  6. for (const type of ['chrome', 'node', 'electron']) {
  7. replaceText(`${type}-version`, process.versions[type])
  8. }
  9. })
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Hello World!</title>
  6. <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
  7. </head>
  8. <body>
  9. <h1>Hello World!</h1>
  10. <p>
  11. We are using Node.js <span id="node-version"></span>,
  12. Chromium <span id="chrome-version"></span>,
  13. and Electron <span id="electron-version"></span>.
  14. </p>
  15. </body>
  16. </html>

What is in the docs?

All the official documentation is available from the sidebar. These are the different categories and what you can expect on each one:

  • Tutorial: An end-to-end guide on how to create and publish your first Electron application.
  • Processes in Electron: In-depth reference on Electron processes and how to work with them.
  • Best Practices: Important checklists to keep in mind when developing an Electron app.
  • Examples: Quick references to add features to your Electron app.
  • Development: Miscellaneous development guides.
  • Distribution: Learn how to distribute your app to end users.
  • Testing And Debugging: How to debug JavaScript, write tests, and other tools used to create quality Electron applications.
  • References: Useful links to better understand how the Electron project works and is organized.
  • Contributing: Compiling Electron and making contributions can be daunting. We try to make it easier in this section.

Getting help

Are you getting stuck anywhere? Here are a few links to places to look:

  • If you need help with developing your app, our community Discord server is a great place to get advice from other Electron app developers.
  • If you suspect you’re running into a bug with the electron package, please check the GitHub issue tracker to see if any existing issues match your problem. If not, feel free to fill out our bug report template and submit a new issue.