What Changed in Blink: Chromium 133 → 134
Blink EngineWhy This Matters
Blink is the rendering engine behind Chrome, Edge, Opera, Brave, Vivaldi, and virtually every Chromium-based browser — which together account for roughly 70% of all web traffic. When Blink changes, the web changes. A single commit here can affect billions of page loads per day.
Between versions 133 and 134, the Blink team landed 1,317 commits from 292 contributors, referencing 939 bug reports. This cycle was dominated by CSS layout work, DOM and HTML modernization, and continued investment in on-device AI capabilities. Here’s what it all means.
At a Glance
| Metric | Count |
|---|---|
| Total commits | 1,317 |
| Areas touched | 8 |
| Bugs referenced | 939 |
| Contributors | 292 |
CSS
CSS led the way this cycle with 367 changes — the single largest category. A major theme is continued refinement of scroll-linked animations, including fixes to compositing decisions at animation phase boundaries. The team is clearly pushing to make scroll-driven effects buttery smooth and spec-compliant before wider adoption takes off.
The CSS shape() function received attention with fixes to canonical representation for curve and smooth commands — part of the ongoing effort to bring complex clip paths and shape authoring to CSS. There’s also work on inline layout and list items, fixing edge cases around paragraph insertion in inline contexts, which matters for anyone doing complex text-heavy layouts.
On the rendering side, scrollbar theming got a null-safety fix for the theme engine’s color provider, and -webkit-user-modify saw a cache interaction fix — the kind of subtle bug that could cause stale styles in contenteditable regions. The team also did significant internal cleanup, renaming LogicalBoxSides for clarity and improving DevTools’ ability to resolve computed CSS values.
367 total changes. Browse CSS commits →
DOM & HTML
The DOM & HTML category saw 254 changes, making it the second-largest area. A standout theme is work on the customizable <select> element (formerly “open UI”), including fixes for the new <selectedcontent> element and accessibility improvements for custom select buttons. This is one of the most anticipated HTML additions for developers tired of reinventing dropdown components.
Speculation Rules got a performance-oriented refactor, switching from document.scripts() to a more efficient DOM traversal — a sign that the team is optimizing prerendering infrastructure for real-world scale. MediaRecorder improvements landed too, with new instrumentation to measure how common video track frame transformations are, hinting at future optimization targets.
The team also cleaned up older feature flags: the SkipTemporaryDocumentFragment flag that shipped in M132 was removed, and several test expectation files were updated across platforms. There’s notable work on on-device speech recognition with new Web Platform Tests for installOnDeviceSpeechRecognition — Chrome continues to push AI-powered features directly into the browser platform.
254 total changes. Browse DOM & HTML commits →
JavaScript / Web APIs
JavaScript internals received 139 changes focused on performance and plumbing. The headline is early GPU channel establishment being enabled by default — EstablishGpuChannelAsync and EarlyEstablishGpuChannel are now on for everyone, meaning the browser sets up GPU communication earlier in the page lifecycle for faster rendering startup.
Script loading got smarter with new parameters to exclude dynamically-added scripts from the DelayAsyncScriptExecution optimization. This is a pragmatic fix: the original optimization improved page load by deferring async scripts, but dynamically injected ones (think analytics, A/B testing) need different treatment. The team also optimized how script URLs and source locations are captured from the stack, reducing overhead for error reporting and DevTools.
Under the hood, there’s significant V8 binding cleanup: removing the WrapperTypeInfo external from access check callbacks, using ToLocalChecked() more consistently, and refactoring how Isolated Web App service workers get their processes allocated. These are the kind of infrastructure changes that make the codebase more maintainable and secure.
139 total changes. Browse JavaScript commits →
Web Platform APIs
Web APIs saw 120 changes spanning media, graphics, and payments. WebGPU gained experimental adapter info for subgroupMinSize and subgroupMaxSize — critical for developers writing compute shaders that need to know GPU hardware capabilities. Meanwhile, WebNN (the Neural Network API) added error handling for layerNorm with non-consecutive axes on CoreML, showing continued work to make on-device ML viable across backends.
WebAudio received two notable fixes: FIFO underrun reporting now correctly ignores device stop/start transitions (no more false alarms), and audibility calculations no longer factor in the volume multiplier, producing more accurate audio state signals. For media, MediaRecorder.isTypeSupported() now returns better results for H.264 and AV1 codecs — a practical improvement for any app doing in-browser recording.
The BFCache got a boost with BFCacheOpenBroadcastChannel enabled by default, preparing for a 100% launch. This means pages using BroadcastChannel will no longer be evicted from the back-forward cache — a meaningful improvement for SPAs and PWAs. Payment handlers also saw refinements to browser-bound signature handling.
120 total changes. Browse Web Platform API commits →
Performance
36 changes targeted performance, with a focus on memory management and GPU pipeline optimization. The biggest theme is the ongoing SharedBitmapManager removal — multiple commits reworked FrameSinkManagerImpl, ImageLayerBridge, and related classes to stop depending on the legacy shared bitmap infrastructure. This cleanup paves the way for more efficient GPU-backed image compositing.
A new HeapBind() utility was introduced as a GC-friendly counterpart to base::Bind(), addressing a long-standing pain point around binding GC-managed objects safely into closures. The scheduler also got smarter: cancelled idle tasks are now cleaned up when they accumulate, preventing memory bloat in long-running tabs. And GPU memory buffer readback from textures was enabled by default on Linux.
36 total changes. Browse Performance commits →
Security & Privacy
28 changes hardened the security posture. The most impactful change upgrades BindingSecurity::ShouldAllowAccessTo to use CHECK-level assertions on entered windows instead of quiet failures — turning what were silent security bypasses into hard crashes that get caught immediately during development.
Content Security Policy internals were modernized (switching from WebVector to std::vector), and a new allow-same-site-none-cookies sandbox value was implemented, giving developers finer-grained control over cookie behavior in sandboxed iframes. The team also improved how headerless documents (like srcdoc frames) handle EnabledForNone features, and fixed cross-origin about:blank navigation to use proper cross-document history navigations. Attribution Reporting tests were refactored for reliability, and Fenced Frame component ad beacons gained new test coverage.
28 total changes. Browse Security commits →
Accessibility
A focused set of 7 changes improved accessibility. The key addition is support for clearing selections via setSelections() with zero ranges — important for assistive technology that needs to programmatically manage text selection state. The customizable <select> element received accessibility fixes alongside its DOM work, and the <selectedcontent> element now properly checks for content descendants.
7 total changes. Browse Accessibility commits →
Other Changes
An additional 290 commits span code health, tooling, and emerging features. The most exciting theme is on-device AI: a Language Detector API landed with signal support for AILanguageDetectorFactory.create, and AIPageContent now supports including hidden-but-searchable nodes — both pieces of Chrome’s strategy to bring AI capabilities to the web platform.
Internal modernization continues with spanification (replacing raw pointers with spans across the LCP critical path predictor) and type system cleanups using String as the common reference type. The team also ensured AbortSignal.throwIfAborted doesn’t modify abort error messages — a subtle spec compliance fix that matters for error handling in complex async workflows.
290 total changes. Browse all commits →
Bottom Line
Who should care? Web developers working with CSS animations, media recording, or the new customizable <select> element will see the most direct impact. If you’re experimenting with WebGPU compute shaders or WebNN, this release brings meaningful backend improvements. And for everyone: BFCache just got better, GPU startup is faster, and security checks are stricter.
Biggest impact: The sheer volume of CSS work (367 commits) signals that Chrome is making a major push on layout engine reliability. Combined with the on-device AI APIs quietly taking shape, Chromium 134 is both a stability release and a preview of where the browser platform is headed.
Browse the Full Diff
Explore all 1,317 commits on Chromium’s Gitiles:
🔗 chromium.googlesource.com/chromium/src/+log/133.0.6943.0..134.0.6998.0/third_party/blink