coderef

Offscreen canvasBaseline · Widely available

The OffscreenCanvas API provides a canvas that can be drawn to off screen, with no dependencies on the DOM, which can be used to run heavy rendering operations inside a worker context.

Supported in all major browsers for at least 30 months — safe to use without fallbacks. Baseline since Mar 27, 2023. Widely available since Sep 27, 2025.

Browser support

DesktopChrome
1–68Not supported
69+Supportedsince Sep 4, 2018
Current: 155
Edge
12–18Not supported
79+Supportedsince Jan 15, 2020
Current: 154
Firefox
1–104Not supported
105+Supportedsince Sep 20, 2022
Current: 157
Safari
1–16.3Not supported
16.4+Supportedsince Mar 27, 2023
Current: 27
MobileChrome Android
18–68Not supported
69+Supportedsince Sep 4, 2018
Current: 155
Firefox Android
4–104Not supported
105+Supportedsince Sep 20, 2022
Current: 157
Safari iOS
1–16.3Not supported
16.4+Supportedsince Mar 27, 2023
Current: 27

How to use

This feature is Baseline widely available — use it freely, no fallback needed.

Example

Full syntax and examples are on MDN: transferControlToOffscreen.

Feature detection

JS · check before using
if ("OffscreenCanvas" in globalThis) {
  // OffscreenCanvas is available
} else {
  // load a polyfill or use a fallback
}

Sub-features

