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
- Re-enable the essential app in Administration > Apps and confirm it is in a loaded/running state.
- Check the license is valid and includes the module the essential app requires (`License.hasModule(...)`).
- Restart the Apps subsystem after re-enabling so `isLoaded()` reflects the new state.
- 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
- Ensure essential apps and their license modules are active before relying on their events.
- Surface a clear user-facing message when an essential feature is unavailable.
- Alert admins when an essential app transitions to disabled.
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
- error-license-user-limit-reached
- Invalid path configured for file system App storage
- Invalid source path
- App already exists.
- error-room-is-abac-managed
AI-assisted analysis of RocketChat/Rocket.Chat@f9d3ec372b (2026-08-12).
Data as JSON: /api/errors/5e385b4c4663b045.
Report an issue: GitHub.