electron/docs/glossary.md

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

245 lines
9.1 KiB
Markdown
Raw Normal View History

2016-11-03 20:53:40 +00:00
# Glossary
This page defines some terminology that is commonly used in Electron development.
2016-11-04 18:28:59 +00:00
### ASAR
2016-11-03 20:53:40 +00:00
ASAR stands for Atom Shell Archive Format. An [asar] archive is a simple
2016-11-03 20:53:40 +00:00
`tar`-like format that concatenates files into a single file. Electron can read
arbitrary files from it without unpacking the whole file.
The ASAR format was created primarily to improve performance on Windows when
reading large quantities of small files (e.g. when loading your app's JavaScript
dependency tree from `node_modules`).
### code signing
Code signing is a process where an app developer digitally signs their code to
ensure that it hasn't been tampered with after packaging. Both Windows and
macOS implement their own version of code signing. As a desktop app developer,
it's important that you sign your code if you plan on distributing it to the
general public.
For more information, read the [Code Signing] tutorial.
### context isolation
Context isolation is a security measure in Electron that ensures that your
preload script cannot leak privileged Electron or Node.js APIs to the web
contents in your renderer process. With context isolation enabled, the
only way to expose APIs from your preload script is through the
`contextBridge` API.
For more information, read the [Context Isolation] tutorial.
See also: [preload script](#preload-script), [renderer process](#renderer-process)
2016-11-03 20:53:40 +00:00
2017-06-16 00:28:00 +00:00
### CRT
The C Runtime Library (CRT) is the part of the C++ Standard Library that
2017-11-29 10:58:24 +00:00
incorporates the ISO C99 standard library. The Visual C++ libraries that
implement the CRT support native code development, and both mixed native and
2017-06-16 17:21:24 +00:00
managed code, and pure managed code for .NET development.
2017-06-16 00:28:00 +00:00
2016-11-06 03:07:36 +00:00
### DMG
An Apple Disk Image is a packaging format used by macOS. DMG files are
commonly used for distributing application "installers".
2016-11-06 03:07:36 +00:00
2017-06-26 17:04:46 +00:00
### IME
2017-11-29 10:58:24 +00:00
Input Method Editor. A program that allows users to enter characters and
symbols not found on their keyboard. For example, this allows users of Latin
2017-06-26 17:04:46 +00:00
keyboards to input Chinese, Japanese, Korean and Indic characters.
2018-04-03 12:58:25 +00:00
### IDL
Interface description language. Write function signatures and data types in a
format that can be used to generate interfaces in Java, C++, JavaScript, etc.
2018-04-03 12:58:25 +00:00
2016-11-04 18:28:59 +00:00
### IPC
2016-11-03 20:53:40 +00:00
IPC stands for inter-process communication. Electron uses IPC to send
serialized JSON messages between the main and renderer processes.
see also: [main process](#main-process), [renderer process](#renderer-process)
2016-11-03 20:53:40 +00:00
2016-11-04 18:28:59 +00:00
### main process
2016-11-03 20:53:40 +00:00
The main process, commonly a file named `main.js`, is the entry point to every
Electron app. It controls the life of the app, from open to close. It also
2017-11-29 10:58:24 +00:00
manages native elements such as the Menu, Menu Bar, Dock, Tray, etc. The
2016-11-03 20:53:40 +00:00
main process is responsible for creating each new renderer process in the app.
The full Node API is built in.
Every app's main process file is specified in the `main` property in
`package.json`. This is how `electron .` knows what file to execute at startup.
2017-09-22 01:52:43 +00:00
In Chromium, this process is referred to as the "browser process". It is
renamed in Electron to avoid confusion with renderer processes.
2016-12-21 21:47:17 +00:00
See also: [process](#process), [renderer process](#renderer-process)
2016-11-04 18:28:59 +00:00
### MAS
2016-11-03 20:53:40 +00:00
Acronym for Apple's Mac App Store. For details on submitting your app to the
MAS, see the [Mac App Store Submission Guide].
2018-04-03 12:58:25 +00:00
### Mojo
An IPC system for communicating intra- or inter-process, and that's important
because Chrome is keen on being able to split its work into separate processes
or not, depending on memory pressures etc.
2018-04-03 12:58:25 +00:00
See https://chromium.googlesource.com/chromium/src/+/main/mojo/README.md
2018-04-03 12:58:25 +00:00
See also: [IPC](#ipc)
### MSI
On Windows, MSI packages are used by the Windows Installer
(also known as Microsoft Installer) service to install and configure
applications.
More information can be found in [Microsoft's documentation][msi].
2016-11-04 18:28:59 +00:00
### native modules
2016-11-03 20:53:40 +00:00
2016-11-04 18:24:41 +00:00
Native modules (also called [addons] in
2016-11-03 20:53:40 +00:00
Node.js) are modules written in C or C++ that can be loaded into Node.js or
Electron using the require() function, and used as if they were an
2016-11-03 20:53:40 +00:00
ordinary Node.js module. They are used primarily to provide an interface
between JavaScript running in Node.js and C/C++ libraries.
Native Node modules are supported by Electron, but since Electron is very
likely to use a different V8 version from the Node binary installed in your
system, you have to manually specify the location of Electrons headers when
building native modules.
For more information, read the [Native Node Modules] tutorial.
### notarization
2016-11-03 20:53:40 +00:00
Notarization is a macOS-specific process where a developer can send a
code-signed app to Apple servers to get verified for malicious
components through an automated service.
2016-11-06 03:07:36 +00:00
See also: [code signing](#code-signing)
2016-11-06 03:07:36 +00:00
2017-10-21 22:15:30 +00:00
### OSR
2017-07-07 20:43:54 +00:00
OSR (offscreen rendering) can be used for loading heavy page in
2017-11-29 10:58:24 +00:00
background and then displaying it after (it will be much faster).
2017-10-23 16:36:52 +00:00
It allows you to render page without showing it on screen.
2016-11-06 03:07:36 +00:00
For more information, read the [Offscreen Rendering] tutorial.
### preload script
Preload scripts contain code that executes in a renderer process
before its web contents begin loading. These scripts run within
the renderer context, but are granted more privileges by having
access to Node.js APIs.
See also: [renderer process](#renderer-process), [context isolation](#context-isolation)
2016-11-04 18:28:59 +00:00
### process
2016-11-04 18:24:41 +00:00
A process is an instance of a computer program that is being executed. Electron
apps that make use of the [main] and one or many [renderer] process are
actually running several programs simultaneously.
In Node.js and Electron, each running process has a `process` object. This
object is a global that provides information about, and control over, the
current process. As a global, it is always available to applications without
using require().
2016-12-21 21:47:17 +00:00
See also: [main process](#main-process), [renderer process](#renderer-process)
2016-11-04 18:28:59 +00:00
### renderer process
2016-11-03 20:53:40 +00:00
The renderer process is a browser window in your app. Unlike the main process,
there can be multiple of these and each is run in a separate process.
They can also be hidden.
2016-12-21 21:47:17 +00:00
See also: [process](#process), [main process](#main-process)
### sandbox
The sandbox is a security feature inherited from Chromium that restricts
your renderer processes to a limited set of permissions.
For more information, read the [Process Sandboxing] tutorial.
See also: [process](#process)
2016-11-04 18:28:59 +00:00
### Squirrel
2016-11-03 20:53:40 +00:00
Squirrel is an open-source framework that enables Electron apps to update
automatically as new versions are released. See the [autoUpdater] API for
info about getting started with Squirrel.
2016-11-04 18:28:59 +00:00
### userland
2016-11-03 20:53:40 +00:00
This term originated in the Unix community, where "userland" or "userspace"
referred to programs that run outside of the operating system kernel. More
recently, the term has been popularized in the Node and npm community to
distinguish between the features available in "Node core" versus packages
published to the npm registry by the much larger "user" community.
2016-11-06 03:07:36 +00:00
Like Node, Electron is focused on having a small set of APIs that provide
all the necessary primitives for developing multi-platform desktop applications.
2016-11-03 20:53:40 +00:00
This design philosophy allows Electron to remain a flexible tool without being
overly prescriptive about how it should be used. Userland enables users to
create and share tools that provide additional functionality on top of what is
available in "core".
feat: UtilityProcess API (#34980) * chore: initial scaffolding * chore: implement interface and docs * chore: address code style review * fix: cleanup of utility process on shutdown * chore: simplify NodeBindings::CreateEnvironment * chore: rename disableLibraryValidation => allowLoadingUnsignedLibraries * chore: implement process.parentPort * chore(posix): implement stdio pipe interface * chore(win): implement stdio interface * chore: reenable SetNodeOptions for utility process * chore: add specs * chore: fix lint * fix: update kill API * fix: update process.parentPort API * fix: exit event * docs: update exit event * fix: tests on linux * chore: expand on some comments * fix: shutdown of pipe reader Avoid logging since it is always the case that reader end of pipe will terminate after the child process. * fix: remove exit code check for crash spec * fix: rm PR_SET_NO_NEW_PRIVS for unsandbox utility process * chore: fix incorrect rebase * fix: address review feedback * chore: rename utility_process -> utility * chore: update docs * chore: cleanup c++ implemantation * fix: leak in NodeServiceHost impl * chore: minor cleanup * chore: cleanup JS implementation * chore: flip default stdio to inherit * fix: some api improvements * Support cwd option * Remove path restriction for modulePath * Rewire impl for env support * fix: add tests for cwd and env option * chore: alt impl for reading stdio handles * chore: support message queuing * chore: fix lint * chore: new UtilityProcess => utilityProcess.fork * fix: support for uncaught exception exits * chore: remove process.execArgv as default * fix: windows build * fix: style changes * fix: docs and style changes * chore: update patches * spec: disable flaky test on win32 arm CI Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-10-20 05:49:49 +00:00
### utility process
The utility process is a child of the main process that allows running any
untrusted services that cannot be run in the main process. Chromium uses this
process to perform network I/O, audio/video processing, device inputs etc.
In Electron, you can create this process using [UtilityProcess][] API.
See also: [process](#process), [main process](#main-process)
2016-11-04 18:28:59 +00:00
### V8
2016-11-03 20:53:40 +00:00
V8 is Google's open source JavaScript engine. It is written in C++ and is
used in Google Chrome. V8 can run standalone, or can be embedded into any C++ application.
2017-11-29 10:58:24 +00:00
Electron builds V8 as part of Chromium and then points Node to that V8 when
building it.
2017-11-29 10:58:24 +00:00
V8's version numbers always correspond to those of Google Chrome. Chrome 59
includes V8 5.9, Chrome 58 includes V8 5.8, etc.
2020-11-02 09:58:14 +00:00
- [v8.dev](https://v8.dev/)
- [nodejs.org/api/v8.html](https://nodejs.org/api/v8.html)
- [docs/development/v8-development.md](development/v8-development.md)
2016-11-03 20:53:40 +00:00
2016-11-04 18:28:59 +00:00
### webview
2016-11-04 18:24:41 +00:00
`webview` tags are used to embed 'guest' content (such as external web pages) in
your Electron app. They are similar to `iframe`s, but differ in that each
webview runs in a separate process. It doesn't have the same
permissions as your web page and all interactions between your app and
embedded content will be asynchronous. This keeps your app safe from the
embedded content.
2016-11-03 20:53:40 +00:00
[addons]: https://nodejs.org/api/addons.html
2016-12-26 09:28:08 +00:00
[asar]: https://github.com/electron/asar
[autoupdater]: api/auto-updater.md
[code signing]: tutorial/code-signing.md
[context isolation]: tutorial/context-isolation.md
[mac app store submission guide]: tutorial/mac-app-store-submission-guide.md
2016-11-03 20:53:40 +00:00
[main]: #main-process
[msi]: https://docs.microsoft.com/en-us/windows/win32/msi/windows-installer-portal
[Native Node Modules]: tutorial/using-native-node-modules.md
[offscreen rendering]: tutorial/offscreen-rendering.md
[process sandboxing]: tutorial/sandbox.md
2016-11-03 20:53:40 +00:00
[renderer]: #renderer-process
[userland]: #userland
feat: UtilityProcess API (#34980) * chore: initial scaffolding * chore: implement interface and docs * chore: address code style review * fix: cleanup of utility process on shutdown * chore: simplify NodeBindings::CreateEnvironment * chore: rename disableLibraryValidation => allowLoadingUnsignedLibraries * chore: implement process.parentPort * chore(posix): implement stdio pipe interface * chore(win): implement stdio interface * chore: reenable SetNodeOptions for utility process * chore: add specs * chore: fix lint * fix: update kill API * fix: update process.parentPort API * fix: exit event * docs: update exit event * fix: tests on linux * chore: expand on some comments * fix: shutdown of pipe reader Avoid logging since it is always the case that reader end of pipe will terminate after the child process. * fix: remove exit code check for crash spec * fix: rm PR_SET_NO_NEW_PRIVS for unsandbox utility process * chore: fix incorrect rebase * fix: address review feedback * chore: rename utility_process -> utility * chore: update docs * chore: cleanup c++ implemantation * fix: leak in NodeServiceHost impl * chore: minor cleanup * chore: cleanup JS implementation * chore: flip default stdio to inherit * fix: some api improvements * Support cwd option * Remove path restriction for modulePath * Rewire impl for env support * fix: add tests for cwd and env option * chore: alt impl for reading stdio handles * chore: support message queuing * chore: fix lint * chore: new UtilityProcess => utilityProcess.fork * fix: support for uncaught exception exits * chore: remove process.execArgv as default * fix: windows build * fix: style changes * fix: docs and style changes * chore: update patches * spec: disable flaky test on win32 arm CI Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-10-20 05:49:49 +00:00
[UtilityProcess]: api/utility-process.md
[v8]: #v8