How to properly register a macOS System Extension in an Electron app?

Hi everyone,

I’m developing an Electron application on macOS and I’m trying to register and activate a macOS System Extension, but I’m running into startup and entitlement issues.

🔧 What I’m trying to build

•	An Electron app packaged with electron-builder
•	Signed with Developer ID Application
•	Notarized using @electron/notarize
•	A macOS System Extension is already built and signed
•	The System Extension provides a virtual camera
•	I wrote a Swift helper that:
•	Registers / activates the virtual camera
•	Calls OSSystemExtensionManager
•	This Swift code is compiled into a .node native addon
•	The .node module is loaded and called from Electron (Node.js) to trigger system extension registration

❗ The problem

When I add the following entitlement: <key>com.apple.developer.system-extension.install</key> <true/>

the application fails to launch at all on macOS.

Without this entitlement:

•	The app launches normally
•	But system extension activation fails with:

Error Domain=OSSystemExtensionErrorDomain Code=2 Missing entitlement com.apple.developer.system-extension.install

With this entitlement:

•	The app does not launch
•	No UI is shown
•	macOS blocks execution silently

🤔 My questions

1.	Is it valid for an Electron app’s main executable to have com.apple.developer.system-extension.install?

2.	Does Apple require a separate helper / launcher app to install system extensions instead of the Electron main app?

3.	Are there any Electron-specific limitations when working with macOS System Extensions?

4.	Is there a known working example of Electron + macOS System Extension?

5.	Do I need a specific provisioning profile or App ID capability beyond Developer ID + notarization?

I don't know if there's anything Electron-specific, but if your app has com.apple.developer.system-extension.install, you need a NSSystemExtensionUsageDescriptionKey or OSBundleUsageDescriptionKey (for DriverKit extensions).

Your failure to launch may not be what you think it is. Your program may have some code which unconditionally registers your extension at launch time, and your lack of the required usage description causes the system to terminate your app very early in its life cycle. You may be able to see what is going on my monitoring the console log (filter on your app's bundle ID)

How to properly register a macOS System Extension in an Electron app?
 
 
Q