RocketChat/Rocket.Chat · error · Meteor.Error

error-essential-app-disabled

error-essential-app-disabled

Error message

error-essential-app-disabled

What it means

Thrown by the App server orchestrator's `triggerEvent` when an app's event listener rejects with `EssentialAppDisabledException`. It re-wraps that exception as a `Meteor.Error('error-essential-app-disabled')` so the Meteor method/publish layer can surface a stable, translatable error code to the client. It indicates an app marked 'essential' has been disabled (typically by license invalidation or admin action) and therefore the event could not be processed.

Source

Thrown at apps/meteor/ee/server/apps/orchestrator.ts:439

	async installedApps(filter: IGetAppsFilter = {}): Promise<ProxiedApp[] | undefined> {
		if (!this.isLoaded()) {
			return;
		}

		return this._manager.get(filter);
	}

	async triggerEvent(event: AppEvents, ...payload: any[]): Promise<any> {
		if (!this.isLoaded()) {
			return;
		}

		return this._bridges
			.getListenerBridge()
			.handleEvent({ event, payload } as HandleEvent)
			.catch((error: unknown) => {
				if (error instanceof EssentialAppDisabledException) {
					throw new Meteor.Error('error-essential-app-disabled');
				}

				throw error;
			});
	}
}

export const Apps = new AppServerOrchestrator();
registerOrchestrator(Apps);

View on GitHub (pinned to f9d3ec372b)

Solutions

  1. Re-enable the essential app in Administration > Apps and confirm it is in a loaded/running state.
  2. Check the license is valid and includes the module the essential app requires (`License.hasModule(...)`).
  3. Restart the Apps subsystem after re-enabling so `isLoaded()` reflects the new state.
  4. If intentional, communicate the disabled-app state to end users so they understand dependent features are unavailable.
Defensive patterns

Strategy: try-catch

Validate before calling

import { Apps } from '../orchestrator';

function essentialAppsReady(): boolean {
	return Apps.isLoaded();
}

Type guard

function isEssentialAppDisabledError(e: unknown): boolean {
	return e instanceof Meteor.Error && (e as Meteor.Error).error === 'error-essential-app-disabled';
}

Try / catch

try {
	await Apps.triggerEvent(AppEvents.MESSAGE_SENT, message);
} catch (e) {
	if (e instanceof Meteor.Error && e.error === 'error-essential-app-disabled') {
		// notify user the feature is unavailable; do not retry blindly
	}
	throw e;
}

Prevention

When it happens

Trigger: Any `Apps.triggerEvent(...)` call where a registered listener throws `EssentialAppDisabledException` — i.e. an essential app's bridge handler detected the app is disabled while processing a live event (e.g. message send, room create). The orchestrator must be loaded (`isLoaded()` true) for the handler to even run.

Common situations: An enterprise/essential app's license module was removed or invalidated mid-session; an admin disabled an app flagged essential; license downgrade removed a required module that the essential app depends on.

Related errors


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