
Case studies
ruby-align is Baseline Newly available
ruby-align is now part of Baseline
Download AI models with the Background Fetch API
Published: February 20, 2025 Browser Support Source The Background Fetch API requires your app to register a service worker. As the browser fetches, it displays progress to the user and gives them a method to cancel the download. Once the download is
Prefetch resources to speed up future navigations
Learn about rel=prefetch resource hint and how to use it.
Optimize Cumulative Layout Shift
Cumulative Layout Shift (CLS) is a metric that quantifies how often users experience sudden shifts in page content. In this guide, we'll cover optimizing common causes of CLS such as images and iframes without dimensions or dynamic content.
Debug layout shifts
Learn how to identify and fix layout shifts.
CSS scrollbar-gutter and scrollbar-width are Baseline Newly available
CSS scrollbar-gutter and scrollbar-width have landed in all major browser engines, making it Baseline Newly available.
January 2025 Baseline monthly digest
In its first edition, this Baseline monthly digest covers happenings in Baseline at both Google and the web developer community in January 2025.
Scaling multithreaded WebAssembly applications with mimalloc and WasmFS
WasmFS and the mimalloc feature in Emscripten can help a lot with allocation and I/O performance. This guide shows how these features can lead to speed improvements of 10 times or more in some cases.
WasmGC and Wasm tail call optimizations are now Baseline Newly available
WebAssembly Garbage Collection and Wasm tail call optimizations have now landed in all major browser engines, making them Baseline Newly available.
Largest Contentful Paint (LCP)
This post introduces the Largest Contentful Paint (LCP) metric and explains how to measure it
Time to First Byte (TTFB)
This post introduces the Time to First Byte (TTFB) metric and explains how to measure it.
Promise.try is now Baseline Newly available
Promise.try has now landed in all major browser engines, making it Baseline Newly available.
Simpler WebAuthn feature detection with getClientCapabilities()
Short description
Build local and offline-capable chatbots
Published: January 13, 2024 There are so many amazing projects you can build with AI, with classic machine learning models and newer large language models (LLMs). With LLMs, computers can generate new content, write summaries, analyze text for
Optimize long tasks
You've been told "don't block the main thread" and "break up your long tasks", but what does it mean to do those things?
Setting up a payment method
A payment transaction using Web Payments starts with the discovery of your payment app. Learn how to set up a payment method and get your payment app ready for merchants and customers to make payments.
Apply effects to images with the CSS mask-image property
CSS masking gives you the option of using an image as a mask layer. This means that you can use an image, an SVG, or a gradient as your mask, to create interesting effects without an image editor.
Baseline 2024: more tools to help web developers
web-features dataset, Web Platform Status dashboard, Baseline status widget and more! Take a look back on Baseline in 2024.
Lazy loading video
This post explains lazy loading and the options available to you to lazy loading video.
Preload modules
Module preload offers a way of declaratively loading JavaScript modules ahead of time.
Measure browser autofill on your forms
To optimize user experience, it's essential to understand how users interact with your forms. Browser autofill plays a significant role in this process. Learn how to collect and analyze data on how users use autofill in your forms.
Part 2: Build client-side AI toxicity detection
Toxicity detection protects your users and creates a safer online environment. In part two, we learn how to build a client-side AI tool to detect and mitigate toxicity at its source.
Total Blocking Time (TBT)
This post describes the Total Blocking Time (TBT) metric and explains how to measure it
Getting started with measuring Web Vitals
Learn how to measure your site's Web Vitals in both real-world and lab environments.
The most effective ways to improve Core Web Vitals
A collection of best practices that Chrome has identified as the biggest opportunities to optimize web performance and improve Core Web Vitals
Optimize Largest Contentful Paint
A step-by-step guide on how to break down LCP and identify key areas to improve.
Web Vitals
Essential metrics for a healthy site
The CSS content-visibility property is now Baseline Newly available
The CSS content-visibility property is now Baseline Newly available.
How the Core Web Vitals metrics thresholds were defined
The research and methodology behind Core Web Vitals thresholds
Manually diagnose slow interactions in the lab
You've looked through your field data, and it turns out that you have some slow interactions. The next step is to learn more about how to manually test those interactions, and identify the causes behind them.
Core Web Vitals workflows with Google tools
With the growing importance of Core Web Vitals, site owners and developers increasingly focus on performance and key user experiences. Google provides many tools to help evaluate, optimize, and monitor pages, but users are often confused by the different sources of data and how to use them effectively. This guide proposes a workflow combining several tools and clarifies where and how they make sense along the development process.
Baseline
This article explains the origin story of Baseline, Google's involvement, and the ownership of the WebDX Community Group.
Back/forward cache
Learn to optimize your pages for instant loads when using the browser's back and forward buttons.
CSS nesting improves with CSSNestedDeclarations
CSS nesting is getting a whole lot better!
Debug performance in the field
Learn how to attribute your performance data with debug information to help you identify and fix real-user issues with analytics
First Input Delay (FID)
This post introduces the First Input Delay (FID) metric and explains how to measure it
Benchmarking the performance of CSS @property
What impact does @property have on the performance of your CSS?
Correlating Core Web Vitals and ad revenue with Google tools
Learn how you can use Google tools to help correlate your Core Web Vitals with ad revenue.
Storage for the web
There are many different options for storing data in the browser. Which one is best for your needs?
It's time to lazy-load offscreen iframes!
This post covers the loading attribute and how to use it to control the loading of iframes.
Building multiple Progressive Web Apps on the same domain
Explore the recommended and not recommended ways of building multiple PWAs reusing the same domain with their pros and cons.
The Web Push Protocol
A step-by-step interactive tutorial that shows you how to build a server that manages push notification subscriptions and sends web push protocol requests to a push service.
How Chrome handles updates to the web app manifest
What it takes to change icons, shortcuts, colors, and other metadata in your web app manifest for your PWA.
What makes a good Progressive Web App?
What makes a good, or great Progressive Web App?
What does it take to be installable?
Progressive Web App installability criteria.
Add a web app manifest
The web app manifest is a simple JSON file that tells the browser how your web app should behave.
Mitigate cross-site scripting (XSS) with a strict Content Security Policy (CSP)
Learn how to deploy a CSP based on script nonces or hashes as a defense-in-depth against cross-site scripting.
Accessing hardware devices on the web
This article helps Web developers pick the right hardware API based on a given device.
Allow passkey reuse across your sites with Related Origin Requests
Learn how to use Related Origin Requests to allow passkey reuse across your sites.
Browser-level image lazy loading for the web
This post covers the loading attribute and how it can be used to control the loading of images.
Choose the right image format
Selecting the right image format is the first step in delivering optimized images on your website. This post helps you to make the right choice.
Custom metrics
Custom metrics let you measure and optimize aspects of your site's experience that are unique to your site.
Measure and debug performance with Google Analytics 4 and BigQuery
Learn how to send Web Vitals data to Google Analytics 4 properties and export the data for analysis in BigQuery and Looker Studio.
Web permissions best practices
This guide outlines best practices for websites to follow when asking users for permission to access sensitive capabilities (such as camera, microphone, and location) to minimize unnecessary prompts and blocked access.
Best practices for cookie notices
Learn about how cookie notices affect performance, performance measurement, and UX.
Customize media notifications and playback controls with the Media Session API
Web developers can customize media notifications and respond to media related events such as seeking or track changing with the Media Session API.
Find slow interactions in the field
Before you can reproduce slow interactions in the lab to optimize your website's Interaction to Next Paint, you'll need to lean on field data to find them. Learn how to do just that in this guide.
Using tabindex
Use the tabindex attribute to explicitly set an element's tab position.
Practical prompt engineering for smaller LLMs
Learn how to adjust your prompts to achieve your preferred results across different LLMs, models, and model sizes.
Interaction to Next Paint (INP)
This post introduces the Interaction to Next Paint (INP) metric and explains how it works, how to measure it, and offers suggestions on how to improve it.
CSS color-scheme-dependent colors with light-dark()
description: Define colors that react to the used color-scheme with the light-dark() function.
WebAssembly performance patterns for web apps
In this guide, aimed at web developers who want to benefit from WebAssembly, you'll learn how to make use of Wasm to outsource CPU-intensive tasks with the help of a running example.
CSS animated grid layouts
In CSS Grid, the `grid-template-columns` and `grid-template-rows` properties allow you to define line names and track sizing of grid columns and rows, respectively. Supporting interpolation for these properties allows grid layouts to smoothly transition between states, instead of snapping at the halfway point of an animation or transition.
Play the Chrome dino game with your gamepad
Learn to control web games with the Gamepad API.
The inert attribute
The inert property is a global HTML attribute that simplifies how to remove and restore user input events for an element, including focus events and events from assistive technologies.
Determine the passkey provider with AAGUID
Relying parties can determine where the passkey comes from by examining AAGUID. Find out how it works.
Compiling to and optimizing Wasm with Binaryen
Using the example of a synthetic toy language called ExampleScript, learn how to write and optimize WebAssembly modules in JavaScript using the Binaryen.js API.
Capture audio and video in HTML5
Audio/Video capture has been the "Holy Grail" of web development for a long time. For many years we've had to rely on browser plugins ( Flash or Silverlight ) to get the job done. Come on! HTML5 to the rescue. It might not be apparent, but the rise
The <model-viewer> web component
The <model-viewer> web component lets you use 3D models on a web page declaratively.
userVerification deep dive
Learn how to use `userVerification` in WebAuthn
Why is CrUX data different from my RUM data?
Learn about reasons why RUM data can show different Core Web Vitals numbers from CrUX.
Accessibility for web developers
It's important to build sites that are inclusive and accessible to everyone. There are at least six key areas of disability we can optimize for: visual, hearing, mobility, cognition, speech and neural.
Load Third-Party JavaScript
Third-party scripts provide a wide range of useful features, making the web more dynamic. Learn how to optimize the loading of third-party scripts to reduce their impact on performance.
Prevent creation of a new passkey if one already exists
Learn how to prevent creating a new passkey if one already exists in the user's password manager.
Work with IndexedDB
A guide to the basics of IndexedDB.
5 CSS snippets every front-end developer should know in 2024
Toolbelt worthy, powerful, and stable CSS you can use today.
Optimize Time to First Byte
Learn how to optimize for the Time to First Byte metric.
What are the parts of a URL?
What's the difference between a host, site and origin? What is an eTLD+1? This article explains.
Discoverable credentials deep dive
Learn what are discoverable credentials and how to build user experiences that suit your use case.
Rendering performance
Users notice if sites and apps don't run well, so optimizing rendering performance is crucial!
ResizeObserver: it's like document.onresize for elements
`ResizeObserver` notifies you when an element's content rectangle changes size so that you can react accordingly.
Optimize the encoding and transfer size of text-based assets
Next to eliminating unnecessary resource downloads, the best thing you can do to improve page load speed is to minimize the overall download size by optimizing and compressing the remaining resources.
OffscreenCanvas—speed up your canvas operations with a web worker
This document explains how you can use the OffscreenCanvas API to achieve performance improvements when rendering graphics in your web app.
First Contentful Paint (FCP)
This post introduces the First Contentful Paint (FCP) metric and explains how to measure it
Content delivery networks (CDNs)
This article provides a comprehensive overview of content delivery networks (CDNs). In addition, it explains how to choose, configure, and optimize a CDN setup.
What makes for a good sign-out experience?
Practical developer guidance about what to do when a user logs out of the website.
Time to Interactive (TTI)
This post introduces the Time to Interactive (TTI) metric and explains how to measure it
Optimize resource loading with the Fetch Priority API
The Fetch Priority API indicates the relative priority of resources to the browser. It can enable optimal loading and improve Core Web Vitals.
The :user-valid and :user-invalid pseudo-classes
About the :user-valid and :user-invalid pseudo-classes and how to use them to improve the user experience of input validation.
Optimize Core Web Vitals for business decision makers
Learn how business decision makers and non-developers can improve Core Web Vitals.
The nuances of base64 encoding strings in JavaScript
Understand and avoid common problems when applying base64 encoding and decoding to strings.
CSS subgrid
Subgrid enables grid shareability, allowing nested grids to align to ancestors and siblings.
Effectively loading ads without impacting page speed
In today's digital world, online advertising is a critical part of the free web we all enjoy. However, poorly implemented ads can lead to a slower browsing experience, frustrating users and diminishing engagement. Learn how to effectively load ads without impacting your page speed, ensuring a seamless user experience, and maximizing revenue opportunities for website owners.
Four common types of code coverage
Learn what code coverage is and discover four common ways to measure it.
To test or not to test, a technical perspective
Determine what you need to test and what you can rule out.
Defining test cases and priorities
Determine what to test, define your test cases, and prioritize.
User-centric performance metrics
User-centric performance metrics are a critical tool in understanding and improving the experience of your site in a way that benefits real users.
Preload responsive images
Learn about new and exciting possibilities for preloading responsive images to ensure great user experience.
Adapting typography to user preferences with CSS
A method to adapt a font to your users' preferences, so they're maximally comfortable reading your content.
Pyramid or Crab? Find a testing strategy that fits
Discover how to combine different testing types into a reasonable strategy that matches your project.
Three common types of test automation
Let's start with the basics! Exploring the two general testing modes and three common types of test automation.
Eliminating Unnecessary Downloads
You should audit your resources periodically to ensure that each resource is helping deliver a better user experience.
What is WebAssembly and where did it come from?
An introduction to WebAssembly (sometimes abbreviated Wasm), the portable binary-code format and corresponding text format for executable programs as well as software interfaces for facilitating interactions between such programs and their host environment.
Compiling mkbitmap to WebAssembly
The mkbitmap C program reads an image and applies one or more of the following operations to it, in this order: inversion, highpass filtering, scaling, and thresholding. Each operation can be individually controlled and turned on or off. This article shows how to compile mkbitmap to WebAssembly.
Securely hosting user data in modern web applications
How to securely display user-controlled content on web applications.
The origin private file system
The File System Standard introduces an origin private file system (OPFS) as a storage endpoint private to the origin of the page and not visible to the user that provides optional access to a special kind of file that is highly optimized for
Deploying AVIF for more responsive websites
An overview of how AVIF is adopted in the ecosystem, and what kind of performance and quality benefits developers can expect from AVIF for still images and animations.
Optimize Interaction to Next Paint
Learn how to optimize your website's Interaction to Next Paint.
Baseline features you can use today
Learn about just some of the features that are part of Baseline.
Script evaluation and long tasks
When loading scripts, it takes time for the browser to evaluate them prior to execution, which can cause long tasks. Learn how script evaluation works, and what you can do to keep it from causing long tasks during page load.
Client-side rendering of HTML and interactivity
Rendering HTML with JavaScript is different than rendering HTML that's sent by the server—and that can affect performance. Learn the difference in this guide, and what you can do to preserve your website's rendering performance—especially where interactions are concerned.
Optimize input delay
Input delay can contribute significantly to total interaction latency and negatively affect your page's INP. In this guide, learn what input delay is, and how you can reduce it for faster interactivity.
How large DOM sizes affect interactivity, and what you can do about it
Large DOM sizes can be a factor in whether interactions are fast or not. Learn more about the relationship between DOM size and INP, and what you can do to reduce DOM size and other ways to limit rendering work when your page has lots of DOM elements.
Build in-browser WordPress experiences with WordPress Playground and WebAssembly
The full WordPress powered by PHP running solely in the browser with WebAssembly
Cumulative Layout Shift (CLS)
This post introduces the Cumulative Layout Shift (CLS) metric and explains how to measure it.
New functionality for developers—brought to you by WebAssembly
A showcase of tools now available on the web thanks to WebAssembly.
What are source maps?
Improve web debugging experience with source maps.
PWAs in app stores
Progressive Web Apps can be submitted to app stores like the Android Play Store or the Microsoft Store and more.
6 CSS snippets every front-end developer should know in 2023
Toolbelt worthy, powerful, and stable CSS you can use today.
Trigonometric functions in CSS
Calculate the sine, cosine, tangent, and more in CSS.
Perform efficient per-video-frame operations on video with requestVideoFrameCallback()
The requestVideoFrameCallback() method allows web authors to register a callback that runs in the rendering steps when a new video frame is sent to the compositor.
GDE community highlight: Lars Knudsen
One of a series of interviews with members of the Google Developers Experts (GDE) program.
New patterns for media apps
This blog post announces a new collection of patterns for media apps.
Speedy CSS Tip! Animated Gradient Text
Let's make that animated gradient text effect with scoped custom properties and background-clip Hop over to CodePen and create a new pen. Create the markup for your text. Let's use a header with the word "Speedy": Then, let's give our body a darker
Building Chrometober!
How the scrolling book came to life for sharing fun and frightening tips and tricks this Chrometober.
Building a tooltip component
A foundational overview of how to build a color-adaptive and accessible tooltip custom element.
Create a passkey for passwordless logins
Passkeys make a website's user accounts safer, simpler, easier to use and passwordless. This article discusses how to allow users to create passkeys for your website.
Sign in with a passkey through form autofill
Passkeys make a website's user accounts safer, simpler, easier to use and passwordless. This article discusses how how a passwordless sign-in with passkeys should be designed while accommodating existing password users.
Building a floating action button (FAB) component
A foundational overview of how to build color-adaptive, responsive, and accessible FAB components.
Best practices for fonts
Learn about how to optimize web fonts for Core Web Vitals.
GDE community highlight: Alba Silvente Fuentes
One of a series of interviews with members of the Google Developers Experts (GDE) program.
Speedy CSS Tip! Animated Loader
Let's make an animated CSS loader with scoped custom properties and animation-timing-function Hop over to CodePen and create a new pen. Create the markup for our loader. Note the use of inline custom properties: You can also use a generator ( Pug )
Testing Web Design Color Contrast
An overview of three tools and techniques for testing and verifying accessible color contrast of your design.
Building the main navigation for a website
This tutorial describes how to build an accessible main navigation of a website. You learn about semantic HTML, accessibility, and how using ARIA attributes can sometimes do more harm than good.
Is it :modal?
This handy CSS pseudo-selector gives you a way to select elements that are modal.
Building a crooked grid illusion
A fun exploration of ways to recreate an optical illusion with CSS.
Best practices for tags and tag managers
Optimize tags and tag managers for Core Web Vitals.
Creative list styling
A look at some useful and creative ways to style a list.
How Nordhealth uses Custom Properties in Web Components
The benefits of using Custom Properties in design systems and component libraries.
Finer grained control over CSS transforms with individual transform properties
Learn how you can use the individual translate, rotate, and scale CSS properties to approach transforms in an intuitive way.
CSS border animations
Looking at several ways to animate a border in CSS
New patterns
Animations, theming, components, and more layout patterns are live and ready to help kick start or inspire your UI and UX.
How the BBC is rolling out HSTS for better security and performance.
The BBC is rolling out HSTS for their website to improve security and performance. Find out what it means, and how HSTS can help you.
Why lab and field data can be different (and what to do about it)
Learn why tools that monitor Core Web Vitals metrics may report different numbers, and how to interpret those differences.
A win-win situation
GDE Enrique Fernandez Guerra on open sourcing his NGO HelpDev.
The end of Internet Explorer
What ending support for Internet Explorer meant for the customers and developers at Maersk.com.
Farewell to HTML5Rocks
So long HTML5Rocks, it's been nice knowing you.
First-party cookie recipes
Learn how to set first-party cookies to ensure security, cross-browser compatibility, and minimize chances of breakage once third-party cookies are phased out.
Synchronize audio and video playback on the web
The Web Audio API makes it possible to properly achieve AV synchronization.
Use conic gradients to create a cool border
Conic gradients can be used to create some interesting effects, such as this nice border example. This CodePen created by Adam Argyle, originally shared via this tweet on Twitter, shows how to use a conic gradient to create a border. Terry Mun
Implement error handling when using the Fetch API
Catching errors when working with the Fetch API.
Choose a JavaScript library or framework
Understand the decisions around using a JavaScript library or framework.
The difference between JavaScript libraries and frameworks
Understand the differences between frameworks and libraries in the context of a client-side JavaScript environment.
The Front-End Developer's Guide to the Terminal
This resource can help you quickly find your way around the terminal.
An API for fast, beautiful web fonts
An update on the Google Fonts CSS API—how it works, how to use it, and how it can efficiently deliver your web fonts.
GOV.UK drops jQuery from their front end.
GOV.UK dropped their jQuery dependency from their front end. You'll never guess what happened. (Yes, you will.)
Building a button component
A foundational overview of how to build color-adaptive, responsive, and accessible components.
Don't fight the browser preload scanner
Find out what the browser preload scanner is, how it helps performance, and how you can stay out of its way.
Best practices for measuring Web Vitals in the field
How to measure Web Vitals with your current analytics tool
Bridging the gap
Making it easier to build for the web.
Finding courage and inspiration in the developer community
Web Google Developers Experts on how mentoring programs empowered them to become leaders.
Variable fonts in real life
Sharing a practical guide to variable fonts, with lots of examples.
Quickly create nice CSS gradients with the CSS Gradient Creator
This tool by Josh W Comeau makes it super simple to create nice looking gradients.
Deep dive into top web developer pain points
A collection of insights on the top pain points, collected from a number of one to one conversations with web developers.
Make your site picture perfect with images.tooling.report
Check out the state of image tooling.
Global and local variable scope
Learn about scope and how it works in JavaScript.
Building a dialog component
A foundational overview of how to build color-adaptive, responsive, and accessible mini and mega modals with the `` element.
Debug media playback errors on the web
Learn how to debug media playback errors on the web.
GDE community highlight: Nishu Goel
One of a series of interviews with members of the Google Developers Experts (GDE) program.
The performance effects of too much lazy loading
Eagerly loading images within the initial viewport—while liberally lazy loading the rest—can improve Web Vitals while loading fewer bytes.
Building a loading bar component
A foundational overview of how to build a color adaptive and accessible loading bar with the `` element.
Save Credentials from Forms
Keep your registration and sign-in forms as simple as possible. Save credentials from sign-in forms so users won't have to sign in again when they return. To store user credentials from forms: Before moving forward, check if your form includes
Chrome and Firefox soon to reach major version 100
User-Agent string changes, the strategies that Chrome and Firefox are taking to mitigate the impact, and how you can help.
Building an adaptive favicon
A foundational overview of how to build an adaptive favicon.
Drawing to canvas in Emscripten
Learn how to render 2D graphics to a canvas on the web from WebAssembly with Emscripten.
Improve security and privacy by updating HTTP Cache
Forgetting or misusing the Cache-Control header might negatively impact the security of your website and your users' privacy. Get recommendations for high-value websites.
Additional HTML elements
Essential metrics for a healthy site
Porting USB applications to the web. Part 2: gPhoto2
Learn how gPhoto2 was ported to WebAssembly to control external cameras over USB from a web app.
Network Error Logging (NEL)
Use Network Error Logging (NEL) to collect client-side network errors.
WebAssembly feature detection
Learn how to use the newest WebAssembly features while supporting users across all browsers.
Porting USB applications to the web. Part 1: libusb
Learn how code that interacts with external devices can be ported to the web with WebAssembly and Fugu APIs.
Building a theme switch component
A foundational overview of how to build an adaptive and accessible theme switch component.
Embedding JavaScript snippets in C++ with Emscripten
Learn how to embed JavaScript code in your WebAssembly library to communicate with the outside world.
PWAs on Oculus Quest 2
The Oculus Quest 2 is a virtual reality (VR) headset created by Oculus, a division of Meta. Developers can now build and distribute 2D and 3D Progressive Web Apps (PWA) that take advantage of Oculus Quest 2's multitasking feature. This article describes the experience and how to build, sideload, and test your PWA on the Oculus Quest 2.
Building Designcember
A peek into the process and tools used to build the holiday-calendar-style experience of Designcember.
Designcember Calculator
A skeuomorphic attempt at recreating a solar calculator on the web that makes use of the ambient light sensor and the window controls overlay feature.
Deep-copying in JavaScript using structuredClone
For the longest time, you had to resort to workarounds and libraries to create a deep copy of a JavaScript value. The Platform now ships with `structuredClone()`, a built-in function for deep-copying.
Building a toast component
A foundational overview of how to build an adaptive and accessible toast component.
The UI fund
Announcing the UI fund from Chrome, designed to provide grants for people who work on design tools, CSS, and HTML.
Building a 3D game menu component
A foundational overview of how to build a responsive, adaptive, and accessible 3D game menu.
Towards an animation smoothness metric
Learn about measuring animations, how to think about animation frames, and overall page smoothness.
What's new in PageSpeed Insights
Learn about the latest in PageSpeed Insights to help you better measure and optimize your page and site quality.
Everything announced at Chrome Dev Summit 2021
A roundup of all the key announcements from the 2021 Chrome Dev Summit, with the links you need to find out more.
Lighthouse user flows
Try out a new Lighthouse API to measure performance and best practices throughout a user flow.
Photoshop's journey to the web
Over the last three years, Chrome has been working to empower web applications that want to push the boundaries of what's possible in the browser. One such web application has been Photoshop. The idea of running software as complex as Photoshop directly in the browser would have been hard to imagine just a few years ago. However, by using various new web technologies, Adobe has now brought a public beta of Photoshop to the web.
Building a multi-select component
A foundational overview of how to build a responsive, adaptive, and accessible, multiselect component for sort and filter user experiences.
How to assess loading performance in the field with Navigation Timing and Resource Timing
Learn the basics of using the Navigation and Resource Timing APIs to assess loading performance in the field.
Safe DOM manipulation with the Sanitizer API
The new Sanitizer API aims to build a robust processor for arbitrary strings to be safely inserted into a page. This article introduces the API, and explains its usage.
Best practices for using third-party embeds
This document discusses performance best practices that you can use when loading third-party embeds, efficient loading techniques and the Layout Shift Terminator tool that helps reduce layout shifts for popular embeds.
How SPA architectures affect Core Web Vitals
Answers to common questions about SPAs, Core Web Vitals, and Google's plan to address current measurement limitations.