remotion-dev/remotion · critical · Error

Version ${reactDomVersion} of "react-dom" is not supported b

Error message

Version ${reactDomVersion} of "react-dom" is not supported by Remotion

What it means

After confirming react-dom has a version, the bundler parses the major version (first dot-segment). If it equals the string '0', it is rejected as unsupported, because no real react-dom release has a 0.x version. This fires when react-dom resolves to a stub, mock, or alien module that reports a bogus version like '0.0.0'.

Source

Thrown at packages/bundler/src/shared-bundler-config.ts:14

import {createHash} from 'node:crypto';
import path from 'node:path';
import ReactDOM from 'react-dom';
import {NoReactInternals} from 'remotion/no-react';
import {jsonStringifyWithCircularReferences} from './stringify-with-circular-references';
import {getWebpackCacheName} from './webpack-cache';

if (!ReactDOM?.version) {
	throw new Error('Could not find "react-dom" package. Did you install it?');
}

const reactDomVersion = ReactDOM.version.split('.')[0];
if (reactDomVersion === '0') {
	throw new Error(
		`Version ${reactDomVersion} of "react-dom" is not supported by Remotion`,
	);
}

export const shouldUseReactDomClient =
	NoReactInternals.ENABLE_V5_BREAKING_CHANGES
		? true
		: parseInt(reactDomVersion, 10) >= 18;

export const getResolveConfig = () => ({
	extensions: ['.ts', '.tsx', '.web.js', '.js', '.jsx', '.mjs', '.cjs'],
	alias: {
		// Only one version of react
		'react/jsx-runtime': require.resolve('react/jsx-runtime'),
		'react/jsx-dev-runtime': require.resolve('react/jsx-dev-runtime'),
		react: require.resolve('react'),
		// Needed to not fail on this: https://github.com/remotion-dev/remotion/issues/5045
		'remotion/no-react': path.resolve(

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Reinstall a real, supported react-dom (18 or 19) and remove any stub/mock/alias.
  2. Run npm ls react-dom (or bun pm ls) to confirm which package and version actually resolves.
  3. Delete node_modules and the lockfile entries for react-dom and reinstall if the install is corrupted.
  4. Check package.json overrides/resolutions for react-dom and remove stubs.

Example fix

// before: overrides force react-dom to a stub
// "overrides": { "react-dom": "file:./stubs/react-dom-stub" }

// after
// "dependencies": { "react-dom": "^19.0.0" }  // and remove the override
Defensive patterns

Strategy: validation

Validate before calling

import {createRequire} from 'node:module';
const require = createRequire(import.meta.url);
const assertReactDomVersion = () => {
  const v = require('react-dom/package.json').version as string;
  const major = v.split('.')[0];
  if (major === '0') {
    throw new Error(`react-dom resolves to version ${v}; install a real react-dom (18 or 19)`);
  }
};

Prevention

When it happens

Trigger: react-dom resolves to a module whose version string starts with '0' — a test mock, an empty stub, a placeholder package, or a corrupted/partial install reporting an invalid version.

Common situations: Module aliases mapping react-dom to a stub for tests; a corrupted node_modules; an override forcing a wrong package; a hand-rolled shim that hardcodes version '0.0.0'.

Related errors


AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12). Data as JSON: /api/errors/ce4830c646540cbb. Report an issue: GitHub.