Cards inside links, small print at its real size, and errors you can follow
Pages lay out more like the reference browser: a card inside a link stays a card, a block in the middle of a sentence splits the sentence around it, small print keeps its own line height, and fonts a script names after the page loads get their real faces. Errors read like the reference browser's: JSON messages say what was expected and where, and stack traces carry on through callbacks with the column of each call. Throwing and catching an error now costs far less, JSON reads long text up to five times faster, page transitions follow the standard, and the window is an event target of its own.
Cards inside links, blocks inside sentences




A link or span holding a block (a card in a news or shop listing, a box in the middle of a sentence) used to turn the whole thing into one block: the text before the card was painted underneath it, and the text after it lost its line. Inline content is now split around the block the way the standard describes, the link keeps its underline on every piece, and icon slots and status dots made with ::before draw again.
Small print at its real line height




Setting a small font with the font shorthand (font: 11px Verdana) left the line height of the text around it in place, so footnotes, bylines and price notes were spread out over twice the lines they should take. The shorthand now resets the line height, as the standard says. Empty placeholders, such as anchors a page links to, now have a position on their line, and a space beside one no longer doubles.
Fonts that scripts name, with their real faces




Sites that style themselves from script (a common way to build pages today) name their fonts after the page has loaded. Those families now load their real faces instead of a fallback, and classic faces such as Helvetica, Times and Courier get the same line spacing as in the reference browser.
Stack traces you can follow




An error thrown inside a callback, such as one run by map or forEach, used to show only the callback: everything that called it was lost. Stack traces now carry on through the built-in that ran it (at Array.map), name each frame the way the reference browser does (Cart.total), and point at the column of each call. The trace is only put together when a page reads it, so a page that throws and catches errors in a loop no longer pays for traces it never looks at.
JSON errors that say what went wrong




When text is not valid JSON, the error now says what was expected and where, with the line and column, or quotes the part of the text around the problem, word for word as the reference browser does. Finding that out no longer costs more for longer text, and long strings inside JSON are read up to five times faster.
What changed 17 changes
Try it in your browser
Each check runs live in the browser you are reading with. Nothing is sent anywhere.