Support for each part of the feature (80). The overall table above shows when the whole feature works.

Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
HTMLCanvasElement.transferControlToOffscreen697910516.46910516.4
OffscreenCanvas697910516.46910516.4
OffscreenCanvas.OffscreenCanvas697910516.46910516.4
OffscreenCanvas.convertToBlob697910516.46910516.4
OffscreenCanvas.convertToBlob.option_type_parameter_webp6979105✕69105✕
OffscreenCanvas.getContext697910516.46910516.4
OffscreenCanvas.getContext.2d_context697910516.46910516.4
OffscreenCanvas.getContext.bitmaprenderer_context767910516.47610516.4
OffscreenCanvas.getContext.webgl2_context6979105176910517
OffscreenCanvas.getContext.webgl_context6979105176910517
OffscreenCanvas.height697910516.46910516.4
OffscreenCanvas.transferToImageBitmap697910516.46910516.4
OffscreenCanvas.width697910516.46910516.4
OffscreenCanvasRenderingContext2D697910516.46910516.4
OffscreenCanvasRenderingContext2D.arc697910516.46910516.4
OffscreenCanvasRenderingContext2D.arcTo697910516.46910516.4
OffscreenCanvasRenderingContext2D.beginPath697910516.46910516.4
OffscreenCanvasRenderingContext2D.bezierCurveTo697910516.46910516.4
OffscreenCanvasRenderingContext2D.canvas697910516.46910516.4
OffscreenCanvasRenderingContext2D.clearRect697910516.46910516.4
Show 60 more
Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
OffscreenCanvasRenderingContext2D.clip697910516.46910516.4
OffscreenCanvasRenderingContext2D.closePath697910516.46910516.4
OffscreenCanvasRenderingContext2D.createImageData697910516.46910516.4
OffscreenCanvasRenderingContext2D.createLinearGradient697910516.46910516.4
OffscreenCanvasRenderingContext2D.createPattern697910516.46910516.4
OffscreenCanvasRenderingContext2D.createRadialGradient697910516.46910516.4
OffscreenCanvasRenderingContext2D.direction697910516.46910516.4
OffscreenCanvasRenderingContext2D.drawImage697910516.46910516.4
OffscreenCanvasRenderingContext2D.ellipse697910516.46910516.4
OffscreenCanvasRenderingContext2D.fill697910516.46910516.4
OffscreenCanvasRenderingContext2D.fillRect697910516.46910516.4
OffscreenCanvasRenderingContext2D.fillStyle697910516.46910516.4
OffscreenCanvasRenderingContext2D.fillText697910516.46910516.4
OffscreenCanvasRenderingContext2D.filter6979116✕69116✕
OffscreenCanvasRenderingContext2D.font697910518.46910518.4
OffscreenCanvasRenderingContext2D.fontKerning9999105✕99105✕
OffscreenCanvasRenderingContext2D.fontStretch9999117✕99117✕
OffscreenCanvasRenderingContext2D.fontVariantCaps9999117✕99117✕
OffscreenCanvasRenderingContext2D.getImageData697910516.46910516.4
OffscreenCanvasRenderingContext2D.getLineDash697910516.46910516.4
OffscreenCanvasRenderingContext2D.getTransform808010516.48010516.4
OffscreenCanvasRenderingContext2D.globalAlpha697910516.46910516.4
OffscreenCanvasRenderingContext2D.globalCompositeOperation697910516.46910516.4
OffscreenCanvasRenderingContext2D.imageSmoothingEnabled697910516.46910516.4
OffscreenCanvasRenderingContext2D.imageSmoothingQuality6979✕16.469✕16.4
OffscreenCanvasRenderingContext2D.isPointInPath697910516.46910516.4
OffscreenCanvasRenderingContext2D.isPointInStroke697910516.46910516.4
OffscreenCanvasRenderingContext2D.letterSpacing999911518.49911518.4
OffscreenCanvasRenderingContext2D.lineCap697910516.46910516.4
OffscreenCanvasRenderingContext2D.lineDashOffset697910516.46910516.4
OffscreenCanvasRenderingContext2D.lineJoin697910516.46910516.4
OffscreenCanvasRenderingContext2D.lineTo697910516.46910516.4
OffscreenCanvasRenderingContext2D.lineWidth697910516.46910516.4
OffscreenCanvasRenderingContext2D.measureText697910516.46910516.4
OffscreenCanvasRenderingContext2D.miterLimit697910516.46910516.4
OffscreenCanvasRenderingContext2D.moveTo697910516.46910516.4
OffscreenCanvasRenderingContext2D.putImageData697910516.46910516.4
OffscreenCanvasRenderingContext2D.quadraticCurveTo697910516.46910516.4
OffscreenCanvasRenderingContext2D.rect697910516.46910516.4
OffscreenCanvasRenderingContext2D.resetTransform697910516.46910516.4
OffscreenCanvasRenderingContext2D.restore697910516.46910516.4
OffscreenCanvasRenderingContext2D.rotate697910516.46910516.4
OffscreenCanvasRenderingContext2D.save697910516.46910516.4
OffscreenCanvasRenderingContext2D.scale697910516.46910516.4
OffscreenCanvasRenderingContext2D.setLineDash697910516.46910516.4
OffscreenCanvasRenderingContext2D.setTransform697910516.46910516.4
OffscreenCanvasRenderingContext2D.shadowBlur697910516.46910516.4
OffscreenCanvasRenderingContext2D.shadowColor697910516.46910516.4
OffscreenCanvasRenderingContext2D.shadowOffsetX697910516.46910516.4
OffscreenCanvasRenderingContext2D.shadowOffsetY697910516.46910516.4
OffscreenCanvasRenderingContext2D.stroke697910516.46910516.4
OffscreenCanvasRenderingContext2D.strokeRect697910516.46910516.4
OffscreenCanvasRenderingContext2D.strokeStyle697910516.46910516.4
OffscreenCanvasRenderingContext2D.strokeText697910516.46910516.4
OffscreenCanvasRenderingContext2D.textAlign697910516.46910516.4
OffscreenCanvasRenderingContext2D.textBaseline697910516.46910516.4
OffscreenCanvasRenderingContext2D.textRendering9999116✕99116✕
OffscreenCanvasRenderingContext2D.transform697910516.46910516.4
OffscreenCanvasRenderingContext2D.translate697910516.46910516.4
OffscreenCanvasRenderingContext2D.wordSpacing999911518.49911518.4