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

  1. Change the variable to re-enable scripting: FREEZE_INTEGRATION_SCRIPTS=no (or unset it) and restart
  2. If freezing is intended, remove Script usage from integrations instead — the flag stays and the error disappears because no engine is validated
  3. 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

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


AI-assisted analysis of RocketChat/Rocket.Chat@b2c16d5842 (2026-08-18). Data as JSON: /api/errors/5cdf7f7f8cb2cef5. Report an issue: GitHub.