remotion-dev/remotion · error · Error

Checkerboard program link failed: ${log ?? '(no log)'}

Error message

Checkerboard program link failed: ${log ?? '(no log)'}

What it means

Thrown by linkProgram() for the checkerboard effect when the vertex and fragment shaders both compiled but gl.linkProgram() failed (LINK_STATUS false). The message embeds the program info log. For the shipped static shaders this normally reflects a driver bug, a varying/uniform mismatch introduced by a driver's GLSL ES 3.00 implementation, or a degraded context rather than a source defect.

Source

Thrown at packages/effects/src/checkerboard.ts:309

};

const linkProgram = (
	gl: WebGL2RenderingContext,
	vs: WebGLShader,
	fs: WebGLShader,
): WebGLProgram => {
	const program = gl.createProgram();
	if (!program) {
		throw new Error('Failed to create WebGL program');
	}

	gl.attachShader(program, vs);
	gl.attachShader(program, fs);
	gl.linkProgram(program);
	if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
		const log = gl.getProgramInfoLog(program);
		gl.deleteProgram(program);
		throw new Error(`Checkerboard program link failed: ${log ?? '(no log)'}`);
	}

	return program;
};

const createProgram = (
	gl: WebGL2RenderingContext,
	vertexSource: string,
	fragmentSource: string,
): WebGLProgram => {
	const vs = compileShader(gl, gl.VERTEX_SHADER, vertexSource);
	const fs = compileShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
	const program = linkProgram(gl, vs, fs);
	gl.deleteShader(vs);
	gl.deleteShader(fs);
	return program;
};

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Read the embedded info log to see the linker's complaint (e.g. unresolved varying, location clash).
  2. Update GPU drivers to the latest stable version.
  3. Switch to a GPU-accelerated renderer (disable software fallback).
  4. Upgrade @remotion/effects to ensure the shipped shaders are intact.
  5. Reproduce in Chrome for Testing on different hardware to confirm a driver-specific issue.
Defensive patterns

Strategy: try-catch

Try / catch

try {
  return <Checkerboard {...props} />;
} catch (err) {
  const msg = String(err);
  if (/Checkerboard program link failed/.test(msg)) {
  reportShaderError(msg);
  return <FallbackFrame />;
  }
  throw err;
}

Prevention

When it happens

Trigger: gl.linkProgram() at checkerboard.ts:305 completes but gl.getProgramParameter(LINK_STATUS) is false at :306; the info log is read, the program deleted, and the error at :309 is thrown with the log.

Common situations: Outdated/buggy GPU drivers, software rasterizers with incomplete GLSL ES 3.00 linkers, GPUs on the browser's blocklist, or a corrupted build of @remotion/effects altering shader sources.

Related errors


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