The CanvasRenderingContext2D.globalCompositeOperation property of the Canvas 2D API sets the type of compositing operation to apply when drawing new shapes, where type is a string identifying which of the compositing or blending mode operations to use.

See also the chapter Compositing in the Canvas Tutorial.


ctx.globalCompositeOperation = type;



Using the globalCompositeOperation property

This is just a simple code snippet using the globalCompositeOperation property to draw two rectangles that exclude themselves where they overlap.


<canvas id="canvas"></canvas>


var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

ctx.globalCompositeOperation = "xor";

ctx.fillStyle = "blue";
ctx.fillRect(10, 10, 100, 100);

ctx.fillStyle = "red";
ctx.fillRect(50, 50, 100, 100);

Edit the code below and see your changes update live in the canvas:


Specification Status Comment
WHATWG HTML Living Standard
The definition of 'CanvasRenderingContext2D.globalCompositeOperation' in that specification.
Living Standard  
Compositing and blending Level 1 Candidate Recommendation  

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Blend modes ? 20 (20) ? ? ?
Feature Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
Blend modes ? ? 20.0 (20) ? ? ? ?
  • In WebKit- and Blink-based Browsers, a non-standard and deprecated method ctx.setCompositeOperation() is implemented besides this property.
  • Support for "plus-darker" and "darker" were removed in Chrome 48. Developers looking a replacement should use "darken".

Gecko-specific notes

  • An early Canvas specification draft specified the value "darker". However, Firefox removed support for "darker" in version 4 (bug 571532). See also this blog post that suggests to use the difference value to achieve a similar affect to "darker".

See also

Document Tags and Contributors

 Contributors to this page: jpmedley, fscholz
 Last updated by: jpmedley,