Canvas drawing moves to the graphics card
Pages that draw with canvas (charts, games, editors, generative art) now keep their drawing on the graphics card: shapes, lines, sprites, all three kinds of gradient, clips, blend modes and shadows. Before this release only plain image draws went there, and any shape sent the whole canvas back to the processor. On our canvas benchmark every pixel is the same as the software canvas gives, on Mac and on Windows. That sameness is the point: a canvas that draws identical bytes on every graphics card cannot be used to fingerprint the card, which is what canvas fingerprinting scripts read. Correction (9 Nov 2026): this note first said the browser was faster than the reference browser on 9 of 11 benchmark rows, up to 19 times on full-screen fills. Those reference times came from an older version of the reference browser, measured on 4 Nov. Measured side by side with its current version, the browser is faster on 5 of 11 rows (full-screen fills, gradients, lines, text and reading pixels back) and slower on circles, sprites and shadows, which is the work that comes next.
Shapes on the graphics card, pixel for pixel
A filled shape or a stroked line becomes coverage: how much of each pixel the shape covers. The processor used to work that out for every pixel of the shape's box. Now it only cuts the shape's edges where they cross each pixel row, about one number per row, and the graphics card adds up the coverage inside each 16 by 16 tile itself. Every crossing has an exact whole-number form, so a tile can start in the middle of an edge and still get the processor's numbers, and there is no division on the graphics card (Apple GPUs get some whole-number divisions wrong next to loops).
The graphics card and the page work at the same time
The canvas used to send a batch of drawing to the graphics card and wait for it to finish before recording more. Now a batch only waits for the one before it, so the card draws while the page's script records the next 256 draws. A small getImageData (a script reading a few pixels back, which many animations do every frame) now copies only those pixels off the card instead of the whole canvas.
Gradients in whole numbers
A gradient's colour at each pixel came from floating-point maths per pixel: a division for linear gradients, a square root for radial ones, and the operating system's own angle function for cone-shaped (conic) ones, which can differ by a level between Mac, Windows and Linux. All three now come from whole numbers: an addition per pixel for linear, an exact whole-number square root for radial (circles sharing a centre), and our own angle table for conic. The processor and the graphics card compute the same colour, on every system. The colour picked is the same as before, or its neighbour in the 1024-step colour table (fewer than 1 pixel in 200 for linear, about 1 in 50 for radial, 1 in 100 for conic).
Clips, blend modes and shadows stay on the card
A clip, a blend mode other than normal, or a shadow used to send a graphics card canvas back to the processor. Clips now travel with the drawing, 18 of the 26 blend modes are computed on the card with the software's own whole-number maths (including copy and source-in, which change pixels outside the shape), and shadows and filters are made by the processor and laid onto the canvas by the card, so a page mixing sprites and shadows no longer bounces between the two.