RocketChat/Rocket.Chat · error · Error
integration-scripts-isolated-vm-disabled
Error message
integration-scripts-isolated-vm-disabled
What it means
validateScriptEngine throws this plain Error when the environment variable FREEZE_INTEGRATION_SCRIPTS is exactly 'ivm'. This value is distinct from the blanket 'yes'/'true' freeze: it specifically disables the isolated-vm engine — which is currently the only engine — so the practical effect is that integration scripts cannot run while everything else keeps working. Any call validating the engine (save or execute) aborts.
Source
Thrown at apps/meteor/server/lib/integrations/lib/validateScriptEngine.ts:19
import type { IntegrationScriptEngine } from '@rocket.chat/core-typings';
import { wrapExceptions } from '@rocket.chat/tools';
const FREEZE_INTEGRATION_SCRIPTS_VALUE = String(process.env.FREEZE_INTEGRATION_SCRIPTS).toLowerCase();
const FREEZE_INTEGRATION_SCRIPTS = ['yes', 'true'].includes(FREEZE_INTEGRATION_SCRIPTS_VALUE);
export const validateScriptEngine = (engine?: IntegrationScriptEngine) => {
if (FREEZE_INTEGRATION_SCRIPTS) {
throw new Error('integration-scripts-disabled');
}
if (engine && engine !== 'isolated-vm') {
throw new Error('integration-scripts-unknown-engine');
}
const engineCode = 'ivm';
if (engineCode === FREEZE_INTEGRATION_SCRIPTS_VALUE) {
throw new Error('integration-scripts-isolated-vm-disabled');
}
return true;
};
export const isScriptEngineFrozen = (engine?: IntegrationScriptEngine) =>
wrapExceptions(() => !validateScriptEngine(engine)).catch(() => true);
View on GitHub (pinned to b2c16d5842)
Solutions
- Change the variable to re-enable scripting: FREEZE_INTEGRATION_SCRIPTS=no (or unset it) and restart
- If freezing is intended, remove Script usage from integrations instead — the flag stays and the error disappears because no engine is validated
- Use the exported isScriptEngineFrozen() helper (or check the env value) to detect this state programmatically
Example fix
# before FREEZE_INTEGRATION_SCRIPTS=ivm # after FREEZE_INTEGRATION_SCRIPTS=no # or remove the variable entirely
Defensive patterns
Strategy: validation
Validate before calling
if (String(process.env.FREEZE_INTEGRATION_SCRIPTS ?? '').toLowerCase() === 'ivm') {
throw new Error('isolated-vm integration scripts are frozen in this deployment');
} Try / catch
try {
validateScriptEngine(engine);
} catch (err) {
if (err instanceof Error && err.message === 'integration-scripts-isolated-vm-disabled') {
// FREEZE_INTEGRATION_SCRIPTS=ivm: only engine is disabled; drop scripts or change the env
} else {
throw err;
}
} Prevention
- Treat 'ivm' as a freeze value, not an engine selector, when configuring FREEZE_INTEGRATION_SCRIPTS
- Surface isScriptEngineFrozen() in health checks so scripted integrations fail loudly at deploy time, not at runtime
When it happens
Trigger: Server started with FREEZE_INTEGRATION_SCRIPTS=ivm and then any attempt to save an integration with a Script or to execute an existing scripted integration; the constant engineCode 'ivm' is compared against the lowercased env value, so 'IVM' also matches after lowercasing.
Common situations: Rocket.Chat 9.x-style deployments where integrations are frozen but the flag is set to the engine code rather than 'yes'; operators copying freeze examples from release notes; checking configuration after upgrade and mistaking 'ivm' for an engine selector.
Related errors
- integration-scripts-disabled
- integration-scripts-unknown-engine
- error-evaluating-script
- The integration does not exists.
- not-authorized
AI-assisted analysis of RocketChat/Rocket.Chat@b2c16d5842 (2026-08-18).
Data as JSON: /api/errors/5cdf7f7f8cb2cef5.
Report an issue: GitHub.