Self Checks
Steps to reproduce
Description
Installing a marketplace plugin currently runs npm install synchronously inside the API request handler.
While the installation is in progress, the Node.js event loop of that API replica is blocked. Other requests routed to the same replica remain pending, causing unrelated pages and users to become unavailable.
With the default single-replica deployment, this can effectively pause the entire API during plugin installation.
Steps to reproduce
- Open the plugin marketplace.
- Install a plugin that is not already cached.
- While the installation request is pending:
- Open
/xpert/w in another tab; or
- Request
/api/health or /api/user/me.
- Observe that the new page remains on the clock bootstrap loader and the API requests stay pending.
- Once
npm install finishes, the pending requests resume.
Expected behavior
Plugin installation may take time, but unrelated API requests should continue to respond normally.
Actual behavior
All requests handled by the same API process are blocked until the synchronous plugin installation finishes or fails.
Root cause
The marketplace installation flow is executed inline:
POST /plugin
-> PluginManagementService.installPlugin()
-> registerPluginsAsync()
-> installOrganizationPlugins()
-> execSync("npm install ...")
### ✔️ Expected Behavior
_No response_
### ❌ Actual Behavior
_No response_
Self Checks
Steps to reproduce
Description
Installing a marketplace plugin currently runs
npm installsynchronously inside the API request handler.While the installation is in progress, the Node.js event loop of that API replica is blocked. Other requests routed to the same replica remain pending, causing unrelated pages and users to become unavailable.
With the default single-replica deployment, this can effectively pause the entire API during plugin installation.
Steps to reproduce
/xpert/win another tab; or/api/healthor/api/user/me.npm installfinishes, the pending requests resume.Expected behavior
Plugin installation may take time, but unrelated API requests should continue to respond normally.
Actual behavior
All requests handled by the same API process are blocked until the synchronous plugin installation finishes or fails.
Root cause
The marketplace installation flow is executed inline: