Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign upExtension host terminated unexpectedly after 1.26.0 update #56387
Comments
vscodebot
bot
added
the
new release
label
Aug 14, 2018
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
ZRogerson
Aug 14, 2018
I'm having the same issue. It seems to be killing prettier and possible other extensions.
ZRogerson
commented
Aug 14, 2018
|
I'm having the same issue. It seems to be killing prettier and possible other extensions. |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
natenorberg
Aug 14, 2018
The biggest problem for me was the vim extension. When the extension host went down it would leave me in command mode, but none of the commands would work.
Anyway, I installed the previous release and it auto-updated to 1.26.0 when i accidentally restarted Code. It seems to be working ok again.
natenorberg
commented
Aug 14, 2018
|
The biggest problem for me was the vim extension. When the extension host went down it would leave me in command mode, but none of the commands would work. Anyway, I installed the previous release and it auto-updated to 1.26.0 when i accidentally restarted Code. It seems to be working ok again. |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
javafuns
commented
Aug 15, 2018
|
met the same issue |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
eahydra
Aug 15, 2018
met the same issue
ERR An unknown error occurred. Please consult the log for more details.
/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:1398 ERR Invalid argument: Error: Invalid argument
at t._validatePosition (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:502:878)
at t._getWordRangeAtPosition (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:503:187)
at Object.getWordRangeAtPosition (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:500:806)
at Object.definitionLocation (/Users/joseph/.vscode/extensions/ms-vscode.go-0.6.87/out/src/goDeclaration.js:15:30)
at GoSignatureHelpProvider.provideSignatureHelp (/Users/joseph/.vscode/extensions/ms-vscode.go-0.6.87/out/src/goSignature.js:30:32)
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:744:186
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:110:323
at new n.Class.derive._oncancel (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:84:776)
at Object.t.asWinJsPromise (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:110:286)
at e.provideSignatureHelp (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:744:140)
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:754:663
at e._withAdapter (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:747:177)
at e.$provideSignatureHelp (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:754:625)
at e._doInvokeHandler (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:671:983)
at e._invokeHandler (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:671:701)
at e._receiveRequest (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:670:767)
at e._receiveOneMessage (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:670:536)
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:669:452
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:672:575
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:96:903
at e.fire (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:98:218)
at a (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:162:713)
at Socket._socketDataListener (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:162:932)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at Socket.Readable.push (_stream_readable.js:208:10)
at Pipe.onread (net.js:594:20)
eahydra
commented
Aug 15, 2018
•
|
met the same issue ERR An unknown error occurred. Please consult the log for more details.
/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/workbench.main.js:1398 ERR Invalid argument: Error: Invalid argument
at t._validatePosition (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:502:878)
at t._getWordRangeAtPosition (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:503:187)
at Object.getWordRangeAtPosition (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:500:806)
at Object.definitionLocation (/Users/joseph/.vscode/extensions/ms-vscode.go-0.6.87/out/src/goDeclaration.js:15:30)
at GoSignatureHelpProvider.provideSignatureHelp (/Users/joseph/.vscode/extensions/ms-vscode.go-0.6.87/out/src/goSignature.js:30:32)
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:744:186
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:110:323
at new n.Class.derive._oncancel (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:84:776)
at Object.t.asWinJsPromise (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:110:286)
at e.provideSignatureHelp (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:744:140)
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:754:663
at e._withAdapter (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:747:177)
at e.$provideSignatureHelp (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:754:625)
at e._doInvokeHandler (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:671:983)
at e._invokeHandler (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:671:701)
at e._receiveRequest (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:670:767)
at e._receiveOneMessage (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:670:536)
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:669:452
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:672:575
at /Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:96:903
at e.fire (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:98:218)
at a (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:162:713)
at Socket._socketDataListener (/Applications/Visual Studio Code.app/Contents/Resources/app/out/vs/workbench/node/extensionHostProcess.js:162:932)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at Socket.Readable.push (_stream_readable.js:208:10)
at Pipe.onread (net.js:594:20) |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
sanjcho
Aug 15, 2018
met the same, in my case disabling vscode-flow-ide extention made all working ok.
sanjcho
commented
Aug 15, 2018
|
met the same, in my case disabling vscode-flow-ide extention made all working ok. |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
lebalz
commented
Aug 15, 2018
|
same issue here, the ruby-extension is the killer in my case... |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
Jorundur
Aug 15, 2018
@sanjcho Thanks for the tip! It was the same for me, disabling vscode-flow-ide fixed things. I uninstalled it and installed Flow Language Support instead.
Jorundur
commented
Aug 15, 2018
•
|
@sanjcho Thanks for the tip! It was the same for me, disabling |
sandy081
assigned
alexandrudima
Aug 15, 2018
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
mickeygo
Aug 15, 2018
In my case the Go extension make the problem, but the Go extension author is microsoft.
mickeygo
commented
Aug 15, 2018
|
In my case the Go extension make the problem, but the Go extension author is microsoft. |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
dewey
commented
Aug 15, 2018
|
@mickeygo Yea they are aware of the issue: Microsoft/vscode-go#1845 |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
alexandrudima
Aug 15, 2018
Member
Sorry about that! It looks like there are a few hiccups possibly caused by VSCode's Electron update. A short list of apparently impacted extensions:
vscode-ruby- #56301 (comment)vscode-go- Microsoft/vscode-go#1845vscode-flow-ide
If you find other impacted extensions, please try to also reach out to them directly. I am not entirely sure at this point what is the root cause.
@ramya-rao-a you appear to understand the root cause, can you please explain it more Microsoft/vscode-go#1845 (comment)
This is most likely related to an issue with electron throwing SIGPIPE error when passing stdin to a badly spawned process
|
Sorry about that! It looks like there are a few hiccups possibly caused by VSCode's Electron update. A short list of apparently impacted extensions:
If you find other impacted extensions, please try to also reach out to them directly. I am not entirely sure at this point what is the root cause. @ramya-rao-a you appear to understand the root cause, can you please explain it more Microsoft/vscode-go#1845 (comment)
|
alexandrudima
added
needs more info
mac
labels
Aug 15, 2018
alexandrudima
assigned
bpasero and
Tyriar
Aug 15, 2018
alexandrudima
added
the
electron-2.0.x-update
label
Aug 15, 2018
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
natenorberg
commented
Aug 15, 2018
|
Thank you for looking into it. This seems like a difficult one to dig into |
bpasero
added
the
candidate
label
Aug 15, 2018
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
bpasero
Aug 15, 2018
Member
Adding "Candidate" label just so that this shows up in our discussion round.
|
Adding "Candidate" label just so that this shows up in our discussion round. |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
wingrunr21
Aug 15, 2018
In my investigations for vscode-ruby it appears to be when spawn is attempted to be run with a command that isn't in the PATH and something is attempted to be piped to stdin. Since the command is invalid there's no valid file descriptor and Electron bombs. Instead of returning ENOENT, SIGPIPE is triggered which brings down the entire extension host.
I've found two open Electron issues related to this: electron/electron#13254 and electron/electron#13679
As it is occurring within Electron, I haven't found a way to prevent it from occurring at the extension level. vscode-go appears to have mitigated this by requiring the command be an absolute path prior to attempting to run it. That solution is a bit more problematic for me. I'm leaning on using a command -v check on POSIX compliant systems vs requiring users to configure absolute paths.
wingrunr21
commented
Aug 15, 2018
|
In my investigations for I've found two open Electron issues related to this: electron/electron#13254 and electron/electron#13679 As it is occurring within Electron, I haven't found a way to prevent it from occurring at the extension level. |
wingrunr21
referenced this issue
Aug 15, 2018
Closed
Extension host terminated unexpectedly on VSCode 1.26.0 #380
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
ramya-rao-a
Aug 15, 2018
Member
@alexandrudima My findings were similar to what @wingrunr21 is saying above.
@wingrunr21 In vscode-go we don't need users to provide/configure the absolute paths. The extension figures out the path itself, makes sure the file exists and returns the absolute path of the file. If the file is not found, then the command is returned. That's why my mitigation was checking for the absolute path.
The above mitigation works for electron/electron#13254. I am still looking into if electron/electron#13679 has any affect on vscode-go
|
@alexandrudima My findings were similar to what @wingrunr21 is saying above. @wingrunr21 In The above mitigation works for electron/electron#13254. I am still looking into if electron/electron#13679 has any affect on |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
wingrunr21
Aug 15, 2018
@ramya-rao-a ah, that makes sense. That auto detection is a problem I'm still trying to solve as a lot of Ruby environments are configured via shell functions and can vary by directory. That's why I proposed checking via command -v
wingrunr21
commented
Aug 15, 2018
|
@ramya-rao-a ah, that makes sense. That auto detection is a problem I'm still trying to solve as a lot of Ruby environments are configured via shell functions and can vary by directory. That's why I proposed checking via |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
trevorwhealy
Aug 15, 2018
Updated yesterday. None of eslint, prettier, nor gitlens work.
Downloaded the version from June to get work done today.
Works great. https://code.visualstudio.com/updates/v1_25
trevorwhealy
commented
Aug 15, 2018
|
Updated yesterday. None of eslint, prettier, nor gitlens work. |
alexandrudima
added
the
important
label
Aug 16, 2018
alexandrudima
added this to the July Recovery 2018 milestone
Aug 16, 2018
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
alexandrudima
Aug 16, 2018
Member
A minimal repro:
const child = cp.spawn(`node1`);
child.stdin.write('hi standard in!');And a minimal fix from an extension would be to always check child.pid before using stdin:
const child = cp.spawn(`node1`);
if (child.pid) {
child.stdin.write('hi standard in!');
}|
A minimal repro: const child = cp.spawn(`node1`);
child.stdin.write('hi standard in!');And a minimal fix from an extension would be to always check const child = cp.spawn(`node1`);
if (child.pid) {
child.stdin.write('hi standard in!');
} |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
nirfse
Aug 16, 2018
I have the same issue with the Python extension after 1.26.0 update:
t.log @ /opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272
/opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272 [Extension Host] Failed to get interpreter information for '/home/user/.local/share/virtualenvs/webapp-Ab5ma23j/bin/python' SyntaxError: Unexpected token / in JSON at
position 0
at JSON.parse (<anonymous>)
at PythonExecutionService.<anonymous> (/home/user/.vscode/extensions/ms-python.python-2018.7.1/out/client/common/process/pythonProcess.js:42:35)
at Generator.next (<anonymous>)
at fulfilled (/home/user/.vscode/extensions/ms-python.python-2018.7.1/out/client/common/process/pythonProcess.js:12:58)
at <anonymous>
t.log @ /opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272
/opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272 [Extension Host] Summary:
/opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272 [Extension Host]% 19 parseable documents found
/opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272 [Extension Host]% 324 CSS class definitions found
/opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272 [Extension Host]% 102 unique CSS class definitions found
/opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272 [Extension Host]% 1 failed attempts to parse. List of the documents:
/opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272 [Extension Host] /home/user/Projects/latest/srv_webapp/app/static/css/styles.css
/opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272 [Extension Host] Failed to get interpreter information for '/home/user/.local/share/virtualenvs/webapp-Ab5ma23j/bin/python' SyntaxError: Unexpected token / in JSON at position 0
at JSON.parse (<anonymous>)
at PythonExecutionService.<anonymous> (/home/user/.vscode/extensions/ms-python.python-2018.7.1/out/client/common/process/pythonProcess.js:42:35)
at Generator.next (<anonymous>)
at fulfilled (/home/user/.vscode/extensions/ms-python.python-2018.7.1/out/client/common/process/pythonProcess.js:12:58)
at <anonymous>
t.log @ /opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272
/opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272 [Extension Host] Python Extension: display.refresh TypeError: Cannot read property 'version' of undefined
at InterpreterService.<anonymous> (/home/user/.vscode/extensions/ms-python.python-2018.7.1/out/client/interpreter/interpreterService.js:135:44)
at Generator.next (<anonymous>)
at fulfilled (/home/user/.vscode/extensions/ms-python.python-2018.7.1/out/client/interpreter/interpreterService.js:13:58)
at <anonymous>
t.log @ /opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:272
/opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:3213 Extension host terminated unexpectedly. Code: null Signal: SIGPIPE
w._onExtensionHostCrashed @ /opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:3213
/opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:2386 Extension host terminated unexpectedly.
t.onDidNotificationChange @ /opt/visual-studio-code/resources/app/out/vs/workbench/workbench.main.js:2386
Visual Studio Code (binary, stable)
Version: 1.26.0-3
OS: Linux
Electron: 2.0.5
Chrome: 61.0.3163.100
Node.js: 8.9.3
V8: 6.1.534.41
Arch: x64
nirfse
commented
Aug 16, 2018
|
I have the same issue with the Python extension after 1.26.0 update:
Visual Studio Code (binary, stable) |
added a commit
that referenced
this issue
Aug 16, 2018
alexandrudima
closed this
in
a17c20f
Aug 16, 2018
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
alexandrudima
Aug 16, 2018
Member
It looks like the root cause is electron/electron#13254. We have identified a simple workaround to avoid the crash.
To verify, you can use the following extension:
package.json:
{
"name": "56387",
"version": "0.0.1",
"publisher": "alex",
"engines": {
"vscode": "^1.25.0"
},
"activationEvents": [
"onCommand:extension.sayHello"
],
"main": "./extension",
"contributes": {
"commands": [
{
"command": "extension.sayHello",
"title": "Hello World"
}
]
}
}extension.js:
const vscode = require('vscode');
const cp = require('child_process');
exports.activate = function(context) {
let disposable = vscode.commands.registerCommand('extension.sayHello', function () {
console.log(`in repro1`);
const child = cp.spawn(`/node1`);
child.stdin.write('hi standard in!');
});
context.subscriptions.push(disposable);
}|
It looks like the root cause is electron/electron#13254. We have identified a simple workaround to avoid the crash. To verify, you can use the following extension:
{
"name": "56387",
"version": "0.0.1",
"publisher": "alex",
"engines": {
"vscode": "^1.25.0"
},
"activationEvents": [
"onCommand:extension.sayHello"
],
"main": "./extension",
"contributes": {
"commands": [
{
"command": "extension.sayHello",
"title": "Hello World"
}
]
}
}
const vscode = require('vscode');
const cp = require('child_process');
exports.activate = function(context) {
let disposable = vscode.commands.registerCommand('extension.sayHello', function () {
console.log(`in repro1`);
const child = cp.spawn(`/node1`);
child.stdin.write('hi standard in!');
});
context.subscriptions.push(disposable);
} |
alexandrudima
added
bug
and removed
needs more info
labels
Aug 16, 2018
jrieken
added
the
verified
label
Aug 16, 2018
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
nirfse
Aug 16, 2018
@alexandrudima After 20 minutes of testing, I can confirm that provided patch so far fixes the issue. Tested on Arch Linux OS with the official VSCode binary. Thanks a lot!
nirfse
commented
Aug 16, 2018
|
@alexandrudima After 20 minutes of testing, I can confirm that provided patch so far fixes the issue. Tested on Arch Linux OS with the official VSCode binary. Thanks a lot! |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
mickeygo
commented
Aug 17, 2018
|
The vscode-go update on my Mac today, now it works fine. |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
Kevin8428
Aug 17, 2018
@mickeygo @alexandrudima can anyone help me, I can't figure out how to implement this update. Thanks!
Kevin8428
commented
Aug 17, 2018
|
@mickeygo @alexandrudima can anyone help me, I can't figure out how to implement this update. Thanks! |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
mickeygo
Aug 17, 2018
@Kevin8428 I mean that now the extension vscode-go update to 0.6.88 version and it will work fine on Mac, does not need to change the config file. I don't know other extensions. Thanks !
mickeygo
commented
Aug 17, 2018
|
@Kevin8428 I mean that now the extension vscode-go update to 0.6.88 version and it will work fine on Mac, does not need to change the config file. I don't know other extensions. Thanks ! |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
Kevin8428
commented
Aug 17, 2018
|
ahh same! thanks! |
natenorberg commentedAug 14, 2018
Issue Type: Bug
When I open VS Code I get a toast that says "Extension host terminated unexpectedly."
Usually this happens on startup, but occasionally extensions remain functional until I open, close, switch, or save a tab.
This never occurred before I updated to v.1.26.0 this morning. I saw a few similar issues, but they seem to end up being related to extensions I don't use such as ruby or go.
Dev tools output
VS Code version: Code 1.26.0 (4e93618, 2018-08-13T16:20:44.170Z)
OS version: Darwin x64 17.7.0
System Info
checker_imaging: disabled_off
flash_3d: enabled
flash_stage3d: enabled
flash_stage3d_baseline: enabled
gpu_compositing: enabled
multiple_raster_threads: enabled_on
native_gpu_memory_buffers: enabled
rasterization: enabled
video_decode: enabled
video_encode: enabled
webgl: enabled
webgl2: enabled
Extensions (22)
(24 theme extensions excluded)