remotion-dev/remotion · error

shutDownStudio() is not supported in Browser Studio

Error message

shutDownStudio() is not supported in Browser Studio

What it means

The Browser Studio (Studio running purely in a hosted browser context) does not implement the shutdown-studio operation, so shutDownStudio() rejects calls there. Only the locally-running Studio server can be shut down via this API.

Source

Thrown at packages/studio/src/api/shut-down-studio.ts:17

/**
 * @description Shuts down the Remotion Studio.
 * @see [Documentation](https://www.remotion.dev/docs/studio/shut-down-studio)
 */

import type {ShutdownStudioResponse} from '@remotion/studio-shared';
import {getRemotionEnvironment} from 'remotion';
import {callApi} from '../components/call-api';
import {getBrowserStudioOperations} from '../helpers/browser-studio-operations';

export const shutDownStudio = (): Promise<ShutdownStudioResponse> => {
	if (!getRemotionEnvironment().isStudio) {
		throw new Error('shutDownStudio() is only available in the Studio');
	}

	if (getBrowserStudioOperations() !== null) {
		throw new Error('shutDownStudio() is not supported in Browser Studio');
	}

	if (window.remotion_isReadOnlyStudio) {
		throw new Error('shutDownStudio() is not available in read-only Studio');
	}

	return callApi('/api/shutdown-studio', {});
};

View on GitHub (pinned to b2f4e34732)

Solutions

  1. Check getBrowserStudioOperations() !== null and skip/hide the shutdown control in Browser Studio
  2. Only expose shutDownStudio() UI in the local Studio build
  3. Handle the thrown error and show a 'not supported here' message to the user

Example fix

// before
await shutDownStudio();
// after
import {getBrowserStudioOperations} from '../helpers/browser-studio-operations';
if (getBrowserStudioOperations() === null) {
  await shutDownStudio();
}
Defensive patterns

Strategy: type-guard

Validate before calling

import {getBrowserStudioOperations} from '../helpers/browser-studio-operations';
const canShutdown = getBrowserStudioOperations() === null;

Type guard

const isLocalStudio = (): boolean => getBrowserStudioOperations() === null;

Try / catch

try {
  await shutDownStudio();
} catch (e) {
  if ((e as Error).message.includes('Browser Studio')) {
    // hide shutdown UI or notify user
  } else { throw e; }
}

Prevention

When it happens

Trigger: Calling shutDownStudio() while getBrowserStudioOperations() !== null, i.e. inside the Browser Studio build of the Studio UI.

Common situations: Shared Studio components/panels whose code executes both in the desktop/local Studio and the hosted Browser Studio; extensions or plugins calling the API unconditionally.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of remotion-dev/remotion@b2f4e34732 (2026-09-09). Data as JSON: /api/errors/14954d9da2861225. Report an issue: GitHub.