Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: exit app instance when main package throws error on load #42029

Closed
wants to merge 29 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
ec390f9
feat: exit app instance when main package throws error on load
Mrnikifabio May 3, 2024
2f6b6a8
docs: fix lint command (#42028)
piotrpdev May 4, 2024
d3711f1
fix: avoid crash after upgrade on Linux (#41046)
cptpcrd May 7, 2024
a8c3c8c
docs: update formatting for mdx3 compatibility (#42052)
erickzhao May 7, 2024
89f2f9c
ci: keep GitHub Actions up to date with GitHub's Dependabot (#42042)
cclauss May 7, 2024
def1b41
build(deps): bump actions-cool/issues-helper from 3.3.3 to 3.6.0 (#42…
dependabot[bot] May 8, 2024
268b372
build(deps): bump github/codeql-action from 3.24.0 to 3.25.3 (#42073)
dependabot[bot] May 8, 2024
9a52fa0
docs: make corrections for BrowserViews since it is deprecated (#42030)
xupea May 8, 2024
3064c44
build(deps): bump slackapi/slack-github-action from 1.25.0 to 1.26.0 …
dependabot[bot] May 8, 2024
d6ec86d
fix: `BrowserWindow.center()` should center relative to screen (#42048)
codebytere May 8, 2024
d936907
fix: CHECK when adding view as its own child (#42067)
codebytere May 9, 2024
81632e6
refactor: use `//ui/shell_dialogs` on Linux (#42045)
codebytere May 9, 2024
55708ce
perf: avoid protocol registry redundant lookup (#41991)
ckerr May 9, 2024
c56ceab
fix: View reordering on re-addition to same parent (#42085)
codebytere May 10, 2024
4c43530
chore: update @electron/lint-roller to 2.1.0 (#42078)
dsanders11 May 10, 2024
7890106
build(deps): bump mikefarah/yq from 4.40.7 to 4.43.1 (#42074)
dependabot[bot] May 10, 2024
b8bef89
chore: bump chromium to 126.0.6445.0 (main) (#41868)
electron-roller[bot] May 10, 2024
c5a98cc
chore: cherry-pick f320600cd1f4 from v8 (#42120)
VerteDinde May 11, 2024
3e122ff
fix: ensure originalFs.promises.cp works (#42132)
MarshallOfSound May 13, 2024
468ea10
fix: BrowserView autoresizing conversion error (#42056)
codebytere May 13, 2024
5406cc7
ci: auto label bug issues with version label (#42044)
dsanders11 May 13, 2024
b3960b8
docs: fixing typo in dark mode fiddle and doc (#42112)
richardtorres314 May 13, 2024
c43e325
docs: improve protocol.handle file examples (#42111)
dsanders11 May 13, 2024
addaa71
refactor: use base::Value::Take*() (#41169)
ckerr May 13, 2024
0410a38
chore: bump node to v20.13.1 (main) (#42088)
electron-roller[bot] May 13, 2024
6fc2e3e
fix: partially revert invalidate focus ring (#42126)
VerteDinde May 13, 2024
fe08f86
test: add tests for electron fuses (#42129)
MarshallOfSound May 13, 2024
b77ae8b
build: update appveyor image to latest version (#42135)
electron-appveyor-updater[bot] May 13, 2024
202c33c
chore: update patches after #42126 was merged (#42153)
jkleinsc May 13, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Keep GitHub Actions up to date with GitHub's Dependabot...
# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
2 changes: 1 addition & 1 deletion .github/workflows/issue-labeled.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ jobs:
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
- name: Create comment
if: ${{ steps.check-for-comment.outputs.SHOULD_COMMENT }}
uses: actions-cool/issues-helper@275328970dbc3bfc3bc43f5fe741bf3638300c0a # v3.3.3
uses: actions-cool/issues-helper@a610082f8ac0cf03e357eb8dd0d5e2ba075e017e # v3.6.0
with:
actions: 'create-comment'
token: ${{ steps.generate-token.outputs.token }}
Expand Down
25 changes: 24 additions & 1 deletion .github/workflows/issue-opened.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
with:
creds: ${{ secrets.ISSUE_TRIAGE_GH_APP_CREDS }}
org: electron
- run: npm install [email protected] [email protected]
- run: npm install [email protected] [email protected] [email protected]
- name: Add labels
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
env:
Expand All @@ -45,6 +45,7 @@ jobs:
script: |
const { fromMarkdown } = await import('${{ github.workspace }}/node_modules/mdast-util-from-markdown/index.js');
const { select } = await import('${{ github.workspace }}/node_modules/unist-util-select/index.js');
const semver = await import('${{ github.workspace }}/node_modules/semver/index.js');

const [ owner, repo ] = '${{ github.repository }}'.split('/');
const issue_number = ${{ github.event.issue.number }};
Expand All @@ -53,6 +54,28 @@ jobs:

const labels = [];

const electronVersion = select('heading:has(> text[value="Electron Version"]) + paragraph > text', tree)?.value.trim();
if (electronVersion !== undefined) {
const major = semver.parse(electronVersion)?.major;
if (major) {
const versionLabel = `${major}-x-y`;
let labelExists = false;

try {
await github.rest.issues.getLabel({
owner,
repo,
name: versionLabel,
});
labelExists = true;
} catch {}

if (labelExists) {
labels.push(versionLabel);
}
}
}

const gistUrl = select('heading:has(> text[value="Testcase Gist URL"]) + paragraph > text', tree)?.value.trim();
if (gistUrl !== undefined && gistUrl.startsWith('https://gist.github.com/')) {
labels.push('has-repro-gist');
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pull-request-labeled.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Trigger Slack workflow
uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 # v1.25.0
uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0
with:
payload: |
{
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/scorecards.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,6 @@ jobs:

# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0
uses: github/codeql-action/upload-sarif@d39d31e687223d841ef683f52467bd88e9b21c14 # v3.25.3
with:
sarif_file: results.sarif
2 changes: 1 addition & 1 deletion .github/workflows/update_appveyor_image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
fi
- name: (Optionally) Update Appveyor Image
if: ${{ env.APPVEYOR_IMAGE_VERSION }}
uses: mikefarah/yq@bb66c9c872a7a4cf3d6846c2ff6d182c66ec3f77 # v4.40.7
uses: mikefarah/yq@c35ec752e38ea0c096d3c44e13cfc0797ac394d8 # v4.43.1
with:
cmd: |
yq '.image = "${{ env.APPVEYOR_IMAGE_VERSION }}"' "appveyor.yml" > "appveyor2.yml"
Expand Down
13 changes: 13 additions & 0 deletions .lint-roller.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"markdown-ts-check": {
"defaultImports": [
"import * as childProcess from 'node:child_process'",
"import * as fs from 'node:fs'",
"import * as path from 'node:path'",
"import { app, autoUpdater, contextBridge, crashReporter, dialog, BrowserWindow, ipcMain, ipcRenderer, Menu, MessageChannelMain, nativeImage, net, protocol, session, systemPreferences, Tray, utilityProcess, webFrame, webFrameMain } from 'electron'"
],
"typings": [
"../electron.d.ts"
]
}
}
1 change: 1 addition & 0 deletions .markdownlint.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"extends": "@electron/lint-roller/configs/markdownlint.json",
"no-angle-brackets": true,
"no-curly-braces": true,
"no-inline-html": {
"allowed_elements": [
"br",
Expand Down
16 changes: 5 additions & 11 deletions BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -81,18 +81,11 @@ if (is_linux) {
]
}

# Generates electron_gtk_stubs.h header which contains
# stubs for extracting function ptrs from the gtk library.
# Function signatures for which stubs are required should be
# declared in electron_gtk.sigs, currently this file contains
# signatures for the functions used with native file chooser
# implementation. In future, this file can be extended to contain
# gtk4 stubs to switch gtk version in runtime.
# Generates headers which contain stubs for extracting function ptrs
# from the gtk library. Function signatures for which stubs are
# required should be declared in the sig files.
generate_stubs("electron_gtk_stubs") {
sigs = [
"shell/browser/ui/electron_gdk_pixbuf.sigs",
"shell/browser/ui/electron_gtk.sigs",
]
sigs = [ "shell/browser/ui/electron_gdk_pixbuf.sigs" ]
extra_header = "shell/browser/ui/electron_gtk.fragment"
output_name = "electron_gtk_stubs"
public_deps = [ "//ui/gtk:gtk_config" ]
Expand Down Expand Up @@ -665,6 +658,7 @@ source_set("electron_lib") {
libs += [ "dwmapi.lib" ]
sources += [ "shell/common/asar/archive_win.cc" ]
deps += [
"//components/app_launch_prefetch",
"//components/crash/core/app:crash_export_thunks",
"//ui/native_theme:native_theme_browser",
"//ui/wm",
Expand Down
52 changes: 50 additions & 2 deletions DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ gclient_gn_args_from = 'src'

vars = {
'chromium_version':
'125.0.6412.0',
'126.0.6445.0',
'node_version':
'v20.12.2',
'v20.13.1',
'nan_version':
'e14bdcd1f72d62bca1d541b66da43130384ec213',
'squirrel.mac_version':
Expand Down Expand Up @@ -161,6 +161,54 @@ hooks = [
'import os, subprocess; os.chdir(os.path.join("src", "electron")); subprocess.check_call(["python3", "script/lib/npx.py", "yarn@' + (Var("yarn_version")) + '", "install", "--frozen-lockfile"]);',
],
},
{
'name': 'sysroot_arm',
'pattern': '.',
'condition': 'checkout_linux and checkout_arm',
'action': ['python3', 'src/build/linux/sysroot_scripts/install-sysroot.py',
'--sysroots-json-path=' + Var('sysroots_json_path'),
'--arch=arm'],
},
{
'name': 'sysroot_arm64',
'pattern': '.',
'condition': 'checkout_linux and checkout_arm64',
'action': ['python3', 'src/build/linux/sysroot_scripts/install-sysroot.py',
'--sysroots-json-path=' + Var('sysroots_json_path'),
'--arch=arm64'],
},
{
'name': 'sysroot_x86',
'pattern': '.',
'condition': 'checkout_linux and (checkout_x86 or checkout_x64)',
'action': ['python3', 'src/build/linux/sysroot_scripts/install-sysroot.py',
'--sysroots-json-path=' + Var('sysroots_json_path'),
'--arch=x86'],
},
{
'name': 'sysroot_mips',
'pattern': '.',
'condition': 'checkout_linux and checkout_mips',
'action': ['python3', 'src/build/linux/sysroot_scripts/install-sysroot.py',
'--sysroots-json-path=' + Var('sysroots_json_path'),
'--arch=mips'],
},
{
'name': 'sysroot_mips64',
'pattern': '.',
'condition': 'checkout_linux and checkout_mips64',
'action': ['python3', 'src/build/linux/sysroot_scripts/install-sysroot.py',
'--sysroots-json-path=' + Var('sysroots_json_path'),
'--arch=mips64el'],
},
{
'name': 'sysroot_x64',
'pattern': '.',
'condition': 'checkout_linux and checkout_x64',
'action': ['python3', 'src/build/linux/sysroot_scripts/install-sysroot.py',
'--sysroots-json-path=' + Var('sysroots_json_path'),
'--arch=x64'],
},
]

recursedeps = [
Expand Down
2 changes: 1 addition & 1 deletion appveyor-woa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

version: 1.0.{build}
build_cloud: electronhq-16-core
image: e-125.0.6412.0
image: e-126.0.6445.0
environment:
GIT_CACHE_PATH: C:\Users\appveyor\libcc_cache
ELECTRON_OUT_DIR: Default
Expand Down
2 changes: 1 addition & 1 deletion appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

version: 1.0.{build}
build_cloud: electronhq-16-core
image: e-125.0.6412.0
image: e-126.0.6445.0
environment:
GIT_CACHE_PATH: C:\Users\appveyor\libcc_cache
ELECTRON_OUT_DIR: Default
Expand Down
9 changes: 9 additions & 0 deletions build/args/all.gn
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,12 @@ v8_enable_private_mapping_fork_optimization = true

# Expose public V8 symbols for native modules.
v8_expose_public_symbols = true

# Disables unsafe-buffers-usage plugin due to incompatibilities with our reclient implementation
# Ref: https://chromium-review.googlesource.com/c/chromium/src/+/5426599
# Ref: https://github.com/electron/electron/commit/8e20f16ea35eeaeb149ae63bad3703d782665f6a
clang_unsafe_buffers_paths = ""

# Disable snapshotting a page when printing for its content to be analyzed for
# sensitive content by enterprise users.
enterprise_content_analysis = false
4 changes: 1 addition & 3 deletions default_app/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,7 @@ async function loadApplicationPackage (packagePath: string) {
// Run the app.
await import(url.pathToFileURL(filePath).toString());
} catch (e) {
console.error('App threw an error during load');
console.error((e as Error).stack || e);
throw e;
showErrorMessage(`App threw an error during load of ${packagePath}\n\n${(e as Error).stack || (e as Error).message || e}`);
}
}

Expand Down
2 changes: 1 addition & 1 deletion docs/api/base-window.md
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,7 @@ Perhaps there are 15 pixels of controls on the left edge, 25 pixels of controls
on the right edge and 50 pixels of controls below the player. In order to
maintain a 16:9 aspect ratio (standard aspect ratio for HD @1920x1080) within
the player itself we would call this function with arguments of 16/9 and
{ width: 40, height: 50 }. The second argument doesn't care where the extra width and height
\{ width: 40, height: 50 \}. The second argument doesn't care where the extra width and height
are within the content view--only that they exist. Sum any extra width and
height areas you have within the overall content view.

Expand Down
2 changes: 1 addition & 1 deletion docs/api/browser-window.md
Original file line number Diff line number Diff line change
Expand Up @@ -723,7 +723,7 @@ Perhaps there are 15 pixels of controls on the left edge, 25 pixels of controls
on the right edge and 50 pixels of controls below the player. In order to
maintain a 16:9 aspect ratio (standard aspect ratio for HD @1920x1080) within
the player itself we would call this function with arguments of 16/9 and
{ width: 40, height: 50 }. The second argument doesn't care where the extra width and height
\{ width: 40, height: 50 \}. The second argument doesn't care where the extra width and height
are within the content view--only that they exist. Sum any extra width and
height areas you have within the overall content view.

Expand Down
2 changes: 1 addition & 1 deletion docs/api/context-bridge.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ has been included below for completeness:
| `Object` | Complex | ✅ | ✅ | Keys must be supported using only "Simple" types in this table. Values must be supported in this table. Prototype modifications are dropped. Sending custom classes will copy values but not the prototype. |
| `Array` | Complex | ✅ | ✅ | Same limitations as the `Object` type |
| `Error` | Complex | ✅ | ✅ | Errors that are thrown are also copied, this can result in the message and stack trace of the error changing slightly due to being thrown in a different context, and any custom properties on the Error object [will be lost](https://github.com/electron/electron/issues/25596) |
| `Promise` | Complex | ✅ | ✅ | N/A
| `Promise` | Complex | ✅ | ✅ | N/A |
| `Function` | Complex | ✅ | ✅ | Prototype modifications are dropped. Sending classes or constructors will not work. |
| [Cloneable Types](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) | Simple | ✅ | ✅ | See the linked document on cloneable types |
| `Element` | Complex | ✅ | ✅ | Prototype modifications are dropped. Sending custom elements will not work. |
Expand Down
2 changes: 1 addition & 1 deletion docs/api/net.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ requests according to the specified protocol scheme in the `options` object.
### `net.fetch(input[, init])`

* `input` string | [GlobalRequest](https://nodejs.org/api/globals.html#request)
* `init` [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/fetch#options) & { bypassCustomProtocolHandlers?: boolean } (optional)
* `init` [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/fetch#options) & \{ bypassCustomProtocolHandlers?: boolean \} (optional)

Returns `Promise<GlobalResponse>` - see [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response).

Expand Down
10 changes: 7 additions & 3 deletions docs/api/protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,14 @@ An example of implementing a protocol that has the same effect as the

```js
const { app, protocol, net } = require('electron')
const path = require('node:path')
const url = require('node:url')

app.whenReady().then(() => {
protocol.handle('atom', (request) =>
net.fetch('file://' + request.url.slice('atom://'.length)))
protocol.handle('atom', (request) => {
const filePath = request.url.slice('atom://'.length)
return net.fetch(url.pathToFileURL(path.join(__dirname, filePath)).toString())
})
})
```

Expand Down Expand Up @@ -42,7 +46,7 @@ app.whenReady().then(() => {

ses.protocol.handle('atom', (request) => {
const filePath = request.url.slice('atom://'.length)
return net.fetch(url.pathToFileURL(path.join(__dirname, filePath)).toString())
return net.fetch(url.pathToFileURL(path.resolve(__dirname, filePath)).toString())
})

const mainWindow = new BrowserWindow({ webPreferences: { partition } })
Expand Down
2 changes: 1 addition & 1 deletion docs/api/session.md
Original file line number Diff line number Diff line change
Expand Up @@ -695,7 +695,7 @@ Returns `Promise<void>` - Resolves when all connections are closed.
#### `ses.fetch(input[, init])`

* `input` string | [GlobalRequest](https://nodejs.org/api/globals.html#request)
* `init` [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/fetch#options) & { bypassCustomProtocolHandlers?: boolean } (optional)
* `init` [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/fetch#options) & \{ bypassCustomProtocolHandlers?: boolean \} (optional)

Returns `Promise<GlobalResponse>` - see [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response).

Expand Down
3 changes: 3 additions & 0 deletions docs/api/view.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ Objects created with `new View` have the following instance methods:
* `index` Integer (optional) - Index at which to insert the child view.
Defaults to adding the child at the end of the child list.

If the same View is added to a parent which already contains it, it will be reordered such that
it becomes the topmost view.

#### `view.removeChildView(view)`

* `view` View - Child view to remove.
Expand Down
6 changes: 6 additions & 0 deletions docs/breaking-changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ This document uses the following convention to categorize breaking changes:

## Planned Breaking API Changes (31.0)

### Removed: `WebSQL` support

Chromium has removed support for WebSQL upstream, transitioning it to Android only. See
[Chromium's intent to remove discussion](https://groups.google.com/a/chromium.org/g/blink-dev/c/fWYb6evVA-w/m/wGI863zaAAAJ)
for more information.

### Behavior Changed: `nativeImage.toDataURL` will preseve PNG colorspace

PNG decoder implementation has been changed to preserve colorspace data, the
Expand Down
2 changes: 1 addition & 1 deletion docs/development/coding-style.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ etc.

* Write [remark](https://github.com/remarkjs/remark) markdown style.

You can run `npm run lint-docs` to ensure that your documentation changes are
You can run `npm run lint:docs` to ensure that your documentation changes are
formatted correctly.

## JavaScript
Expand Down
2 changes: 1 addition & 1 deletion docs/development/debugging-with-symbol-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ calls, and other compiler optimizations. The only workaround is to build an
unoptimized local build.

The official symbol server URL for Electron is
<https://symbols.electronjs.org>.
[https://symbols.electronjs.org](https://symbols.electronjs.org).
You cannot visit this URL directly, you must add it to the symbol path of your
debugging tool. In the examples below, a local cache directory is used to avoid
repeatedly fetching the PDB from the server. Replace `c:\code\symbols` with an
Expand Down
1 change: 0 additions & 1 deletion docs/fiddles/features/dark-mode/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,5 @@ <h1>Hello World!</h1>
<button id="reset-to-system">Reset to System Theme</button>

<script src="renderer.js"></script>
</body>
</body>
</html>
1 change: 0 additions & 1 deletion docs/tutorial/dark-mode.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ Starting with the `index.html` file:
<button id="reset-to-system">Reset to System Theme</button>

<script src="renderer.js"></script>
</body>
</body>
</html>
```
Expand Down
3 changes: 2 additions & 1 deletion docs/tutorial/esm.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ JavaScript transpilers (e.g. Babel, TypeScript) have historically supported ES M
syntax before Node.js supported ESM imports by turning these calls to CommonJS
`require` calls.

<details><summary>Example: @babel/plugin-transform-modules-commonjs</summary>
<details>
<summary>Example: @babel/plugin-transform-modules-commonjs</summary>

The `@babel/plugin-transform-modules-commonjs` plugin will transform
ESM imports down to `require` calls. The exact syntax will depend on the
Expand Down
1 change: 1 addition & 0 deletions docs/tutorial/offscreen-rendering.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,5 @@ app.on('window-all-closed', () => {

After launching the Electron application, navigate to your application's
working folder, where you'll find the rendered image.

[disablehardwareacceleration]: ../api/app.md#appdisablehardwareacceleration