ampproject/amphtml
38.8
Weak · 1 October 2026
316.8k
lines of production code
JavaScript
with C++
2
measurements over time
What this system is
This system is the AMP (Accelerated Mobile Pages) project, a framework for building fast, standardized web pages. It provides a core runtime and a vast ecosystem of components for embedding media, ads, and interactive content, alongside a comprehensive build infrastructure for compiling, testing, and releasing these assets. The codebase also includes extensive tooling for local development, continuous integration, and automated release management to support the AMP ecosystem's performance and reliability goals.
How it got here
2015–2017 — Component modernization and expansion
193 changes.
This period focused on modernizing core AMP components like amp-carousel, amp-anim, and amp-youtube by refactoring them to use the new BaseElement lifecycle and modular architecture. It also involved the initial release and documentation of numerous new extensions, including amp-story-player, amp-list, amp-bind, and various media embeds, while establishing robust testing and validation infrastructure for the growing codebase.
2018–2019 — Extension ecosystem expansion and infrastructure modernization
186 changes.
This period focused on significantly broadening the AMP component library by introducing numerous new extensions for video, 3D, subscriptions, and advertising, alongside major features like amp-script and amp-consent. Concurrently, the project modernized its build infrastructure by implementing Babel plugins for single-pass compilation and restructuring its testing frameworks to include comprehensive E2E and visual regression suites.
2020–2021 — Bento architecture and Storybook adoption
207 changes.
This period focused on establishing the Preact-based Bento component architecture, migrating core extensions like timeago, selector, and accordion to modern Web Components, and introducing Storybook for isolated component development. The work also included significant infrastructure updates, such as a new build task runner, modular Babel plugins, and a local development server with ESM support, alongside the launch of new extensions for stories, galleries, and ad networks.
2022–2023 — Bento infrastructure and component migration
24 changes.
This period focused on establishing the core Bento component infrastructure and migrating existing AMP extensions to the new Preact-based architecture. Significant work included introducing new standalone components like amp-list, amp-audio, and amp-gist, while simultaneously enhancing the build system with specialized Babel plugins for optimization and dependency management.
Features
AMP Animation Polyfill extension initializes Web Animations API support
The new amp-animation-polyfill extension (version 0.1) ensures the Web Animations API is available in browsers that do not natively support it. By importing and installing the 'web-animations-js' polyfill during the AMP document initialization phase, this extension enables consistent animation behavior across all supported browsers without requiring manual setup by the page author.
extensions/amp-animation-polyfill/0.1 · high confidence
AMP Story 1.0 introduces new consent UI and desktop one-panel layout
This release introduces the AMP Story 1.0 extension, bringing a redesigned consent interface and a new desktop one-panel layout. The consent UI now features a dedicated overlay with customizable publisher logos, vendor lists, and accept/reject actions, improving the user experience for privacy compliance. Additionally, the desktop one-panel layout provides a centered, responsive story view with rounded corners and adaptive sizing for landscape orientations, enhancing readability on larger screens.
extensions/amp-story/1.0 · high confidence
AMP Story Interactive components reach version 0.1
The \amp-story-interactive\ extension has been promoted to version 0.1, establishing the stable baseline for interactive story elements. This release introduces the core abstract class and concrete implementations for binary polls, standard polls, image polls, and image quizzes, along with the necessary CSS styles, disclaimer handling, and backend integration scaffolding.
extensions/amp-story-interactive/0.1 · high confidence
AdZerk ad network extension adds template-based ad support with analytics and metadata
The AdZerk ad network implementation now supports serving ads via AMP mustache templates, allowing for more flexible ad creative rendering. This change introduces new data files that define ad templates, including support for inline analytics triggers (such as visibility-based requests) and integration with Google Analytics. Additionally, the extension now includes metadata scripts in the templates to declare required custom elements (like amp-fit-text, amp-animation, and amp-position-observer) and their sources, ensuring proper runtime loading. The implementation also supports advanced features like animations and position observers within ad creatives, enabling richer interactive ad experiences.
extensions/amp-ad-network-adzerk-impl/0.1/data · high confidence
AdZerk ad network now supports template-based creatives with optional analytics
The AdZerk ad implementation now supports rendering ads using AMP templates (via amp-mustache) instead of only traditional cross-domain frames. When an ad response includes a template ID and data, the ad is rendered by expanding the template in the AMP cache. Additionally, if the ad response specifies analytics, the implementation automatically injects amp-analytics into the rendered creative, allowing for tracking within template-based ads.
extensions/amp-ad-network-adzerk-impl/0.1 · high confidence
Add AMP Animation Storybook demos with interactive controls
New Storybook stories (Basic, Random) and a shared template are added to the amp-animation extension, allowing users to preview and interact with animations directly in the browser. The Basic story demonstrates keyframe variations including clip-path shapes (inset, circle, ellipse, polygon) and min/max expressions, while the Random story illustrates staggered animations with subtargets and variable delays. The template provides interactive controls for animation direction, fill mode, duration, iterations, and easing, along with buttons to start, restart, pause, seek, reverse, finish, and cancel the animation.
extensions/amp-animation/0.1/storybook · high confidence
Add Babel plugin to import runtime helpers
A new Babel plugin (\babel-plugin-imported-helpers\) has been added to the build system. This plugin replaces the previous approach of injecting a global \babelHelpers\ object with explicit imports from \@babel/runtime/helpers\. For users, this means that compiled output will now include specific import statements for helper functions (such as \objectSpread2\ and \objectWithoutPropertiesLoose\) rather than relying on a global namespace, which can improve tree-shaking and reduce bundle size by only including used helpers.
build-system/babel-plugins/babel-plugin-imported-helpers · high confidence
Add Babel plugin to transform AMP.extension calls for singlepass
A new Babel plugin, \transform-amp-extension-call\, has been added to the build system. This plugin transforms \AMP.extension\ calls by inlining their body content directly into the surrounding code, a change required to support the singlepass compilation mode.
build-system/babel-plugins/babel-plugin-transform-amp-extension-call · high confidence
Add Babel plugin to transform ESM for nomodule builds
Introduces the \babel-plugin-nomodule-loader\ which transforms ES module import/export statements into a lightweight, async loader compatible with \nomodule\ script tags. The plugin generates a \defineish\ wrapper that registers modules in a global \self.BENTO\ registry, optimizing the output size for common cases like single imports or export-only modules. This enables browsers that do not support ES modules to load the library's code via a fallback mechanism.
build-system/babel-plugins/babel-plugin-nomodule-loader · high confidence
Add Babel plugin to transform Promise.resolve() calls
A new Babel plugin has been added to the build system that intercepts calls to \Promise.resolve()\ without arguments and replaces them with a local \resolvedPromise\ helper. This allows the project to standardize promise resolution behavior through a shared utility located in \src/core/data-structures/promise\, with the import path configurable via plugin options.
build-system/babel-plugins/babel-plugin-transform-promise-resolve · high confidence
Add Bento-based amp-gist extension v1.0
Introduces version 1.0 of the amp-gist extension, which embeds GitHub Gists via an iframe. This update implements the component using the Bento architecture (Preact-based), supporting both the standard amp-gist web component and a React/Preact component. Users can now embed entire gists or specific files using the data-gistid and data-file attributes, with layout restricted to fixed-height. The extension includes documentation, Storybook examples, and validator tests to ensure correct usage.
extensions/amp-gist/1.0 · high confidence
Add Oblivki ad network implementation
Introduces the Oblivki ad network implementation for AMP, allowing publishers to serve ads via the \amp-ad\ component with type \oblivki\. The extension supports both native A4A rendering (via \data-use-a4a\) and delayed iframe paths, requiring the standard \amp-ad\ script and a unique \data-block-key\ for configuration.
extensions/amp-ad-network-oblivki-impl · high confidence
Add Preact Storybook stories for amp-date-countdown
Developers can now preview and interact with the amp-date-countdown component in Storybook using both the legacy AMP syntax (Basic.amp.js) and the new Preact-based Bento API (Basic.js). The Preact stories expose the renamed BentoDateCountdown component, allowing users to test attributes like locale, datetime, and countUp behavior directly in the UI.
extensions/amp-date-countdown/1.0/storybook · high confidence
Add SXG script URL transformation for AMP server
The local development server now includes a new PostHTML transformer that modifies script source URLs to support Signed Exchange (SXG). When the \minified\ option is enabled, the transformer appends \.sxg\ to the script filename (e.g., \v0.js\ becomes \v0.sxg.js\); otherwise, it appends an \f=sxg\ query parameter to the existing URL. This allows the server to serve the correct script variants required for SXG validation during local testing.
build-system/server/new-server/transforms/sxg · high confidence
Add Storybook demo for amp-video-iframe with placeholder and fallback support
A new Storybook story (Basic.amp.js) has been added for the amp-video-iframe extension (version 1.0) in Bento mode. This demo allows users to preview the video player component with various configurations, including a new 'WithPlaceholderAndFallback' story that demonstrates how to toggle placeholder and fallback UI elements within the component. It also includes an 'Actions' story showcasing custom control buttons (Play, Pause, Mute, Unmute, Fullscreen) interacting with the player instance.
extensions/amp-video-iframe/1.0/storybook · high confidence
Add Storybook demos for amp-lightbox-gallery 1.0
New Storybook stories have been added for the amp-lightbox-gallery extension (version 1.0), providing interactive examples for AMP HTML (Basic.amp.js) and React (Basic.js). These demos illustrate how to configure the lightbox gallery with standalone images, integrate it with amp-base-carousel and amp-stream-gallery, and utilize the Bento component API (BentoLightboxGalleryProvider, WithBentoLightboxGallery) for captioning and grouping behaviors.
extensions/amp-lightbox-gallery/1.0/storybook · high confidence
Add Storybook documentation for amp-video 1.0
Developers can now explore and test the amp-video 1.0 extension using Storybook. This change introduces new story files (Basic.amp.js, Basic.js, VideoIframe.js) that demonstrate the standard amp-video element, the new Bento Video component, and the VideoIframe integration. The stories cover common use cases such as autoplay, loop, mediasession support, and embedding video players within accordions and details elements, providing a visual playground for component configuration.
extensions/amp-video/1.0/storybook · high confidence
Add Storybook examples for amp-image-slider with custom hint styling
A new Storybook story file (Basic.amp.js) has been added to the amp-image-slider extension, providing interactive examples for the component. It includes a default story and a 'CustomHints' story that demonstrates how to apply global CSS styles to customize the appearance of the slider's navigation hints (left and right arrows) using inline SVG data URIs.
extensions/amp-image-slider/0.1/storybook · high confidence
Add Storybook examples for amp-twitter:0.1
Developers can now preview and test the amp-twitter:0.1 component in Storybook. The new Basic.amp.js file provides interactive stories for basic tweets, moments, timelines, deleted tweets, and invalid tweet handling, including examples of dynamic tweet ID mutation via amp-bind.
extensions/amp-twitter/0.1/storybook · high confidence
Add Storybook samples for amp-twitter 1.0 and Bento Twitter
New Storybook stories have been added for the \amp-twitter\ extension (version 1.0) and the new \BentoTwitter\ component. These samples demonstrate various usage patterns including basic tweet embedding, Twitter Moments, timelines, handling deleted or invalid tweets with fallbacks, and dynamic tweet ID swapping via \amp-bind\. The stories provide interactive controls for configuration attributes like \data-tweetid\, \data-cards\, and \data-conversation\, allowing developers to preview and test the component's behavior in isolation.
extensions/amp-twitter/1.0/storybook · high confidence
Add Storybook stories and E2E fixture for amp-timeago 1.0
Developers can now preview and test the amp-timeago 1.0 component in Storybook. This change introduces a Basic.amp.js story for AMP integration testing and a Basic.js story for the Bento Preact component, allowing users to interact with props like datetime, locale, and cutoff. An E2E fixture is also added to support automated end-to-end testing of the component's rendering.
extensions/amp-timeago/1.0/storybook · high confidence
Add Storybook stories for Bento Instagram and Accordion components
This change introduces new Storybook stories in the amp-instagram extension to demonstrate the Bento versions of the Instagram and Accordion components. The stories showcase the \BentoInstagram\ component in various contexts, including standalone usage, nested within a \BentoAccordion\, and inside HTML details elements, while also illustrating placeholder and fallback behaviors.
extensions/amp-instagram/1.0/storybook · high confidence
Add Storybook stories for Bento WordPress Embed component
New Storybook stories have been added for the \amp-wordpress-embed\ extension (version 1.0) to demonstrate both the standard AMP component and the new Bento version. The AMP story (\Basic.amp.js\) showcases the \amp-wordpress-embed\ element with \placeholder\ and \fallback\ slots, while the Bento story (\Basic.js\) demonstrates the \BentoWordPressEmbed\ component using Storybook \args\ for configuration. These stories allow developers to visually verify the component's behavior, including loading states and layout, within the Storybook environment.
extensions/amp-wordpress-embed/1.0/storybook · high confidence
Add Storybook stories for amp-date-display v1.0
New Storybook stories have been added for the amp-date-display extension (version 1.0), providing interactive previews for both the standard AMP component and the Bento version (BentoDateDisplay). These stories allow users to configure date/time inputs, display locales (UTC/local), and template options via Storybook controls, facilitating easier testing and visualization of the date-display component's rendering behavior.
extensions/amp-date-display/1.0/storybook · high confidence
Add Storybook stories for amp-fit-text 1.0
Developers can now preview and test the amp-fit-text component (version 1.0) within Storybook. This change introduces two sets of stories: Basic.amp.js provides AMP-specific examples using the \<amp-fit-text\> tag with the @ampproject/storybook-addon decorator, while Basic.js offers Preact-based stories using the BentoFitText component, allowing for interactive configuration of properties like minFontSize, maxFontSize, and content.
extensions/amp-fit-text/1.0/storybook, extensions/amp-mathml/1.0/storybook · high confidence
Add Storybook stories for amp-instagram 0.1 with placeholder and fallback support
A new Storybook story file (Basic.amp.js) has been added for the amp-instagram 0.1 extension, providing a basic rendering example and a specific 'WithPlaceholder' variant that demonstrates how to use placeholder and fallback slots within the component.
extensions/amp-instagram/0.1/storybook · high confidence
Add Storybook stories for amp-selector 1.0 and Bento Selector
New Storybook stories have been added for the amp-selector extension (version 1.0) and its Bento component implementation. The stories demonstrate the AMP version with various layouts (container, responsive) and content types (images, lists), including interactive action buttons for programmatic control. Additionally, Preact-based stories showcase the Bento Selector and BentoSelectorOption components, highlighting features like multi-selection, disabled options, imperative API usage (toggle, selectBy, clear), and the new keyboard-select-mode argument for controlling keyboard interaction behavior.
extensions/amp-selector/1.0/storybook · high confidence
Add Storybook stories for amp-sidebar and Bento Sidebar components
This change introduces Storybook stories for the amp-sidebar extension (version 1.0) and its corresponding Bento Preact component. The new stories allow developers to visually test and interact with the sidebar in various configurations, including basic layouts, toolbar integrations, and customizable styles such as background colors, foreground colors, and backdrop colors. The stories demonstrate both the standard AMP usage and the Preact-based Bento implementation, providing interactive controls for properties like side placement and CSS styling.
extensions/amp-inline-gallery/1.0/storybook, extensions/amp-sidebar/1.0/storybook · high confidence
Add Storybook stories for amp-social-share and Bento SocialShare
New Storybook stories have been added for the amp-social-share extension (version 1.0) and the Bento SocialShare component. The amp-social-share story allows users to configure social sharing types (such as email, Facebook, Twitter, etc.) and parameters like share endpoints and URLs via Storybook controls. The Bento SocialShare story provides a similar interactive interface for the new Preact-based component, supporting configuration of type, endpoint, params, and styling options like color and background.
extensions/amp-social-share/1.0/storybook · high confidence
Add Storybook stories for amp-youtube component
Developers can now preview and test the amp-youtube component in Storybook. This change introduces a new story file (Basic.amp.js) that demonstrates the component with various configurations, including default, responsive, and autoplay layouts, using the @ampproject/storybook-addon for AMP integration.
extensions/amp-youtube/0.1/storybook · high confidence
Add Yotpo widgets extension
Introduces the new amp-yotpo extension (version 0.1), enabling users to embed Yotpo review widgets within AMP pages. The component requires data-app-key and data-widget-type attributes, supports size-defined layouts, and manages an iframe for the widget while handling preconnects and dynamic height adjustments.
extensions/amp-yotpo/0.1 · high confidence
Add amp-3q-player extension for 3Q Digital video integration
Introduces the new amp-3q-player extension, enabling AMP pages to embed videos from the 3Q Digital platform via an iframe. The component requires a data-id attribute and supports optional configuration parameters such as key, timestamp, controls, userToken, userGroup, and player. It integrates with the AMP Video Manager, handles preconnects to playout.3qsdn.com, and exposes standard video events (ready, playing, paused, complete) to the page.
extensions/amp-3q-player/0.1 · high confidence
Add amp-beopinion extension for BeOpinion content widgets
Introduces the new amp-beopinion extension (version 0.1), enabling AMP pages to embed BeOpinion content via an iframe. The component handles preconnecting to BeOpinion domains (widget.beop.io, s.beop.io, t.beop.io, data.beop.io), manages iframe sizing through the 'embed-size' message, and displays fallback content or hides placeholders based on the 'no-content' signal.
extensions/amp-beopinion/0.1 · high confidence
Add amp-mowplayer extension for Mow Player video widgets
This change introduces the amp-mowplayer extension, allowing users to embed cloud-hosted Mow Player video widgets in their AMP pages. The addition includes the component's validator rules (defining the amp-mowplayer script and amp-mowplayer tag with mandatory data-mediaid and optional autoplay attributes), the official documentation (amp-mowplayer.md), and the OWNERS file for the extension.
extensions/amp-mowplayer · high confidence
Add amp-o2-player extension for AOL O2Player integration
This change introduces the \amp-o2-player\ extension, allowing developers to embed AOL O2Player video content in AMP pages. The implementation includes the component definition, validation rules (protoascii), and documentation detailing required attributes like \data-pid\ and \data-bcid\, supported layouts, and consent data handling via postMessage for CMP integration.
extensions/amp-o2-player · high confidence
Add amp-pinterest extension
Introduces the new amp-pinterest component, enabling AMP pages to display Pinterest Save buttons, Follow buttons, and embedded Pin widgets. The change includes the extension's documentation (amp-pinterest.md), validator rules (validator-amp-pinterest.protoascii) defining supported layouts and attributes like data-do, and ownership configuration (OWNERS).
extensions/amp-dynamic-css-classes, extensions/amp-pinterest, extensions/amp-shadow-dom-polyfill · high confidence
Add amp-riddle-quiz extension for embedding Riddle quizzes
Users can now embed interactive quizzes from Riddle.com using the new amp-riddle-quiz component. This extension creates an iframe pointing to the Riddle service, requires a data-riddle-id attribute to identify the specific quiz, and handles dynamic height adjustments via postMessage events to ensure the content fits correctly within the AMP layout.
extensions/amp-riddle-quiz/0.1 · high confidence
Add amp-vine element for embedding Vine videos
Introduces the new amp-vine component, allowing users to embed Vine video content via the data-vineid attribute. The element manages an iframe pointing to vine.co, handles preconnects for vine.co and v.cdn.vine.co, and integrates with the AMP pause system to support video playback control.
extensions/amp-vine/0.1 · high confidence
Add amp-wistia-player extension for embedding Wistia videos
This change introduces the new amp-wistia-player extension, allowing users to embed Wistia video players in their AMP pages. The component requires the data-media-hashed-id attribute to identify the video, creates an iframe pointing to the Wistia embed service, and handles video state events (playing, paused, ended, mute changes) by listening to postMessage events from the Wistia domain and dispatching corresponding AMP video events.
extensions/amp-izlesene/0.1, extensions/amp-vine, extensions/amp-wistia-player/0.1 · high confidence
Add amp-yotpo extension for Yotpo on-site widgets
Introduces the new amp-yotpo extension, allowing AMP pages to embed Yotpo on-site widgets such as the bottom line and reviews widgets. The change includes the component implementation, documentation detailing required attributes like data-app-key and data-widget-type, and validator rules enforcing mandatory attributes and supported layouts.
extensions/amp-yotpo · high confidence
Add engagement tracking monitors for the AMP AddThis extension
The AMP AddThis extension now includes a new set of utility monitors in the \addthis-utils/monitors\ directory to track user engagement metrics. These new components—\ActiveToolsMonitor\, \ClickMonitor\, \DwellMonitor\, and \ScrollMonitor\—collect data on active tool usage, page and iframe clicks, time spent on the page (dwell time), and scroll depth, providing richer analytics for AddThis widget interactions.
extensions/amp-addthis/0.1/addthis-utils/monitors · high confidence
Add experimental AMP SoundCloud extension
Adds the \amp-soundcloud\ extension (version 1.0), enabling users to embed SoundCloud tracks and playlists in AMP pages. The component is gated behind the \bento\ or \bento-soundcloud\ experiments and provides attributes like \data-trackid\, \data-playlistid\, \data-visual\, and \data-color\ to control playback and appearance.
extensions/amp-soundcloud/1.0 · high confidence
Add externs definitions and OWNERS file for build-system/externs
This change introduces the initial externs configuration for the build system, adding an OWNERS file to define review permissions for the directory. It also adds specific type definitions for Closure Compiler: amp.extern.js defines core runtime types including FetchInitDef, ExtensionPayload, and window.context properties exposed to ads; dompurify.extern.js defines configuration options for the DOMPurify library; and layout-jank.extern.js defines the PerformanceLayoutJank interface for performance monitoring.
build-system/externs · high confidence
Add interactive example for Bento Fit Text
An example page has been added for the Bento Fit Text component, demonstrating how to load the library via CDN and use the \<bento-fit-text\> element. The example includes interactive buttons that allow users to dynamically change the max-font-size attribute and update the text content, providing a practical reference for integrating the component.
extensions/amp-fit-text/1.0/example · high confidence
Add support for Dianomi ad network in AMP
This change introduces the \amp-ad-network-dianomi-impl\ extension (version 0.1), enabling publishers to serve ads from the Dianomi network using the standard \\<amp-ad\>\ component with \type="dianomi"\. The implementation supports configuration via \data-request-param-id\ (required), \data-dianomi-type\ (optional, e.g., 'smartads', 'recirc', 'context'), and \data-dianomi-env\ (optional, e.g., 'live', 'dev'). It also respects user consent signals, passing consent strings and state to the ad server, and returns an empty ad URL if consent state is unknown.
extensions/amp-ad-network-dianomi-impl · high confidence
Add support for MGID ads in AMP Stories
This change introduces the \amp-ad-network-mgid-impl\ extension, enabling MGID ad delivery specifically within AMP Stories via \amp-story-auto-ads\. The implementation handles ad URL construction, including consent parameters for TCF v1/v2, US Privacy, and GPP, as well as network and device information. It also includes logic to stop loading the \pv\ endpoint in AMP stories and ensures proper cleanup of analytics elements.
extensions/amp-ad-network-mgid-impl · high confidence
Add support for the Facebook Like button via amp-facebook-like
This change introduces the amp-facebook-like component, allowing users to embed a Facebook Like button on their AMP pages. The component renders an iframe that loads the Facebook SDK, supports localization via the data-locale attribute, and handles dynamic height adjustments based on the embedded content. It also includes accessibility improvements by setting an appropriate title for the iframe.
extensions/amp-facebook-like/0.1 · high confidence
Add visual test for custom font loading with amp-font
A new visual test example has been added to demonstrate the amp-font component's ability to manage custom font loading states. The HTML file defines two custom fonts ('Comic AMP' and 'Comic AMP Bold') and uses amp-font to toggle CSS classes based on whether the fonts are loading, loaded, or missing, allowing users to see how to handle font fallbacks and styling changes during the loading process. The accompanying JavaScript test script verifies that the 'loaded' CSS classes are not present in the final rendered output, ensuring the test captures the correct visual state for comparison.
examples/visual-tests/font.amp.404 · high confidence
Added AMP4Ads MRAID example demonstrating visibility tracking
The examples/mraid directory now includes an inabox-mraid.html demo and a mraid.js mock environment to illustrate AMP4Ads MRAID integration. The HTML example showcases how to configure amp-analytics for visibility tracking, including specific triggers for element visibility, root visibility, and hidden states, while the JavaScript file provides a simulated MRAID API to test exposure change events in a local development context.
examples/mraid · high confidence
Added Bento Selector hero example
A new hero example for the Bento Selector component has been added to the documentation site. This HTML file demonstrates how to integrate the \bento-selector\ element within a form, showcasing a grid-based image selection interface with styling and submission handling.
extensions/amp-selector/1.0/example · high confidence
Added Bento component example pages for amp-mathml and amp-stream-gallery
New example HTML pages have been added for the Bento versions of the amp-mathml and amp-stream-gallery extensions. The amp-mathml example demonstrates rendering the quadratic formula both as a block element and inline within text. The amp-stream-gallery example illustrates a horizontal scrolling gallery with programmatic navigation controls (next, previous, and go-to-slide) implemented via JavaScript API calls.
extensions/amp-mathml/1.0/example, extensions/amp-stream-gallery/1.0/example · high confidence
Added Bento component example pages for social and media embeds
New example HTML pages have been added for the following Bento components: embedly-card, facebook, instagram, jwplayer, soundcloud, twitter, and wordpress-embed. These files serve as documentation and testing samples, demonstrating how to load the respective BENTO CDN scripts and stylesheets and configure the custom elements with their specific data attributes (such as data-url, data-href, data-shortcode, and data-trackid).
(repo-wide) · high confidence
Added Bento lightbox example with hidden attribute to prevent FOUC
A new example page for the Bento lightbox component has been added to the documentation site. This example demonstrates the usage of the \bento-lightbox\ element, specifically highlighting the addition of the \hidden\ attribute to prevent flash of unstyled content (FOUC) before the component initializes. It includes the necessary CSS and JavaScript setup to open and close the lightbox via button interactions.
extensions/amp-lightbox/1.0/example · high confidence
Added Bento social-share example page
A new example page has been added for the Bento social-share component, demonstrating how to integrate and style social sharing buttons for platforms including email, Facebook, Twitter, LinkedIn, Pinterest, Tumblr, WhatsApp, and Line. The example provides a complete HTML template with necessary CDN scripts and CSS, showcasing a responsive grid layout with hover effects and platform-specific color schemes.
extensions/amp-base-carousel/1.0/example, extensions/amp-iframe/1.0/example, extensions/amp-social-share/1.0/example · high confidence
Added JSS template for new AMP extensions
The extension scaffolding now includes a JavaScript template using react-jss. When generating a new AMP extension, developers will receive a component.jss.js file that sets up the JSS style hook (createUseStyles) and includes a placeholder style class, enabling the use of CSS-in-JS styling for the extension's UI.
build-system/tasks/make-extension/template/css, build-system/tasks/make-extension/template/jss · high confidence
Added Storybook stories for amp-lightbox 1.0 and Bento Lightbox
New Storybook story files (Basic.amp.js and Basic.js) have been added to the amp-lightbox 1.0 extension directory. These stories provide interactive previews for the legacy amp-lightbox component and the new Bento Lightbox component, allowing developers to visualize and test features such as animations, custom colors, and scrollable content directly in the Storybook interface.
extensions/amp-lightbox/1.0/storybook · high confidence
Added Storybook stories for amp-sidebar
Added Storybook stories for the amp-sidebar component, demonstrating basic sidebar functionality and the toolbar feature which allows navigation elements to be displayed in the main body based on viewport width.
extensions/amp-sidebar/0.1/storybook · high confidence
Added Storybook stories for amp-stream-gallery and BentoStreamGallery
Developers can now preview and interact with the amp-stream-gallery component in Storybook. This change introduces two new story files: Basic.amp.js, which demonstrates the AMP HTML usage with controls for navigation and layout, and Basic.js, which showcases the React/Bento implementation (BentoStreamGallery) with imperative API methods like goToSlide, next, and prev.
extensions/amp-stream-gallery/1.0/storybook · high confidence
Added Storybook story for amp-social-share v0.1
Developers can now preview and configure the amp-social-share component (version 0.1) in Storybook. A new Basic.amp.js story file provides an interactive playground with controls for key parameters such as social network type, share endpoint, and share text, allowing for easier visual testing and configuration of the component's behavior.
extensions/amp-social-share/0.1/storybook · high confidence
Added caption files to AMP Story video examples
The AMP Story video examples now include WebVTT caption files (ecommerce.vtt, gmail.vtt, p1.vtt, stamp.vtt) to provide subtitles for the demo videos, enhancing accessibility and usability for users who need or prefer closed captions.
examples/amp-story/video · high confidence
Added example for Bento inline gallery component
A new example file has been added for the \bento-inline-gallery\ component, demonstrating how to integrate it with \bento-base-carousel\ and \bento-inline-gallery-thumbnails\. This example showcases a gallery setup with thumbnail navigation, centered snap alignment, and pagination controls.
extensions/amp-inline-gallery/1.0/example · high confidence
Added example page for amp-google-read-aloud-player
An example HTML page has been added to the \examples/amp-google-read-aloud-player\ directory, demonstrating how to integrate the \amp-google-read-aloud-player\ component. The page showcases various usage patterns including simple player setup, different layout modes (fixed, fixed-height), and interactive controls via actions (play, pause, mute, unmute, toggle visibility). It also illustrates specific attributes such as \data-speakable\, \data-call-to-action-label\, and audio intro/outro URLs.
examples/amp-google-read-aloud-player · high confidence
Added example page for the AMP Lightbox Gallery Bento component
A new example HTML file has been added to the amp-lightbox-gallery extension, demonstrating how to use the bento-lightbox-gallery custom element. The example includes the necessary CDN scripts and styles for the Bento component, along with a sample image grid layout to showcase the lightbox functionality.
extensions/amp-lightbox-gallery/1.0/example · high confidence
Added interactive example for Bento timeago component
An interactive HTML example for the bento-timeago component has been added to the extensions directory. This page demonstrates how to load the component via CDN and includes buttons that allow users to dynamically change the display locale (switching between English and Arabic) and update the displayed time to the current moment, serving as a practical reference for implementing the component.
extensions/amp-timeago/1.0/example · high confidence
Added standalone Bento Accordion example
A new standalone HTML example has been added for the Bento Accordion component, demonstrating how to integrate the bento-accordion-1.0.js script and CSS via CDN, along with custom styling for expanded and collapsed states.
extensions/amp-accordion/1.0/example · high confidence
Added styled Bento sidebar hero example
A new hero example for the Bento sidebar component has been added to the documentation site. This example demonstrates a styled navigation sidebar with open/close functionality, including specific CSS styling for the sidebar, buttons, and typography, as well as the necessary JavaScript to wire up the API interactions.
extensions/amp-sidebar/1.0/example · high confidence
Apester media extension now supports companion display and video ads
The AMP Apester Media extension now renders companion advertisements alongside video content. This change introduces logic to handle display ads (via DoubleClick) and video ads (via StreamRail and Aniview), allowing publishers to configure ad slots, banner sizes, and refresh intervals. The implementation supports positioning companion ads above, below, or floating relative to the media player, and includes specific handling for Aniview channel IDs and StreamRail macros, as well as GDPR consent data for video ads.
extensions/amp-apester-media/0.1/monetization/companion · high confidence
Apester media extension now supports monetization and ads
The amp-apester-media extension now includes support for ads, enabling monetization features such as bottom ads, companion display and video ads, and in-unit video ads. This change introduces a new monetization module that handles ad logic and integrates with the AMP consent framework to ensure ads are served in compliance with user consent policies.
extensions/amp-apester-media/0.1/monetization · high confidence
Automated GitHub issue management for scheduled public sessions
A new build-system utility has been added to automatically manage GitHub issues for scheduled public sessions, such as Design Reviews. This tool creates issues for upcoming sessions, pins the issue for the next immediate session, and unpins and closes issues for sessions that have concluded. It operates by loading issue templates from a local directory and uses standard Node.js modules to interact with the GitHub API, supporting features like time-zone rotation and daylight saving time adjustments to ensure correct scheduling.
build-system/common/update-session-issues · high confidence
Automated nightly and release workflows for ampjs.org
The build system now includes a complete set of scripts to automate the cutting of nightly branches, building releases, and uploading artifacts. The nightly workflow (cut-nightly.js) identifies the latest stable commit on main, creates a new nightly branch and a corresponding Git tag, and triggers a promotion workflow in the cdn-configuration repository. The release workflow (build-release.js) generates builds for the ampjs.org runtime by writing a custom configuration that sets the CDN URL and proxy regex, then executes the release command. Finally, the upload workflow (upload-release.js) merges build outputs, pre-compresses all release files using Brotli, and uploads them to Cloudflare R2.
build-system/release-workflows · high confidence
Automated release tagging and labeling via release-tagger
The build-system now includes a new release-tagger tool that automates GitHub release management. It supports promoting releases to channels (beta-opt-in, beta-percent, stable, lts) and rolling them back. When promoting, it creates or updates GitHub releases with changelogs organized by component (ads, src, extensions, etc.), labels associated pull requests with the correct channel tag, and marks stable releases as the latest. Rollbacks revert the release status and remove labels. The tool handles 404s gracefully and batches API requests to avoid timeouts.
build-system/release-tagger · high confidence
Automated status page updates for cherry-pick requests
New Node.js scripts in the build system now automatically synchronize GitHub cherry-pick progress with the status.amp.dev incident tracker. When a cherry-pick request is filed, a comment is posted to the issue, and subsequent steps (such as approval, deployment, and verification) trigger corresponding updates on the status page, keeping users informed of the fix's progress across Stable and LTS channels.
build-system/status-page · high confidence
Automated z-index reporting tool for CSS and JS
The build system now includes a new \get-zindex\ task that scans CSS files and JavaScript sources to detect all z-index usages, including those set via inline styles, object properties, and helper functions like \setStyle\. This tool generates a comprehensive \Z\_INDEX.md\ table, helping developers identify and resolve z-index conflicts across the project.
build-system/tasks/get-zindex · high confidence
Babel plugin flattens stringish literals and merges template literals
The new \babel-plugin-transform-stringish-literals\ plugin optimizes source code by statically evaluating and flattening string concatenations. It converts template literals containing only static expressions into simple string literals (e.g., \foo{'123'}bar\ becomes \foo123bar\) and merges adjacent template literals or string concatenations where possible, reducing runtime overhead and simplifying the resulting AST.
build-system/babel-plugins/babel-plugin-transform-stringish-literals · high confidence
Babel plugin transforms Preact-style props to React equivalents
A new Babel plugin (\babel-plugin-react-style-props\) has been added to automatically convert Preact-style JSX attributes (such as \class\) into their React-compatible equivalents (such as \className\). This transformation applies to both JSX attributes and calls to the \propName\ helper function, ensuring that codebases using Preact conventions can be correctly built for a React environment without manual refactoring.
build-system/babel-plugins/babel-plugin-react-style-props · high confidence
Bento Date Display component now supports locale formatting options
The \bento-date-display\ component now accepts a \localeOptions\ prop (mapped from \data-options-\*\ attributes) that allows users to pass specific formatting options to the browser's \Intl.DateTimeFormat\. This enables finer control over how date and time strings are rendered via the \localeString\ output, such as customizing date or time styles, beyond the default behavior.
extensions/amp-date-display/1.0 · high confidence
Bento component infrastructure and initial component releases
This change establishes the core infrastructure for the Bento standalone component system within the \src/bento\ directory. It introduces the \bento.js\ entry point and Preact-based base elements, along with API modules for video providers (Brightcove, Dailymotion, JWPlayer, Vimeo) and a Mustache service for template rendering. Additionally, it adds the initial implementations and documentation for the \bento-accordion\ and \bento-autocomplete\ components, including their styles, animations, and Storybook demos, while also adding an OWNERS file to govern the new directory.
src/bento · high confidence
Bento port of amp-youtube
This change introduces the Bento version of the YouTube embed component, adding a new \bento-youtube\ web component alongside the legacy \amp-youtube\. The diff shows the addition of documentation (\README.md\) detailing the new component's usage via npm or CDN, including specific attributes like \data-videoid\ and \data-live-channelid\, as well as pre-upgrade CSS styles (\amp-youtube.css\) to ensure correct layout before the component loads. The JavaScript entry point (\amp-youtube.js\) registers the legacy \amp-youtube\ element by extending a new base class (\BaseElement\) that inherits from \AmpVideoBaseElement\, gated behind the 'bento' or 'bento-youtube' experiments.
extensions/amp-instagram/1.0, extensions/amp-youtube/1.0 · high confidence
Built-in server now injects AMP runtime CSS into HTML
The built-in server's CSS transformer now automatically inserts the AMP runtime stylesheet (containing the \.i-amp-internal\ class) into the \\<head\>\ of AMP pages. This injected style tag includes the \amp-runtime\ and \i-amphtml-version\ attributes to identify the runtime. The transformation only occurs if the page is detected as AMP (via the \⚡\ or \amp\ attribute on the \\<html\>\ tag) and if a style tag with \amp-runtime\ does not already exist, ensuring that existing runtime styles are not duplicated.
build-system/server/new-server/transforms/css · high confidence
Compile JSON Schemas into optimized validation functions
The build system now compiles imported JSON Schema files (using \assert { type: 'json-schema' }\) into standalone JavaScript validation functions. This allows developers to import schemas directly into their source code, where they are transformed into efficient validators using the \ajv\ library. A key benefit is reduced bundle size: currency code validation (ISO 4217) is optimized by replacing large enum lists with native \Intl.NumberFormat\ checks, and the output is tree-shakeable to exclude unused schema portions.
build-system/compile/json-schema · high confidence
Comprehensive polyfill suite for legacy browser support
This change introduces a complete set of polyfills in src/polyfills to ensure compatibility with older browsers like Internet Explorer 11 and legacy Edge. The suite covers essential APIs including AbortController, Array.includes, Custom Elements V1, document.contains, Fetch, Map/Set, Math.sign, Object.assign/values, ResizeObserver, String.startsWith, and WeakMap. It also includes specific fixes for IE11 quirks, such as ensuring Map.prototype.set and Set.prototype.add return the instance, supporting new Set(iterable), and patching getBoundingClientRect on disconnected nodes. The index.js orchestrates installation based on the build mode (ESM vs legacy) and browser capabilities, while stubs for IntersectionObserver and ResizeObserver allow for lazy loading of the heavier polyfill implementations.
src/polyfills · high confidence
Documentation for Google Ad Manager (Doubleclick) AMP Ad extension
This change introduces comprehensive documentation for the \amp-ad-network-doubleclick-impl\ extension, now branded as Google Ad Manager. It includes an internal implementation guide covering supported features such as Multi-size, Fluid, Real Time Config (RTC), Render on Idle, Lazy Fetch, Refresh, SafeFrame API, Single Request Architecture (SRA), Single Page Ads, and AMP Consent integration. Additionally, it provides specific documentation for the \always-serve-npa\ feature, which uses \\<amp-geo\>\ to request non-personalized ads based on user location regardless of consent decisions, and establishes the OWNERS file for the extension.
extensions/amp-ad-network-doubleclick-impl · high confidence
Embed AMP Story supported languages list at build time
A new Babel plugin, \babel-plugin-amp-story-supported-languages\, has been added to the build system. This plugin scans the \extensions/amp-story/1.0/\_locales\ directory to detect available language files and replaces any reference to the \AMP\_STORY\_SUPPORTED\_LANGUAGES\ symbol with the resulting array of language codes (e.g., \\['af', 'am', 'ar', ...\]\) during compilation. This ensures that the client-side code receives a static, build-time list of supported languages, preventing requests for unsupported locales.
build-system/babel-plugins/babel-plugin-amp-story-supported-languages · high confidence
Enhanced XPath querying for Shadow DOM in e2e tests
A new \queryXpath\ utility has been added to the e2e test driver to enable querying elements across Shadow DOM boundaries. This function works by cloning the Shadow DOM tree into a detached document, assigning unique test IDs to nodes, evaluating the XPath query, and then mapping the results back to the original document nodes. This allows end-to-end tests to reliably locate and interact with elements inside Shadow DOMs, which standard browser XPath implementations cannot traverse.
build-system/tasks/e2e/driver · high confidence
Establishes core experiment infrastructure and initial experiment definitions
The \src/experiments\ directory now contains the foundational system for managing experimental features, including the main \index.js\ logic for toggling experiments via URL parameters, meta tags, and local storage, along with TypeScript definitions (\amp-globals.d.ts\, \types.d.ts\) for the global \AMP\_EXP\ configuration. This change introduces specific experiment definitions for attribution reporting (\attribution-reporting.js\), story ad placements (\story-ad-placements.js\), and story ad progress segments (\story-ad-progress-segment.js\), effectively enabling developers to opt-in to these new testing capabilities.
src/experiments · high confidence
Expanded amp-video-iframe integration examples
The examples/amp-video-iframe directory now includes comprehensive reference implementations for integrating third-party video players with AMP. New files demonstrate ES5 and ES2015+ integration patterns, a specific Video.js integration using the \listenTo\ API, and a complete consent-gated workflow (including \consent.html\ and consent-aware frame scripts) that blocks video playback until user consent is received. All examples also illustrate how to post custom analytics events via the integration API.
examples/amp-video-iframe · high confidence
Expanded third-party vendor support in AMP
This update adds support for a large number of new third-party ad networks and content providers within the AMP ecosystem. The diff shows the creation of numerous new vendor integration files in the \3p/vendors\ directory, including entries for Fairground, Pubfuture, Impactify, Prensa Ibérica, Adenza, JioAds, IncrementX, Sabavision, Yobee, AdMatic, Affinity, PubScale, MoMAGIC, Broadbandy, Wunderkind, Geozo, myua, Clever, gecko, Digiteka, Seedtag, Sevio, Tail, jixie, Playwire, Adsviu, R9x, rcmwidget, Andbeyond, Dex, Clickio, tagon, exco, AppMonsta, 4wMarketplace, Neuwo, adskeeper, avantisvideo, skoiy, BidGear, InsurAds, ads2.bid, CognativeX, Adserver.Online, Pixad, TrafficStars, and Bandsintown Amplified. These additions allow publishers to integrate with these specific ad services directly through AMP components.
3p/vendors · high confidence
Experimental amp-sidebar v0.2 with swipe-to-dismiss and toolbar support
An experimental version of the sidebar component (v0.2) is now available behind the \amp-sidebar-v2\ experiment flag. This new implementation introduces swipe-to-dismiss gestures for closing the sidebar, a customizable background mask, and a toolbar feature that allows navigation elements to be duplicated and displayed in a target location on the main page based on media queries. The component also includes autoscrolling for nested content and improved layout handling for mobile viewports.
extensions/amp-sidebar/0.2 · high confidence
Initial CircleCI configuration and CI infrastructure scripts
This change introduces the foundational CircleCI configuration (config.yml) and a suite of supporting shell scripts to manage the CI pipeline. It establishes the build matrix, including executors for Docker and macOS (M4 Pro), and defines workflows for PR and push builds. Key capabilities added include caching for Git, nvm, and node\_modules to speed up builds, as well as logic to fetch and test the merge commit of pull requests against main. The configuration also integrates browser installation (Chrome, Firefox, Edge) via orbs and scripts, sets up Bazel dependencies for validator tests, and implements a 'graceful halt' mechanism to skip unnecessary jobs when experiments are misconfigured or expired. An OWNERS file is also added to define review permissions for the .circleci directory.
.circleci · high confidence
Initial SmartAds ad network implementation added
This change introduces the SmartAds ad network implementation for AMP, including the core extension code, documentation, and ownership configuration. The implementation allows SmartAds to request ads early via XHR and render them natively within the page using the A4A pathway when the \data-use-a4a\ attribute is set, or fall back to a delayed iframe path otherwise. Publishers can include the script declaration to remove async script loading, though the extension is primarily intended to be loaded dynamically via the \amp-ad\ tag.
extensions/amp-ad-network-smartads-impl · high confidence
Initial addition of amp-ooyala-player extension
This change introduces the amp-ooyala-player component, enabling AMP pages to embed Ooyala videos. The addition includes the component's validation rules (defining required attributes like data-embedcode, data-pcode, and data-playerid, and supported layouts), the official documentation with usage examples and attribute descriptions, and the OWNERS file for repository governance.
extensions/amp-ooyala-player · high confidence
Initial boilerplate for amp-story-education extension
The amp-story-education extension has been initialized with its core project structure. This includes an OWNERS file defining code review responsibilities for specific maintainers and a documentation file (amp-story-education.md) to host extension details. These changes establish the administrative and documentation foundation for the new extension.
extensions/amp-story-education · high confidence
Initial commit of build-system/global-configs
This change introduces the \build-system/global-configs\ directory, establishing the foundational configuration files for the AMP build system. It adds \OWNERS\ to define review permissions for configuration files, a \README.md\ documenting the experiment and release configuration system, and \caches.json\ which lists supported AMP cache domains (Google and Bing). Additionally, it creates the core configuration files \canary-config.json\ and \prod-config.json\ to define experiment flags and runtime settings for their respective release channels, alongside \experiments-config.json\ and \experiments-const.json\ to manage server-side experiment definitions and build-time constants.
build-system/global-configs · high confidence
Initial developer preview for amp-story-panning-media extension
This change introduces the initial scaffold for the \amp-story-panning-media\ extension, enabling developers to pan and zoom images between pages in AMP Web Stories. The diff adds the component's documentation (\amp-story-panning-media.md\), which details usage with \data-x\, \data-y\, and \data-zoom\ attributes, as well as the \lock-bounds\ option. It also includes the validation rules (\validator-amp-story-panning-media.protoascii\) that enforce the component's structure (requiring a single \amp-img\ child) and attribute formats, along with an \OWNERS\ file for repository governance.
extensions/amp-story-panning-media · high confidence
Initial documentation and ownership configuration for AdSense ad network extension
This change introduces the foundational metadata and documentation for the \amp-ad-network-adsense-impl\ extension. It adds an OWNERS file to define code review responsibilities for the \wg-ads-reviewers\ group and \zombifier\, and creates an internal reference document (\amp-ad-network-adsense-impl-internal.md\) that details the extension's availability, required scripts, and usage examples. The documentation specifically covers integration with \amp-consent\ for handling user consent states (including non-personalized ads and restricted data processing signals like \tfcd\/\tfua\) and introduces the \always-serve-npa\ attribute for geo-based non-personalized ad serving.
extensions/amp-ad-network-adsense-impl, extensions/amp-loader · high confidence
Initial documentation and ownership for Valueimpression ad network extension
This change introduces the initial project structure for the Valueimpression ad network implementation within the AMP ecosystem. It adds an OWNERS file to define code review responsibilities for the \amp-ad-network-valueimpression-impl\ extension and creates an internal markdown document detailing the extension's availability, required scripts, and configuration parameters (such as client ID, metadata, and tag ID). This establishes the foundational governance and technical documentation for publishers integrating this specific ad network via the amp-ad tag.
extensions/amp-ad-network-valueimpression-impl · high confidence
Initial documentation and ownership setup for amp-subscriptions-google
This change introduces the initial documentation for the \amp-subscriptions-google\ extension, detailing its configuration for Subscribe with Google, including Real Time Config (RTC) via \skuMapUrl\ and entitlements pingback behavior. It also establishes the \OWNERS\ file for the extension, designating chrisantaki, dkravchuk, and jpettitt as the responsible owners.
extensions/amp-subscriptions-google · high confidence
Initial documentation and validation rules for amp-3q-player
This change introduces the initial documentation and validation specification for the new amp-3q-player extension. It adds an OWNERS file assigning maintenance to the wg-components working group, a markdown reference guide detailing usage and attributes (such as data-id and autoplay), and a protoascii validator file defining the component's tag structure, required attributes, and supported layouts (FILL, FIXED, FLEX\_ITEM, RESPONSIVE).
extensions/amp-3q-player · high confidence
Initial documentation and validation rules for amp-access extension
This change introduces the foundational documentation and validation specifications for the new amp-access extension, which provides paywall and subscription support for AMP pages. It adds the \amp-access.md\ reference guide detailing the access flow (authorization, pingback, login), the \amp-access-analytics.md\ guide for tracking access events via amp-analytics triggers, and the \validator-amp-access.protoascii\ file to enforce the correct structure of the amp-access JSON configuration. An OWNERS file is also added to define maintainers for the extension.
extensions/amp-access · high confidence
Initial implementation of DoubleClick ad network support for AMP
This change introduces the core implementation for the DoubleClick ad network within the AMP ecosystem, establishing the \amp-ad-network-doubleclick-impl\ extension. It provides the foundational logic for handling ad requests, including support for Single Request Architecture (SRA) to batch multiple ad slots into a single call, and integrates with the SafeFrame API for secure ad rendering. The implementation also includes utilities for managing flexible ad slots, handling cookie opt-outs, and processing targeting parameters, enabling publishers to serve DoubleClick ads on AMP pages.
extensions/amp-ad-network-doubleclick-impl/0.1 · high confidence
Initial implementation of amp-auto-lightbox extension
This change introduces the amp-auto-lightbox extension, which automatically detects \<amp-img\> elements and applies the lightbox attribute to enable gallery viewing. The extension evaluates images based on sizing criteria (natural vs. render area) and tree shape criteria, while excluding elements that are actionable (e.g., buttons, links), have explicit opt-out attributes, or are nested within non-lightboxable ancestors like amp-carousel or amp-lightbox. It also respects document metadata (LD+JSON and Open Graph types) to enable the feature only on appropriate content types like articles and blog posts.
extensions/amp-auto-lightbox/0.1 · high confidence
Initial implementation of amp-list component with load-more support
This change introduces the initial version of the amp-list component, enabling dynamic content rendering from JSON sources. It includes built-in support for infinite scrolling via the load-more feature, providing default UI elements for loading states, errors, and the 'See More' button. The component also supports layout=container for dynamic resizing, local data binding via amp-state, and error handling with fetch-error events.
extensions/amp-list/0.1 · high confidence
Initial implementation of amp-mraid extension for AMPHTML ads
The new amp-mraid extension allows AMPHTML ads to interact with the MRAID host API within mobile app webviews. By loading mraid.js and registering MRAID functions as host services, this extension enables amp-analytics, amp-ad-exit, and amp-lightbox components to function correctly in mobile app ad environments. The extension is registered as a host service for the AMP4ADS format and includes validation rules, though creatives using it are intended to be injected by ad networks after validation rather than validating directly.
extensions/amp-mraid · high confidence
Initial project scaffolding and development environment setup
This change establishes the foundational structure for the AMP project, introducing a new \amp\ CLI task runner to replace the previous \gulp\-based workflow. It adds essential configuration files including \.editorconfig\, \.eslintrc.js\, \.prettierrc\, and \.renovaterc.json\ to standardize code formatting, linting, and dependency management. The commit also includes initial documentation files such as \CODE\_OF\_CONDUCT.md\, \SECURITY.md\, and \OWNERS\, alongside a \Lando\ configuration for containerized local development.
(repo-wide) · high confidence
Initial release of SmartAds ad network implementation
This change introduces the initial implementation of the SmartAds ad network extension (version 0.1). It adds the core JavaScript logic in \amp-ad-network-smartads-impl.js\ to handle ad requests via the A4A protocol, including URL transformation and validation against SmartAds-specific domains (\smart-ads.biz\). It also includes \smartads-a4a-config.js\ to determine when A4A mode should be enabled for SmartAds ad units based on the \data-use-a4a\ attribute and source URL prefixes.
extensions/amp-ad-network-smartads-impl/0.1 · high confidence
Initial release of amp-ad-exit extension for AMPHTML ads
This change introduces the \amp-ad-exit\ extension, which provides configurable behavior for ad exits in AMPHTML ads. The diff establishes the core infrastructure for this feature by adding the extension's documentation (\amp-ad-exit.md\), its validator schema (\validator-amp-ad-exit.protoascii\) to enforce valid usage, and the \OWNERS\ file to define review responsibilities. This enables developers to implement controlled ad exit flows with specific filters and URL handling.
extensions/amp-ad-exit · high confidence
Initial release of amp-analytics extension documentation and configuration
This change introduces the foundational documentation and configuration structure for the new \amp-analytics\ extension. It includes the main component reference (\amp-analytics.md\), a list of supported analytics vendors (\analytics-vendors-list.md\), and detailed guides for integrating custom analytics tools, video analytics, and linker ID forwarding. The extension also defines its validator rules (\validator-amp-analytics.protoascii\) and establishes ownership via an \OWNERS\ file, enabling publishers to track user engagement and send data to third-party or in-house analytics solutions.
extensions/amp-analytics · high confidence
Initial release of amp-bind extension
This change introduces the amp-bind extension, enabling custom stateful interactivity on AMP pages through data binding and JavaScript-like expressions. The diff establishes the core infrastructure for this feature: the OWNERS file defines maintainers and review rules (including specific notification for AMP4Email validator changes); the amp-bind.md documentation details the three main concepts (State, Expressions, Bindings) with usage examples for websites, ads, and email; and the validator-amp-bind.protoascii file defines the validation rules for the amp-bind script tag, amp-state component (including src and credentials attributes), and amp-bind-macro element across AMP, AMP4ADS, and AMP4EMAIL formats.
(repo-wide) · high confidence
Initial release of amp-brightcove video component
Adds the amp-brightcove extension, enabling the embedding of Brightcove video players within AMP pages. The component handles iframe creation, manages player readiness via a deferred promise, integrates with the AMP consent management system to pass consent state to the player source, and implements the standard video interface (including play/pause, fullscreen, and event redispatching) to allow interaction with the embedded video content.
extensions/amp-brightcove/0.1 · high confidence
Initial release of amp-experiment for A/B testing
Adds the amp-experiment component, enabling A/B and multivariate testing on AMP pages. The extension includes the component implementation, documentation, and validator rules that enforce a 15KB JSON configuration limit and support user-sticky variant assignments via Client ID.
extensions/amp-experiment · high confidence
Initial release of amp-geo component for country-level geolocation
This change introduces the amp-geo component, which provides country-level geolocation based on the user's IP address and supports grouping countries via custom or preset lists (such as US state subdivisions). It adds the necessary documentation, validation rules, and ownership configuration to enable developers to apply CSS classes and attributes based on geographic location.
extensions/amp-geo · high confidence
Initial release of amp-inline-gallery component and documentation
This change introduces the \amp-inline-gallery\ component, which displays multiple similar pieces of content along a horizontal axis using \amp-base-carousel\, with optional pagination dots and thumbnails. The update adds the official documentation (\amp-inline-gallery.md\) detailing usage, including standalone Bento support, pagination configuration, and thumbnail integration, alongside the validator rules (\validator-amp-inline-gallery.protoascii\) that define the supported attributes and layouts for the main component, its pagination indicator, and thumbnails.
extensions/amp-inline-gallery · high confidence
Initial release of amp-list component with validation and documentation
Introduces the amp-list component, which dynamically fetches data from a CORS JSON endpoint and renders list items using templates. The release includes the official validator rules (defining supported attributes like src, template, binding, and load-more), the component's documentation (amp-list.md), and ownership configuration (OWNERS).
extensions/amp-list · high confidence
Initial release of amp-live-list component with server-side filtering support
This change introduces the amp-live-list component, enabling live-updating content such as live blogs or breaking news feeds. It includes the core documentation (amp-live-list.md) detailing usage, polling behavior, and reference points (update, items, pagination), as well as a dedicated guide for server-side filtering (amp-live-list-server-side-filtering.md) which allows publishers to optimize payload sizes by filtering updates on the server. The component's validation rules are defined in validator-amp-live-list.protoascii, specifying required attributes like data-max-items-per-page and data-poll-interval, and the extension's ownership is established in OWNERS.
extensions/amp-live-list · high confidence
Initial release of amp-soundcloud extension with Bento support
This change introduces the new amp-soundcloud component, allowing users to embed SoundCloud tracks and playlists in AMP pages. The extension supports both 'Classic' and 'Visual' display modes via the data-visual attribute, allows custom colors in Classic mode, and handles private tracks through an optional data-secret-token attribute. It is available in version 1.0 with full Bento support for standalone use outside of AMP documents, while maintaining backward compatibility with the deprecated 0.1 version. The validator rules enforce that either a track ID or playlist ID is provided, and support standard AMP layouts including responsive and fixed-height.
extensions/amp-soundcloud · high confidence
Initial release of amp-timeago component (v1.0)
This change introduces the amp-timeago component, which displays fuzzy timestamps (e.g., '3 hours ago') by formatting dates relative to the current time. The release includes the component's documentation, ownership rules, and validator definitions for both AMP and AMP4EMAIL formats. Key features supported in version 1.0 include setting the target date via the \datetime\ attribute (with optional timezone offsets), localizing output via the \locale\ attribute, and displaying the raw date after a specified duration using the \cutoff\ attribute. The component also supports dynamic updates to the datetime via amp-bind and is available for standalone use via Bento.
extensions/amp-timeago · high confidence
Initial release of amp-vimeo extension with Do Not Track support
The new amp-vimeo component allows users to embed Vimeo videos in AMP pages, supporting responsive layouts and the required data-videoid attribute. This release introduces version 0.1 as the default, includes validation rules for supported layouts, and adds a do-not-track attribute to allow users to block session tracking and cookies by the Vimeo player.
extensions/amp-vimeo · high confidence
Initial release of the AMP Story Player component
This change introduces the \amp-story-player\ component, enabling websites to embed and navigate through a collection of AMP Web Stories. The implementation includes the core player logic (\amp-story-player-impl.js\), an entry point component (\amp-story-entry-point\) for launching stories, and a component manager to handle initialization. Key features documented in the new README include horizontal swiping for navigation, support for custom UI controls, circular wrapping of stories, and the ability to programmatically fetch additional stories via a JSON configuration endpoint. The player also supports autoplay, muted states, and various custom events for integration.
(repo-wide) · high confidence
Initial specification and documentation for AMPHTML Ads (A4A) and Real Time Config (RTC)
This change introduces the foundational documentation and governance structure for the AMPHTML Ads (A4A) format and the Real Time Config (RTC) feature. It establishes the \amp-a4a-format.md\ specification, defining the rules for AMP creatives such as the required \\<html ⚡4ads\>\ tag, the use of \amp4ads-v0.js\, and restrictions on CSS and boilerplate. It also documents the RTC mechanism for Fast Fetch, detailing how publishers can configure up to five parallel callouts to third-party vendors or custom URLs to augment ad targeting. Additionally, it sets up the \OWNERS\ files for the \amp-a4a\ and \amp-ad-network-adzerk-impl\ extensions, assigning review authority to the \ampproject/wg-ads-reviewers\ working group.
extensions/amp-a4a · high confidence
Initial specification and documentation for amp-image-lightbox
This change introduces the initial specification, documentation, and validation rules for the new \amp-image-lightbox\ component. The component provides a lightbox experience for images, supporting features such as zooming, panning, and captions via \figcaption\ or \aria-describedby\. It is available for both AMP websites and AMP4Email, though the AMP4EMAIL variant is marked as deprecated due to positioning issues. The entry includes the \OWNERS\ file defining review responsibilities, the \amp-image-lightbox.md\ reference documentation detailing usage and attributes (including the optional \data-close-button-aria-label\), and the \validator-amp-image-lightbox.protoascii\ file enforcing that the component uses the \nodisplay\ layout.
extensions/amp-image-lightbox · high confidence
Initial specification and documentation for the amp-anim extension
This change introduces the foundational specification, documentation, and ownership rules for the \amp-anim\ component. The validator rules (\validator-amp-anim.protoascii\) define the component for AMP, AMP4ADS, and AMP4EMAIL formats, supporting layouts such as INTRINSIC, RESPONSIVE, and FIXED, while explicitly restricting \object-fit\ and \object-position\ attributes in AMP4EMAIL contexts. The accompanying documentation (\amp-anim.md\) explains that the component manages animated images (typically GIFs) with optimized CPU usage when off-screen, and the \OWNERS\ file establishes review permissions for the \wg-components\ working group.
extensions/amp-anim · high confidence
Initial support for amp-wistia-player extension
This change introduces the \amp-wistia-player\ component, allowing users to embed Wistia videos in AMP pages. The implementation includes the necessary validator rules (defining the required \data-media-hashed-id\ attribute and supported layouts), documentation, and ownership configuration. Notably, the validator now accepts the \rotate-to-fullscreen\ attribute for consistency with other players, even though the underlying Wistia iframe handles this behavior internally.
extensions/amp-wistia-player · high confidence
Initial validation rules for the amp-story-player extension
This change introduces the initial validator definitions for the new amp-story-player extension, establishing the allowed HTML structure and attributes for the component. It defines supported layouts (including intrinsic) and specifies that the player can contain links, spans, and images. Specifically, it adds validation rules for an \<img\> element used as a poster within the player, requiring attributes such as alt, attribution, data-amp-story-player-poster-img, and lazy loading, while also permitting an intrinsic sizing image for transformed AMP documents.
extensions/amp-story-player · high confidence
Initial validator rules and ownership for amp-image-slider
This change introduces the initial validation schema and ownership configuration for the new amp-image-slider extension. The validator rules define the amp-image-slider script extension (versions 0.1 and latest) and the AMP-IMAGE-SLIDER component, specifying supported layouts (FIXED, INTRINSIC, NODISPLAY, RESPONSIVE), required child tags (AMP-IMG and DIV), and attributes such as initial-slider-position and step-size. An OWNERS file is also added, assigning maintenance responsibility to the wg-components working group.
extensions/amp-image-slider · high confidence
Introduce \<amp-web-push\> extension for web push notifications
Adds the new \<amp-web-push\> extension, enabling publishers to integrate web push notifications into AMP pages. This includes the core configuration element (\<amp-web-push\>), a widget component (\<amp-web-push-widget\>) for managing subscription states, and a service worker implementation to handle push events. The extension manages the subscription lifecycle by loading a helper iframe and a permission dialog on the canonical origin to securely handle notification permissions and service worker registration.
extensions/amp-web-push, extensions/amp-web-push/0.1 · high confidence
Introduce A4A ad infrastructure and variable substitution
This change introduces the core A4A (AMP Ads for AMP) infrastructure, including the main \amp-a4a\ extension, a base network implementation, and a new \A4AVariableSource\ that provides ad-specific variable substitution (such as \NAV\_TIMING\ and \HTML\_ATTR\) for analytics and ad requests. It also adds supporting components for ad lifecycle management, including a \RefreshManager\, template handling, cryptographic validation, and multiple rendering strategies (Friendly Frame, Name Frame, and Safe Frame).
extensions/amp-a4a/0.1 · high confidence
Introduce AMP Link Preloading (ALP) for ads
Adds a new ALP handler for ads that intercepts clicks on AMP cache links to enable direct navigation with impression logging. The handler transforms the original URL into a fragment parameter, supports A2A navigation via postMessage, and preloads the destination document and AMP runtime to improve load performance.
ads/alp · high confidence
Introduce AMP Smartlinks extension for Narrativ Linkmate integration
Adds the new \amp-smartlinks\ extension (version 0.1), which integrates with the Narrativ Linkmate service to automatically monetize outbound links in AMP documents. The extension reads configuration attributes such as \nrtv-account-name\, \linkmate\, and \exclusive-links\ from the \\<amp-smartlinks\>\ tag, fetches publisher-specific settings via the Narrativ API, and uses the shared \LinkRewriterManager\ to replace standard anchor URLs with Narrativ smart links. It also tracks page impressions and handles link exclusions based on specific URL markers.
extensions/amp-smartlinks/0.1 · high confidence
Introduce AMP Story Auto Analytics extension for automatic gtag tracking
The new \amp-story-auto-analytics\ extension (version 0.1) automatically injects a gtag-based analytics configuration into AMP stories, eliminating the need for manual setup. It tracks key user interactions including page views, story completion, and shopping-specific events (tag clicks, product listing views, product detail views, and buy-now clicks) by wiring up the \amp-analytics\ component with predefined triggers. The extension ensures that count-based metrics like story page counts are recorded only once per session via \repeat: false\ settings and configures the gtag ID and default groups automatically.
extensions/amp-story-auto-analytics/0.1 · high confidence
Introduce AMP inabox runtime support
Adds a new runtime mode for AMP documents embedded in iframes (inabox), providing a dedicated entry point, service installation, and resource management. This includes a custom viewport implementation that coordinates with the host environment, a lightweight resource manager optimized for ad rendering, and a dummy CID service since client IDs are not supported in this context. The runtime also supports story ads, host-provided services for visibility and fullscreen, and specific CSS styling to ensure correct layout within the iframe.
src/inabox · high confidence
Introduce AMP mode transformer Babel plugin for production builds
A new Babel plugin has been added to the build system to transform runtime mode checks during production bundling. The plugin intercepts imports of the \getMode\ function from \\#core/mode\ and rewrites specific property accesses: \test\ and \localDev\ are set to \false\, \minified\ is set to \true\, and \version\ is replaced with the internal runtime version constant. Additionally, when building for ESM, the \development\ property is also set to \false\. This ensures that development-only code paths are stripped or disabled in the final minified output.
build-system/babel-plugins/babel-plugin-amp-mode-transformer · high confidence
Introduce AdSense Fast Fetch implementation with responsive ad support
The AdSense ad network extension now implements the A4A (AMP for Ads) architecture, enabling the Fast Fetch ad loading mechanism by default. This change introduces a new \AdsenseSharedState\ class to track previous ad slots and generate state-dependent URL parameters (such as \prevFmts\ and \pv\) for ad requests. It also adds a \ResponsiveState\ helper to manage responsive ad behavior, including upgrading ad units to responsive formats based on publisher settings and converting full-width ads to container-width for desktop users.
extensions/amp-ad-network-adsense-impl/0.1 · high confidence
Introduce Bento Date Countdown component with Preact and Web Component support
The \amp-date-countdown\ extension now includes a new \bento-date-countdown\ component, available as both a Preact/React component and a standalone Web Component. This addition allows developers to display a countdown sequence to a specified date using modern frameworks or native web standards. The component supports various input methods for the target time (such as \end-date\, \timestamp-ms\, and \timeleft-ms\), offers localization for time unit labels across multiple languages, and includes a \count-up\ attribute to reverse the direction of the timer. It also supports custom rendering via mustache templates in the web component version and provides pre-upgrade styles to prevent layout shifts.
extensions/amp-date-countdown/1.0 · high confidence
Introduce Bento Embedly Card web component
Adds the \bento-embedly-card\ web component (alongside \bento-embedly-key\) to provide responsive, shareable embeds using Embedly cards. This new component allows developers to display rich media embeds with built-in analytics, supporting features like dark themes, share icons, and programmatic URL updates. It requires including the Bento library and the specific component CSS/JS, and can be configured with an API key to remove Embedly branding.
extensions/amp-embedly-card/1.0 · high confidence
Introduce Bento MathML component for rendering formulas
Adds the initial implementation of the Bento MathML component, enabling developers to render MathML formulas via a web component (\\<bento-mathml\>\) or a Preact/React component (\\<BentoMathml\>\). The component supports inline and block layouts, accepts a \data-formula\ (or \formula\ prop) attribute, and renders the content inside an iframe for isolation. This change introduces the necessary JavaScript logic, CSS styles, and documentation for this new capability.
extensions/amp-mathml/1.0 · high confidence
Introduce Bento Selector (v1.0) as a Preact-based Web Component
This change adds the \bento-selector\ component (version 1.0) to the AMP extensions, providing a modern, Preact-based implementation of the selector control. It introduces a new \\<bento-selector\>\ Web Component that supports single and multiple selection, keyboard navigation modes (\none\, \focus\, \select\), and form integration. The component exposes an imperative API (\selectBy\, \toggle\, \clear\) and dispatches \select\ events. It also includes a corresponding Preact/React component (\BentoSelector\ and \BentoSelectorOption\) for use in React applications, along with necessary CSS styles and documentation.
extensions/amp-selector/1.0 · high confidence
Introduce Bento Stream Gallery component
Adds the new \<bento-stream-gallery\> web component (version 1.0) for displaying horizontally scrollable content that dynamically adjusts visible slides based on container width. The component exposes an imperative API with actions like next(), prev(), and goToSlide(index), and emits a slideChange event when the active slide changes. It supports configuration via props such as min-item-width, max-item-width, loop, controls, and custom arrow slots, and is available via npm (@bentoproject/stream-gallery) or CDN scripts.
(repo-wide) · high confidence
Introduce Bento-based amp-app-banner extension (v1.0)
Adds a new version (1.0) of the amp-app-banner extension built on the Bento framework using Preact. This component displays a platform-specific app banner on iOS and Android, automatically detecting the OS to use the correct deep-linking logic (parsing apple-itunes-app meta tags for iOS and manifest.json for Android). It includes a dismissible UI with local-storage persistence to prevent re-display, respects browser built-in banner capabilities by hiding itself when native support is available, and requires an \<button open-button\> child to trigger the install action.
extensions/amp-app-banner/1.0 · high confidence
Introduce NWS ad network implementation with active view analytics
Adds the \amp-ad-network-nws-impl\ extension (version 0.1) for the Newsroom AI ad network. This implementation supports Fast Fetch and automatically injects an \amp-analytics\ element to report active view metrics, with the analytics configuration extracted from the \X-NWS\ response header. The extension handles cleanup of the analytics element when the ad slot is torn down.
extensions/amp-ad-network-nws-impl/0.1 · high confidence
Introduce Preact-based Bento component architecture
This change introduces a new Preact-based foundation for Bento components, replacing the legacy implementation with a modern, type-safe approach. It adds a new \PreactBaseElement\ and \AmpPreactBaseElement\ that handle mounting, unmounting, and lifecycle management, while providing a \bento-ce.js\ bridge to define custom elements. The update includes a suite of Preact hooks (\useIntersectionObserver\, \useMutationObserver\, \useQuery\, etc.) and components (\IframeEmbed\, \ContainWrapper\) to simplify component development. Additionally, it adds a \compat\ layer to support React-style APIs like \forwardRef\ and \memo\ within the Preact environment, and establishes an \OWNERS\ file for the \src/preact\ directory.
src/preact · high confidence
Introduce Smartadserver ad network implementation for AMP
This change adds the \amp-ad-network-smartadserver-impl\ extension, enabling Smartadserver as a supported ad network within AMP. The implementation supports Real Time Config (RTC) for preloading ad settings, forwards consent data to the ad server, and includes support for the IAB SupplyChain Object (\schain\). It also handles specific rendering requirements, such as using \iframe\_get\ on iOS, and ensures ADCID generation respects storage consent policies.
extensions/amp-ad-network-smartadserver-impl, extensions/amp-ad-network-valueimpression-impl/0.1 · high confidence
Introduce Web Stories Dev-Tools with Preview and Debug tabs
Developers can now access the Story Dev-Tools by appending \#development=1 to a Web Story URL. This new interface features a Preview tab for visualizing stories across multiple device frames and a Debug tab that validates the story's HTML against the AMP validator, displaying specific errors or a success message.
extensions/amp-story-dev-tools/0.1 · high confidence
Introduce \`make-extension\` build task for generating AMP extensions
Adds a new \make-extension\ task under \build-system/tasks\ that scaffolds new AMP extensions from templates. The task supports options to exclude CSS (\--nocss\) or JSS (\--nojss\), automatically formats generated files using Prettier, and updates the extension bundle configuration. It also establishes ownership rules for the extension boilerplate via a new OWNERS file.
build-system/tasks/make-extension · high confidence
Introduce amp-3d-gltf component for displaying 3D models
This change introduces the new amp-3d-gltf component, allowing users to display GL Transmission Format (glTF) 3D models in AMP pages. The component supports glTF 2.0 (excluding embedded cameras and animations) and provides attributes for controlling rendering behavior, including alpha transparency, antialiasing, background clear color, max pixel ratio, auto-rotation, and zoom enablement. It also exposes a setModelRotation action for programmatic control of the model's orientation. The entry includes the component's documentation, validation rules, and ownership configuration.
extensions/amp-3d-gltf · high confidence
Introduce amp-3d-gltf component for embedding 3D models
Adds the new amp-3d-gltf extension, enabling users to embed interactive 3D GLTF models in AMP pages. The component renders a WebGL-based viewer inside an iframe, supporting configuration via attributes such as src, alpha, antialiasing, clearColor, and zoom controls. It also exposes a setModelRotation action to programmatically rotate the model, with automatic preconnection to required Three.js libraries and fallback handling for browsers without WebGL support.
extensions/amp-3d-gltf/0.1 · high confidence
Introduce amp-access extension with multi-protocol authorization and expression evaluation
This change introduces the amp-access extension, enabling publishers to implement paywalls, login flows, and content gating. It provides a configurable expression engine (access-expr) for evaluating access conditions, supports multiple authorization protocols including client-side, server-side, JWT, iframe, and vendor adapters, and includes a complete login dialog workflow with postback handling and internationalization.
extensions/amp-access/0.1 · high confidence
Introduce amp-access-fewcents paywall component
Publishers can now integrate the Fewcents micropayments platform on AMP pages using the new amp-access-fewcents component (version 0.1). This extension handles the authorization flow and renders a branded paywall overlay when access is denied, allowing users to unlock content via a single click. Configuration is simplified compared to standard amp-access: publishers only need to provide an access key, article identifier, category, and optional branding settings (logo URL, primary button color), without configuring separate authorization, pingback, or login endpoints. The component supports analytics events compatible with amp-access and includes built-in styling for the paywall dialog.
extensions/amp-access-fewcents · high confidence
Introduce amp-access-laterpay extension for paywalled content
Adds the initial implementation of the amp-access-laterpay extension (version 0.1), enabling AMP documents to integrate with the Laterpay payment provider for article paywalls. This change introduces the core JavaScript logic (LaterpayVendor) to handle authorization, purchase option selection, and region-specific API configuration (EU/US, live/sandbox), along with the associated CSS styles for rendering the payment UI components such as purchase buttons and metadata.
extensions/amp-access-laterpay/0.1 · high confidence
Introduce amp-access-laterpay version 0.2
This change adds a new version (0.2) of the amp-access-laterpay extension, including its implementation logic, CSS styles, and owner configuration. It establishes the structural foundation for the extension's badge and purchase UI components, defining the specific styling rules and layout behaviors that users will see on their pages.
extensions/amp-access-laterpay/0.2 · high confidence
Introduce amp-access-poool extension for Poool paywall integration
Adds the new amp-access-poool extension (version 0.1), enabling AMP pages to integrate with the Poool paywall service. This implementation registers a 'poool' service that initializes a PooolVendor instance, handling authorization requests to Poool's API and rendering the paywall UI within a specified container element via an iframe. The extension enforces mandatory configuration parameters (bundleID, itemID) and supports optional settings such as debug mode, custom segments, and widget forcing.
extensions/amp-access-poool/0.1 · high confidence
Introduce amp-access-poool extension for Poool paywalls
Adds the new amp-access-poool component, enabling AMP pages to integrate with Poool's paywall service. This extension relies on the existing amp-access infrastructure and requires a specific configuration (including bundleID, itemID, and pageType) along with three distinct HTML sections: an article preview, the main content, and the paywall container. The change also includes the necessary validator rules and documentation to support this integration.
extensions/amp-access-poool · high confidence
Introduce amp-action-macro for reusable actions
The new amp-action-macro extension allows authors to define reusable actions that can be invoked elsewhere in the document. This element supports defining argument variables via the 'arguments' attribute, validates that invoked arguments match the defined macro parameters, and prevents recursive self-references to ensure safe execution.
extensions/amp-action-macro, extensions/amp-action-macro/0.1 · high confidence
Introduce amp-ad-exit extension for ad click handling and attribution
Adds the new amp-ad-exit extension (version 0.1), which manages ad exit navigation, click filtering (delay, location, inactive elements), variable substitution, and tracking URL pings. It supports indirect targets, attribution reporting signals, and integrates with HostServices for secure URL opening, falling back to standard window dialogs when necessary.
extensions/amp-ad-exit/0.1 · high confidence
Introduce amp-ad-network-fake-impl extension for ad testing and demos
Adds a new fake ad network implementation (version 0.1) that allows developers to test ad integrations and create demo ads without a real ad server. The extension includes an \AmpAdMetadataTransformer\ to generate and inject necessary metadata (such as custom styles, extensions, and runtime offsets) into the ad creative, and an \ExternalReorderHeadTransformer\ to correctly structure the document head for AMP4ADS compliance. It supports both \src\ and \srcdoc\ attributes for providing ad content, and includes logic to convert standard AMP documents into AMP4ADS format during the creative transformation process.
extensions/amp-ad-network-fake-impl/0.1 · high confidence
Introduce amp-addthis extension for AddThis sharing widgets
Adds the new amp-addthis extension, enabling publishers to embed AddThis sharing tools in AMP pages. The implementation includes the main JavaScript component (amp-addthis.js) which manages configuration, widget loading, and analytics, along with supporting modules for configuration management, post-message communication, and mode detection (including WordPress-specific modes). A new CSS file (amp-addthis.css) provides styling for the widgets, including specific layouts for floating and message-type tools.
extensions/amp-addthis/0.1 · high confidence
Introduce amp-apester-media extension for Apester smart units
Adds the new amp-apester-media component, allowing users to embed Apester smart units and playlists in AMP pages. The extension supports two modes: single media mode via the required data-apester-media-id attribute, and playlist mode via the required data-apester-channel-token attribute. It includes documentation detailing usage and accessibility features (automatic aria-label on the loading image), defines supported layouts (FILL, FIXED, FIXED\_HEIGHT, FLEX\_ITEM, NODISPLAY, RESPONSIVE), and registers the necessary validator rules and ownership.
extensions/amp-apester-media · high confidence
Introduce amp-apester-media extension with in-unit ads and bottom ad support
This change adds the new \<amp-apester-media\> AMP extension, enabling the embedding of Apester interactive media content. The extension supports in-unit ad overlays and a dedicated bottom ad slot (configured via GPT/doubleclick), along with platform detection, meta tag extraction, and fullscreen capabilities for a richer user experience.
extensions/amp-apester-media/0.1 · high confidence
Introduce amp-app-banner element for mobile app promotion
Adds the new amp-app-banner component, which displays a fixed banner at the bottom of the viewport on iOS and Android devices. The implementation includes platform-specific logic to handle app store navigation and dismiss actions, with a dismiss button that persists user preference via document storage to prevent re-display. The banner features a custom dismiss UI with increased touch targets for accessibility and handles viewport padding updates to ensure content remains visible.
extensions/amp-app-banner/0.1 · high confidence
Introduce amp-app-banner extension for cross-platform app install prompts
This change adds the new \amp-app-banner\ component, which provides a wrapper and minimal UI for a fixed-position banner prompting users to install a mobile app. The extension supports both iOS and Android by leveraging native data sources (Apple's \apple-itunes-app\ meta tag and Android's \manifest.json\) to direct users to the appropriate app store or deep link. It includes validator rules enforcing that the component is a direct child of the \\<body\>\, has a maximum height of 100px, and contains a required \button\[open-button\]\ for interaction. The banner remains visible until dismissed, after which it is hidden permanently for that domain unless local storage is cleared or the user switches browsers.
extensions/amp-app-banner · high confidence
Introduce amp-autocomplete component
Adds the new amp-autocomplete extension, enabling developers to provide dynamic, remote, or static autocomplete suggestions for input fields. The component supports multiple filtering strategies (substring, prefix, token-prefix, fuzzy, and custom), allows fetching data from remote sources via the src attribute, and includes features like inline editing support, prefetching, and keyboard navigation. It also provides styling for the results dropdown and handles selection events, making it a complete solution for search-as-you-type experiences in AMP pages.
(repo-wide) · high confidence
Introduce amp-autocomplete extension for dynamic content suggestions
Adds the new amp-autocomplete component, enabling developers to provide real-time search suggestions and input completion for both AMP websites and AMP4Email. The change includes the component's documentation, validation rules, and ownership configuration, supporting features such as client-side filtering (substring, prefix, fuzzy, custom), remote data fetching via src, and customizable templates for rich content display.
extensions/amp-autocomplete · high confidence
Introduce amp-base-carousel 0.1 as a new generic carousel component
A new \amp-base-carousel\ component (version 0.1) is now available, providing a generic carousel for displaying multiple similar pieces of content along a horizontal or vertical axis. This component supports features such as auto-advancing slides, configurable visible counts, mixed-length slides, and snapping behavior. It includes built-in accessibility improvements, such as treating the carousel as a list when multiple items are visible, and offers customizable navigation arrows with RTL support. The component is marked as experimental and includes documentation for its attributes, actions, and events.
extensions/amp-base-carousel/0.1 · high confidence
Introduce amp-base-carousel v1.0 with imperative API and experiment gating
The \amp-base-carousel\ extension (version 1.0) is now available, providing a generic carousel component that supports horizontal or vertical layouts with optional navigational arrows. This release introduces an imperative JavaScript API allowing developers to programmatically control the carousel via \next()\, \prev()\, and \goToSlide(index)\ actions, as well as handle events. The component is currently gated behind the 'bento' or 'bento-carousel' experiments, meaning it will only function if these experiments are enabled in the user's environment.
extensions/amp-base-carousel/1.0 · high confidence
Introduce amp-beopinion extension for embedding BeOpinion content
Adds the new \amp-beopinion\ component, allowing publishers to embed interactive BeOpinion content such as polls and quizzes into AMP pages. The change includes the component's documentation (\amp-beopinion.md\), validation rules (\validator-amp-beopinion.protoascii\), and ownership configuration (\OWNERS\). Users can now integrate BeOpinion via the \amp-beopinion\ tag for general content or via \amp-ad\ with type \beopinion\ for advertising slots, supporting responsive layouts and standard placeholder/fallback behaviors.
(repo-wide) · high confidence
Introduce amp-bind 0.1 with expression macros and local state
The amp-bind extension (version 0.1) is now available, enabling dynamic attribute binding in AMP documents. This release introduces the \<amp-bind-macro\> element, allowing developers to define reusable expression macros that can be called from other bindings. It also adds support for local state management via \<amp-state\>, which can be initialized with inline JSON or fetched from a URL, and includes a 'refresh' action to reload state data. The core binding engine supports a wide range of JavaScript-like expressions, including arithmetic, logical operations, array methods, and Math functions, while enforcing strict validation rules for security and correctness.
extensions/amp-bind/0.1 · high confidence
Introduce amp-bodymovin-animation component with multiple renderer support
Adds the new amp-bodymovin-animation component, allowing users to embed AirBnB Bodymovin animations generated from Adobe After Effects. The component supports canvas, html, and svg renderers (with svg as the default), and includes actions for play, pause, stop, and seekTo, along with attributes for looping and controlling autoplay behavior.
extensions/amp-bodymovin-animation · high confidence
Introduce amp-bodymovin-animation component with playback controls
Adds the new \<amp-bodymovin-animation\> element, enabling users to embed and control Lottie (Bodymovin) animations. The component supports configuration via attributes for the animation source (src), loop behavior (loop), autoplay (noautoplay), and renderer selection (svg or canvas). It also exposes actions for play, pause, stop, and seekTo, allowing interactive control of the animation timeline.
extensions/amp-bodymovin-animation/0.1 · high confidence
Introduce amp-brid-player extension for Brid.tv video content
Adds the new amp-brid-player component, enabling AMP pages to embed video content from Brid.tv via an iframe. The extension supports multiple content types identified by attributes such as data-video, data-playlist, data-carousel, and data-outstream, and allows for custom configuration through child JSON. It integrates with the AMP video manager, handles consent policies, and manages player lifecycle events like ready state and pausing.
extensions/amp-brid-player/0.1 · high confidence
Introduce amp-byside-content extension for BySide dynamic content
Adds the new amp-byside-content component, allowing AMP pages to display dynamic content from the BySide service. This change includes the component's documentation, an OWNERS file for repository access control, and validator rules defining the required attributes (data-webcare-id, data-label) and supported layouts.
extensions/amp-byside-content · high confidence
Introduce amp-byside-content extension for displaying side content placeholders
Adds the new amp-byside-content extension, which renders placeholder content from BySide by embedding a sandboxed iframe. The component requires data-webcare-id and data-label attributes to construct the content URL and displays a loading animation while the iframe loads, along with an overflow indicator for scrollable content.
extensions/amp-byside-content/0.1 · high confidence
Introduce amp-cache-url extension for cache URL conversion
This change introduces the new amp-cache-url extension (version 0.1), which installs a service to convert URLs to cache URLs using the AMP Toolbox Cache URL library. The extension is defined as a SCRIPT tag with no required usage, and its validation rules and ownership have been established.
extensions/amp-cache-url · high confidence
Introduce amp-cache-url extension for generating cache URLs
The new amp-cache-url extension (version 0.1) provides a service that transforms standard URLs into their corresponding cached versions (e.g., converting a source URL to a CDN-hosted cache URL). This capability allows AMP components, such as amp-video within amp-story, to automatically load resources from the cache, improving performance and reliability for story content.
extensions/amp-cache-url/0.1 · high confidence
Introduce amp-call-tracking extension for dynamic phone number replacement
Adds the new amp-call-tracking extension, which dynamically replaces phone numbers in hyperlinks via a CORS endpoint to enable call tracking. The change includes the component's documentation (amp-call-tracking.md), validation rules (validator-amp-call-tracking.protoascii) defining the required 'config' attribute and supported layouts, and the OWNERS file for repository governance.
extensions/amp-call-tracking, extensions/amp-call-tracking/0.1 · high confidence
Introduce amp-carousel v2 with new styling and interaction model
Adds the new amp-carousel 0.2 extension, which is built on top of amp-base-carousel. This version introduces a distinct visual design with custom SVG navigation arrows, improved focus styles for accessibility, and specific CSS handling for responsive slides and RTL layouts. It also implements new interaction behaviors, including touch event propagation handling to prevent conflicts with the viewer, iOS-specific layout queuing to avoid flickering, and the ability to control the carousel via actions like goToSlide and toggleAutoplay.
extensions/amp-carousel/0.2 · high confidence
Introduce amp-connatix-player extension for Connatix video integration
Adds the new amp-connatix-player component, allowing users to embed cloud-hosted Connatix video players within AMP pages. The extension supports responsive layouts via standard width/height attributes, accepts a mandatory data-player-id and optional data-media-id, and passes through any data-param-\* attributes as URL parameters to the iframe. It also includes support for amp-video-docking via the dock attribute and defines the necessary validation rules and ownership configuration.
extensions/amp-connatix-player · high confidence
Introduce amp-dailymotion video component
Adds a new amp-dailymotion extension that allows embedding Dailymotion videos in AMP pages. The component requires a data-videoid attribute, supports standard video events (play, pause, end, load), handles fullscreen actions, and integrates with the AMP video manager for consistent behavior across video players.
extensions/amp-dailymotion/0.1 · high confidence
Introduce amp-date-countdown component with count-up support
Adds the new amp-date-countdown extension, allowing pages to display a countdown or count-up timer to a specified date. The component supports multiple input methods (end-date, timestamp-ms, timestamp-seconds, timeleft-ms), internationalization for 16 languages, and customizable output units via the biggest-unit attribute. It also introduces a count-up mode (data-count-up) to display elapsed time since a past date, and exposes a timeout event for actions when the timer reaches zero.
extensions/amp-date-countdown/0.1 · high confidence
Introduce amp-date-display component for localized date rendering
The new amp-date-display extension allows AMP pages to display time data by providing a set of time parameters (such as day, month, year, hour, minute, and internationalized names) to an amp-mustache template. It supports input via datetime strings, timestamps, or 'now', and offers localization through the locale attribute, UTC conversion via display-in, and custom formatting options for localeString using data-options-\* attributes.
extensions/amp-date-display/0.1 · high confidence
Introduce amp-delight-player extension for Delight VR video content
Adds the new amp-delight-player component, enabling integration with Delight VR video players via an iframe. The implementation handles video lifecycle events (play, pause, seek, fullscreen), manages viewport visibility to optimize performance, and supports analytics tracking through custom events. It also includes CSS for placeholder transitions and integrates with the AMP consent framework to pass consent metadata to the player.
extensions/amp-delight-player/0.1 · high confidence
Introduce amp-delight-player extension with video docking support
This change adds the new \amp-delight-player\ component, allowing users to embed cloud-hosted Delight Player videos in AMP pages. The component requires a \data-content-id\ attribute to load content and supports standard video actions like play, pause, mute, and unmute. A key feature is the \dock\ attribute, which enables video docking (requiring the \amp-video-docking\ extension) to minimize the player to a corner during scrolling. The entry includes the component's documentation, validation rules, and ownership configuration.
extensions/amp-delight-player · high confidence
Introduce amp-embedly-card component for responsive Embedly embeds
Adds the amp-embedly-card component, enabling responsive and shareable embeds for any URL via Embedly cards. The component supports optional paid API keys through a separate amp-embedly-key element to remove branding, allows configuration of themes, controls, and image/video sources via attributes, and automatically handles iframe sizing and preconnecting to the Embedly CDN.
extensions/amp-embedly-card/0.1 · high confidence
Introduce amp-embedly-card component with Bento support
Adds the new amp-embedly-card extension, allowing users to embed responsive, shareable Embedly cards from any URL into AMP pages. The component supports attributes for customizing the card's appearance (such as dark theme and alignment), controlling share icons, and specifying direct media URLs. It also introduces the amp-embedly-key component for authenticated usage to remove branding. The implementation includes full validator rules and is marked as Bento-supported (version 1.0), enabling standalone use in non-AMP environments.
extensions/amp-embedly-card · high confidence
Introduce amp-experiment 1.0 with new mutation parser and variant allocation
The amp-experiment extension now supports version 1.0, introducing a new configuration format and execution model. This version adds a dedicated mutation parser that validates and applies DOM changes (attributes, styles, URLs, and character data) using query selectors, while enforcing a maximum limit of 70 mutations per experiment to prevent performance issues. It also implements a new variant allocation system that supports sticky experiments, CID-based scoping, and consent notification checks, allowing for more robust A/B testing. Additionally, the extension now allows disabling all experiments via a URL parameter and prevents selecting internal AMP elements to ensure stability.
extensions/amp-experiment/1.0 · high confidence
Introduce amp-experiment for server-side A/B testing
Adds the new amp-experiment extension, allowing developers to define A/B test configurations in JSON and allocate users to variants based on their Client ID (CID) or random assignment. The extension supports sticky sessions, consent-based gating via notification IDs, and URL fragment overrides for testing. It works by parsing the experiment config, allocating a variant for each experiment, and adding the results as attributes to the document body, while acting as a render-delaying service to ensure variants are available before content is displayed.
extensions/amp-experiment/0.1 · high confidence
Introduce amp-facebook component for embedding posts and videos
Adds the amp-facebook component (version 0.1), enabling users to embed Facebook posts and videos via the data-href attribute. The component supports specifying the embed type (post or video) using the data-embed-as attribute, allows customizing the language via data-locale, and enables fullscreen playback for videos with data-allowfullscreen. It includes a preconnect to Facebook domains for performance, displays a branded loading indicator, and handles responsive sizing through iframe communication.
extensions/amp-facebook/0.1 · high confidence
Introduce amp-facebook-comments extension for embedding Facebook comment threads
Adds the new amp-facebook-comments component, allowing users to embed Facebook comment sections directly within AMP pages. The extension supports localization via the data-locale attribute, handles preconnecting to Facebook domains for performance, and manages the lifecycle of the embedded iframe, including loading states and cleanup.
extensions/amp-facebook-comments/0.1 · high confidence
Introduce amp-fit-text version 1.0 with Bento support and updated validation
This change adds the experimental version 1.0 of the amp-fit-text component, which is supported in Bento for standalone use outside valid AMP documents. The documentation (amp-fit-text.md) highlights that unlike version 0.1, version 1.0 does not account for margin and border size when calculating the fit-text coverage area. The validator specification (validator-amp-fit-text.protoascii) defines the new 1.0 version for AMP and AMP4ADS formats, while keeping 0.1 available for AMP, AMP4ADS, and AMP4EMAIL. An OWNERS file is also added, assigning the wg-components team as owners and notifying the wg-amp4email team for validator changes.
extensions/amp-fit-text · high confidence
Introduce amp-font extension for custom font loading
Adds the new amp-font extension (version 0.1), allowing authors to trigger and monitor the loading of custom fonts on AMP pages. The extension supports configuring font-family, font-weight, font-style, and font-variant, with a default timeout of 3 seconds. It provides event handlers (on-load-add-class, on-load-remove-class, on-error-add-class, on-error-remove-class) to manage CSS classes on the document root upon success or failure. The implementation uses the native Font Loading API where available, falling back to a polyfill that measures font dimensions for unsupported browsers, and includes workarounds for specific browser bugs.
extensions/amp-font/0.1 · high confidence
Introduce amp-fx-collection extension for scroll-based visual effects
The \amp-fx-collection\ extension is now available, providing a set of preset visual effects that can be applied to elements via the \amp-fx\ attribute. This includes \parallax\ for scroll-speed variation, \fade-in\ for visibility-triggered opacity changes, \fade-in-scroll\ for scroll-dependent fading, and \float-in\/\fly-in\ effects for sliding elements into view. The extension is documented with usage examples and configuration options such as \data-parallax-factor\, \data-duration\, \data-easing\, and \data-margin-start\.
extensions/amp-fx-collection · high confidence
Introduce amp-fx-flying-carpet extension for scroll-based parallax effects
Adds the new \amp-fx-flying-carpet\ extension, enabling a fixed-position container that creates a scroll effect where content appears to float or 'fly' as the user scrolls. The implementation includes a CSS file to handle fixed positioning, clipping, and GPU acceleration for WebKit browsers, and a JavaScript component that manages child element ownership, ensures proper layout scheduling for added children, and validates that the element is positioned outside the first and last viewports to function correctly.
extensions/amp-fx-flying-carpet/0.1 · high confidence
Introduce amp-gist component for embedding GitHub Gists
Adds the amp-gist extension (version 0.1), enabling users to embed GitHub Gists in AMP pages using the \<amp-gist\> tag. The component supports the fixed-height layout, automatically preconnects to gist.github.com, and handles dynamic resizing via iframe communication. It also sets an accessible title on the embedded iframe.
extensions/amp-gist/0.1 · high confidence
Introduce amp-gwd-animation extension for GWD creative support
Adds the new amp-gwd-animation extension (version 0.1), enabling AMP pages to embed and control Google Web Designer (GWD) animations. This component provides a runtime service and custom element that handle GWD-specific timeline events, supports playback actions such as play, pause, togglePlay, and gotoAndPlay, and includes logic to manage page deck transitions and friendly iframe embedding contexts.
extensions/amp-gwd-animation/0.1 · high confidence
Introduce amp-hulu video player extension
Adds the amp-hulu extension, enabling users to embed Hulu video content via an iframe. The component requires a data-eid attribute to construct the player URL and supports size-defined layouts, handling preconnects and lifecycle management for the embedded media.
extensions/amp-hulu/0.1 · high confidence
Introduce amp-iframe component for embedding external iframes
The new amp-iframe component allows embedding external iframes in AMP documents with enhanced security and performance controls. It enforces HTTPS-only sources, applies sandboxing by default, and restricts placement to the lower 75% of the viewport (or 600px from the top) unless a placeholder is used. The component supports runtime resizing via the 'resizable' attribute and 'embed-size' messages, two-way messaging with actions, and passes consent data to the iframe. It also integrates with the AMP pause mechanism to handle visibility and resource management.
extensions/amp-iframe/0.1 · high confidence
Introduce amp-iframely component for Iframely media embeds
Adds the new amp-iframely component, enabling users to embed rich media and summary cards from Iframely (cdn.iframe.ly) within AMP pages. The component supports configuration via data attributes such as data-id, data-url, and data-key, allows customization of the CDN domain, and handles dynamic resizing and styling of embedded content through postMessage communication with the Iframely iframe.
extensions/amp-iframely/0.1 · high confidence
Introduce amp-iframely component for rich media embeds
AMP now supports the new amp-iframely extension, which embeds rich media content from Iframely.com-powered publishers or generates summary cards for arbitrary URLs. This component requires the amp-iframely script and accepts either a data-id for specific content or a data-url paired with a data-key (an MD5-hashed API key) for general URL previews. It supports responsive and fixed-height layouts, including a resizable mode to automatically adjust to content height.
extensions/amp-iframely · high confidence
Introduce amp-image-lightbox extension for full-bleed image viewing with zoom and pan
Adds the new amp-image-lightbox extension, allowing users to display images in a full-screen overlay with support for zooming, panning, and gesture-based interactions. The component includes styling for the lightbox container, viewer, and caption, along with JavaScript logic for handling image loading, transitions, and accessibility attributes like ARIA labels.
extensions/amp-image-lightbox/0.1 · high confidence
Introduce amp-image-slider component for side-by-side image comparison
The new amp-image-slider component allows users to compare two images side-by-side using a draggable vertical divider. It supports optional labels for each image, customizable hint arrows, and keyboard navigation. The component includes specific fixes for iOS rendering glitches and Edge browser history navigation issues, ensuring a consistent experience across mobile and desktop platforms.
extensions/amp-image-slider/0.1 · high confidence
Introduce amp-imgur extension for embedding Imgur posts
Adds the new amp-imgur component, allowing users to embed Imgur posts and albums within AMP pages. The change includes the extension's documentation (amp-imgur.md), which specifies the required data-imgur-id, width, and height attributes, as well as the validator rules (validator-amp-imgur.protoascii) defining the supported layouts and mandatory attributes. An OWNERS file is also added to establish maintainers for the new extension.
extensions/amp-imgur · high confidence
Introduce amp-inline-gallery component with captions, pagination, and thumbnails
Adds the amp-inline-gallery component (version 0.1) and its sub-components (amp-inline-gallery-captions, amp-inline-gallery-pagination, amp-inline-gallery-slide, and amp-inline-gallery-thumbnails) to enable rich, inline image galleries. The gallery wraps an amp-base-carousel to display slides and supports optional pagination indicators (dots for up to eight slides, numbers for more) and a vertical thumbnail strip. Captions are displayed per slide with fade effects based on slide position, and clicking a caption's "See more" button opens the slide in an amp-lightbox-gallery.
extensions/amp-inline-gallery/0.1 · high confidence
Introduce amp-inputmask for structured input formatting
The new amp-inputmask extension (version 0.1) allows developers to apply input masks to form fields using the \mask\ attribute. It supports predefined formats for payment cards and four date variations, as well as custom character-based masks. The extension handles literal prefixes during copy-paste operations, prevents invalid characters (such as letters in credit card fields), and can optionally output the unmasked value via a hidden input when \mask-output="alphanumeric"\ is set.
extensions/amp-inputmask/0.1 · high confidence
Introduce amp-install-serviceworker extension for Service Worker installation
Adds the new \<amp-install-serviceworker\> component, enabling publishers to install Service Workers for Progressive Web App capabilities. The extension handles cross-origin installation via an iframe, provides a URL-rewrite fallback for browsers that do not support Service Workers, and includes specific logic to prevent installation in Safari due to caching issues.
extensions/amp-install-serviceworker/0.1 · high confidence
Introduce amp-izlesene extension for embedding Izlesene videos
Adds the new amp-izlesene component, allowing users to embed videos from the Izlesene platform within AMP pages. The change includes the component's documentation (amp-izlesene.md) detailing required attributes like data-videoid and optional controls for related content and replays, the validator rules (validator-amp-izlesene.protoascii) defining supported layouts and attribute constraints, and the OWNERS file establishing maintenance responsibilities.
extensions/amp-gfycat/0.1, extensions/amp-izlesene, extensions/amp-mowplayer/0.1 · high confidence
Introduce amp-link-rewriter extension for configurable URL rewriting
Publishers can now use the new amp-link-rewriter component to rewrite anchor URLs based on configurable patterns. The extension allows defining output URL templates with placeholders for anchor attributes (href, id, rel, etc.), custom variables, and AMP macros (AMP\_GEO, DOCUMENT\_REFERRER, SOURCE\_URL). It supports filtering by CSS selector sections and matching anchor attributes via regular expressions, enabling targeted link transformation for analytics or partner integrations.
extensions/amp-link-rewriter · high confidence
Introduce amp-link-rewriter extension for dynamic URL rewriting
Adds the new amp-link-rewriter extension (version 0.1), which allows developers to dynamically rewrite anchor hrefs based on configuration. The extension supports defining a target output URL with variable substitution (including source URL, document referrer, and AMP geo data), filtering links by specific DOM sections or attribute patterns, and restricting rewrites to external links only. It integrates with the AMP navigation service to intercept anchor clicks and apply the configured transformations.
extensions/amp-link-rewriter/0.1 · high confidence
Introduce amp-list v1.0 with Bento-based infinite scrolling and custom templates
A new version (1.0) of the amp-list component is available, built on the Bento architecture using Preact. This version introduces automatic infinite scrolling (loadMore='auto') that fetches data as the user scrolls, configurable via a viewport buffer. It supports custom templates for loading, error, and 'load more' states, and allows fetching data from any JSON endpoint with a configurable key to extract the list items. The component is currently behind the 'bento-list' experiment flag.
extensions/amp-list/1.0 · high confidence
Introduce amp-live-list component for real-time content updates
Adds the new amp-live-list extension, enabling web pages to function as live blogs or news feeds by automatically polling for and displaying new content. The component includes a CSS stylesheet for styling update indicators and new items, a JavaScript implementation that manages DOM updates (insert, replace, tombstone), and a background polling service with exponential backoff to efficiently fetch updates from the server.
extensions/amp-live-list/0.1 · high confidence
Introduce amp-mathml component for rendering MathML formulas
Adds the new amp-mathml extension (version 0.1), enabling pages to display MathML formulas via an iframe. The component supports both block and inline layouts through the optional 'inline' attribute, accepts formulas via the 'data-formula' attribute, and includes an 'title' attribute for accessibility on the underlying iframe.
extensions/amp-mathml/0.1 · high confidence
Introduce amp-mega-menu component for expandable navigation
Adds the new experimental amp-mega-menu component, allowing developers to display large collections of navigational content in expandable containers at the top of an AMP page. This change includes the component implementation, validation rules (protoascii) defining allowed structure and descendants (such as amp-img, amp-carousel, and amp-list for dynamic content), and documentation with usage examples for toggleable dropdowns and responsive design integration with amp-sidebar.
extensions/amp-mega-menu · high confidence
Introduce amp-mega-menu component for large navigation collections
Adds the new amp-mega-menu component, enabling developers to display large collections of links on desktop and tablet devices. The component supports nested amp-list for dynamic content rendering, includes built-in accessibility features such as ARIA attributes and keyboard navigation, and provides a visual mask overlay when menus are open to focus user attention on the navigation.
extensions/amp-mega-menu/0.1 · high confidence
Introduce amp-megaphone extension for embedding Megaphone.fm podcasts
Adds the new amp-megaphone component, allowing users to embed Megaphone.fm podcast episodes or playlists directly into AMP pages. The extension supports both light and dark themes, configurable start times for episodes, and options to limit displayed episodes in playlists or switch to a vertical tile layout. It also includes built-in social sharing capabilities and is validated via the standard AMP validator rules.
extensions/amp-megaphone · high confidence
Introduce amp-minute-media-player extension
Adds support for the Minute Media video player via the new \amp-minute-media-player\ component. Users can now embed Minute Media content using attributes like \data-content-type\ (curated, semantic, or specific) and \data-content-id\, with optional semantic matching via \data-scanned-element\ and \data-tags\. The extension supports responsive and fixed layouts, includes an \autoplay\ attribute that handles muting and scroll-based pause/resume behavior, and offers a \dock\ feature (requiring \amp-video-docking\) to pin the video to a corner during scrolling.
(repo-wide) · high confidence
Introduce amp-mraid extension for mobile app ad webviews
Adds the amp-mraid extension (version 0.1), which connects AMP Host Services to MRAID to allow invoking native mobile APIs (visibility, fullscreen, exit) from mobile app ad webviews. The extension loads mraid.js via a specific URL pattern that mobile SDKs intercept, registers visibility, fullscreen, and exit services through the HostServices API, and includes a fallback mechanism to standard web APIs if the mobile environment is not detected, which can be disabled using the no-fallback attribute.
extensions/amp-mraid/0.1 · high confidence
Introduce amp-nested-menu component for accessible nested navigation
Adds the new amp-nested-menu component, enabling nested menu structures with slide-in animations and full keyboard navigation support (including Home/End keys and arrow keys). The implementation includes ARIA attributes like aria-expanded for screen reader accessibility and respects document directionality (RTL/LTR) for correct side positioning.
extensions/amp-nested-menu/0.1 · high confidence
Introduce amp-next-page v1.0 with Adsense support and remote config loading
The amp-next-page extension is now available in version 1.0, adding support for the type="adsense" mode which requires data-client and data-slot attributes, and enabling configuration loading from remote URLs via the src attribute. The validator rules and documentation have been updated to reflect these new capabilities, including support for custom separators and recommendation boxes, while maintaining backward compatibility with the 0.1 version.
extensions/amp-next-page · high confidence
Introduce amp-o2-player extension for O2 video content
Adds a new \amp-o2-player\ component that embeds O2 (Vidible) video players via an iframe. The extension requires \data-pid\ and \data-bcid\ attributes to construct the player source URL and supports optional parameters like \data-bid\, \data-vid\, and \data-macros\. It integrates with the AMP consent management system by listening for consent data requests from the iframe and forwarding the appropriate GDPR consent state and strings. The player also utilizes the \PauseHelper\ to manage video playback states and supports preconnecting to the delivery domain.
extensions/amp-o2-player/0.1 · high confidence
Introduce amp-onetap-google component for Google One Tap integration
Adds the new amp-onetap-google component, which embeds Google One Tap to streamline user sign-in. The component creates a fixed-position iframe that communicates via postMessage to handle UI modes (card or bottom sheet), resizing, and close/done events. Upon successful sign-in, it automatically triggers refreshes for amp-access and amp-subscriptions to update user entitlements.
extensions/amp-onetap-google/0.1 · high confidence
Introduce amp-orientation-observer component with orientation range filtering and smoothing
The new amp-orientation-observer component monitors device orientation (alpha, beta, gamma axes) and dispatches low-trust events to trigger actions in other AMP components, such as synchronizing animations with scroll position. This release adds support for filtering events using optional alpha-range, beta-range, and gamma-range attributes to limit triggers to specific degree intervals, and includes a smoothing attribute that outputs a moving average of sensor values to reduce jitter.
extensions/amp-orientation-observer · high confidence
Introduce amp-orientation-observer extension with configurable smoothing
Adds the new amp-orientation-observer component, which listens to device orientation events (alpha, beta, gamma) and triggers actions when values change. The extension supports configurable axis ranges via attributes and includes a smoothing feature (defaulting to 4 points) to reduce jitter in orientation data, making it suitable for stable interaction triggers based on device tilt.
extensions/amp-orientation-observer/0.1 · high confidence
Introduce amp-pan-zoom extension for interactive image panning and zooming
Adds the new amp-pan-zoom extension, enabling users to pan and zoom within an AMP document. The component supports touch gestures (pinch, swipe), mouse events for desktop panning, and configurable attributes such as max-scale, initial-scale, and disable-double-tap. It includes built-in zoom buttons and handles layout adjustments on resize.
extensions/amp-pan-zoom/0.1 · high confidence
Introduce amp-pinterest extension for Pinterest widgets
Adds the new amp-pinterest extension (version 0.1), enabling the display of Pinterest content on AMP pages. This includes support for Save buttons (with customizable colors, shapes, and pin counts), user Follow buttons, and embedded Pin widgets. The implementation handles button styling, popup interactions, accessibility attributes, and responsive layout adjustments.
extensions/amp-pinterest/0.1 · high confidence
Introduce amp-playbuzz extension for embedding Playbuzz interactive content
Adds the new amp-playbuzz component, allowing publishers to embed Playbuzz interactive items (polls, quizzes, etc.) in AMP pages. The extension supports embedding via a full URL (src) or a specific item ID (data-item), and exposes configuration attributes to toggle item information, share buttons, and comments. It handles responsive layout, lazy loading via intersection observation, and includes an overflow mechanism to expand the content when it exceeds the container height.
extensions/amp-playbuzz/0.1 · high confidence
Introduce amp-reach-player extension for Beachfront Reach video playback
Adds the new amp-reach-player component, allowing users to embed Beachfront Reach video players within AMP pages. The extension is defined by a validator specification (protoascii) that mandates the data-embed-id attribute and supports standard AMP layouts (fill, fixed, fixed-height, flex-item, responsive). Documentation (markdown) and ownership rules (JSON5) are included to guide integration and maintenance.
extensions/amp-reach-player · high confidence
Introduce amp-reach-player extension for Beachfront video content
Adds the new amp-reach-player extension (version 0.1), enabling the embedding of Beachfront video players via an iframe. The component supports size-defined layouts, automatically preconnects to the Beachfront CDN, and integrates with AMP's media infrastructure by exposing pause functionality through the standard pauseCallback and marking the element as a media component.
extensions/amp-reach-player/0.1 · high confidence
Introduce amp-recaptcha-input component for async reCAPTCHA tokens
Adds the new amp-recaptcha-input component, allowing pages to programmatically execute reCAPTCHA actions and retrieve tokens via a getValue() method. The component requires data-sitekey and data-action attributes, supports a global mode, and communicates with a dedicated 3p bootstrap iframe through the amp-recaptcha-service to handle registration, execution, and token retrieval.
extensions/amp-recaptcha-input/0.1 · high confidence
Introduce amp-reddit component for embedding Reddit content
Adds the new amp-reddit extension (version 0.1), enabling users to embed Reddit posts and comments via the \<amp-reddit\> tag. The component requires data-src and data-embedtype attributes to function, automatically handles preconnect and preload resources for Reddit domains, and supports fullscreening for embedded videos. It also listens for resize events from the third-party iframe to dynamically adjust the component's height.
extensions/amp-powr-player, extensions/amp-reddit/0.1 · high confidence
Introduce amp-render component for dynamic content rendering
Adds the new amp-render component, which fetches JSON data from a specified source and renders it into the page using a template. The component supports binding to amp-state and amp-script sources, allows manual refreshing via the 'refresh' action, and handles layout modes including container layout with placeholders. It also includes accessibility features like aria-live regions and supports resizing to content.
extensions/amp-render/1.0 · high confidence
Introduce amp-script extension for sandboxed client-side JavaScript
Adds the amp-script extension (version 0.1), enabling authors to run custom JavaScript in a Web Worker via Worker-DOM. This feature supports both standard and sandboxed modes (the latter providing a stronger security boundary via a cross-origin iframe and disabling DOM access). It includes a UserActivationTracker to enforce gesture-based activation for mutations, implements size limits for author scripts (150KB for non-sandboxed, 300KB for sandboxed), and provides a CSS class (.i-amphtml-hydrated) to manage opacity transitions during the hydration phase.
extensions/amp-script/0.1 · high confidence
Introduce amp-selector component with keyboard navigation and selection actions
The new amp-selector component allows users to present a list of options (including images and other AMP components) for single or multiple selection. It supports keyboard navigation via the keyboard-select-mode attribute (none, focus, or select modes) and provides programmatic control through actions like clear, selectUp, selectDown, and toggle. The component handles form submission of selected values, respects disabled states, and exposes select events with selectedOptions data.
extensions/amp-selector/0.1 · high confidence
Introduce amp-sidebar v0.1 with swipe-to-dismiss, autoscroll, and toolbar support
The \amp-sidebar\ extension is now available in version 0.1, providing a new slide-out navigation component. This release introduces swipe-to-dismiss gestures for closing the sidebar, an autoscroll feature that automatically scrolls to elements marked with the \autoscroll\ attribute, and a toolbar system that allows navigation items to be duplicated and displayed in other parts of the page based on media queries. The component includes built-in slide-in/slide-out animations, a fade-in mask overlay, and specific handling for iOS Safari bottom navigation bars.
extensions/amp-sidebar/0.1 · high confidence
Introduce amp-skimlinks extension for affiliate link monetization
Adds the new amp-skimlinks extension, allowing AMP pages to automatically convert merchant links into monetizable affiliate links via the Skimlinks network. The change includes the extension's documentation, validation rules, and ownership configuration. Users can now include the amp-skimlinks script and element to enable affiliate marketing, configuring it with a required publisher code and optional attributes such as excluded domains, a CSS link selector, a custom tracking ID, and a custom redirect domain.
extensions/amp-skimlinks · high confidence
Introduce amp-skimlinks link-rewriter extension for click-time URL rewriting
The new amp-skimlinks extension (version 0.1) adds a link-rewriting capability that intercepts anchor clicks to replace URLs with affiliate or monetized versions before navigation. The implementation includes a LinkRewriterManager that coordinates multiple rewriters based on priority (configurable via a meta tag), a LinkRewriter class that scans the DOM and caches replacement URLs, and a TwoStepsResponse structure to support both synchronous and asynchronous resolution of link targets. This allows publishers to monetize links without changing the initial page load behavior, with the rewritten URL being restored to the original after 300ms if the link remains open (e.g., in a new tab).
extensions/amp-skimlinks/0.1/link-rewriter · high confidence
Introduce amp-slikeplayer component for embedding Slike video content
Adds the new amp-slikeplayer extension, allowing developers to embed cloud-hosted Slike Player videos in AMP pages. The component requires data-apikey and data-videoid attributes, supports optional configuration via data-config (including autoplay and viewport visibility thresholds), and integrates with the AMP video manager to handle playback events, fullscreen, and GDPR consent.
extensions/amp-slikeplayer · high confidence
Introduce amp-smartlinks extension for dynamic commerce link monetization
Adds the new amp-smartlinks extension, enabling AMP pages to integrate Narrativ's Linkmate service for transforming static commerce links into dynamic, multimerchant nodes. The change includes the extension's documentation (amp-smartlinks.md), validator rules (validator-amp-smartlinks.protoascii) defining the amp-smartlinks script and amp-smartlinks element with attributes like nrtv-account-name, linkmate, and exclusive-links, and an OWNERS file for the extension directory.
extensions/amp-smartlinks · high confidence
Introduce amp-social-share component with native system sharing support
The new amp-social-share component allows authors to add social sharing buttons to their pages. It includes pre-configured providers for Twitter, Facebook, Pinterest, LinkedIn, Tumblr, Email, WhatsApp, LINE, and SMS, with specific fixes for iOS Safari (mailto/sms protocols) and the addition of a 'system' type that leverages the native Web Share API when available. The component also supports custom providers via data attributes and includes accessibility improvements such as aria-labels and keyboard navigation.
extensions/amp-social-share/0.1 · high confidence
Introduce amp-soundcloud extension for embedding SoundCloud media
Adds the new amp-soundcloud component, allowing users to embed SoundCloud tracks and playlists directly in AMP pages. The extension supports both individual tracks (via data-trackid) and playlists (via data-playlistid), with optional configuration for private content using data-secret-token, visual mode display, and custom color themes. It handles media lifecycle management including preconnection, layout support, and proper pausing of audio playback when the component is removed or inactive.
extensions/amp-soundcloud/0.1 · high confidence
Introduce amp-sticky-ad version 1.0 with new styling and behavior
This change introduces version 1.0 of the amp-sticky-ad extension, replacing previous implementations with a new CSS structure and JavaScript logic. The new version enforces a single sticky ad per page, adds a dedicated top padding bar, and improves the close button's tap target and RTL support. It also includes an experiment to convert amp-sticky-ad to amp-ad for fair comparison, ensuring the ad loads only after the first viewport scroll and handles collapse states more accurately.
extensions/amp-sticky-ad/1.0 · high confidence
Introduce amp-story-360 for immersive 360° media in Web Stories
Authors can now embed 360° images and videos in Web Stories using the new \amp-story-360\ component (version 0.1). The component supports equirectangular media, allowing users to explore content via device gyroscope or through defined point-of-view animations. It includes an 'Activate 360' button for gyroscope permission requests, a feature discovery animation, and fallback behavior for devices without sensor support.
extensions/amp-story-360/0.1 · high confidence
Introduce amp-story-audio-sticker for interactive unmute actions
Publishers can now add an \<amp-story-audio-sticker\> component to their stories, allowing users to click a sticker to unmute the story. The extension supports four default visual themes (audio-cloud, headphone-cat, loud-speaker, tape-player) with distinct pre-tap and post-tap states, as well as custom sticker images. It offers two size options (small and large) and two visual styles (outline and dropshadow) with customizable colors via CSS variables. The sticker must be placed inside an \<amp-story-grid-layer\> and includes a tap hint that disappears once the story is unmuted.
extensions/amp-story-audio-sticker · high confidence
Introduce amp-story-captions component with style presets
The new amp-story-captions component (version 0.1) enables custom video caption rendering within AMP Stories, connecting to an amp-video element via a shared captions-id. It supports a style-preset attribute with 'default' and 'appear' options to apply pre-made styling, and allows for container layout to dynamically size based on caption text height.
extensions/amp-story-captions · high confidence
Introduce amp-story-panning-media extension for animated image panning
Adds the new amp-story-panning-media extension, enabling animated panning and zooming effects on images within AMP stories. The component supports configurable positioning via data attributes (x, y, zoom), respects user accessibility preferences by disabling animations when prefers-reduced-motion is active, and includes a lock-bounds attribute to constrain panning within the viewport. It utilizes CSS flexbox for centering and translate3d for performant transitions, ensuring images remain visible and properly scaled during navigation.
extensions/amp-story-panning-media/0.1 · high confidence
Introduce amp-story-player component for embedding stories
Adds the new amp-story-player extension (version 0.1), enabling users to embed and play AMP stories directly within their webpages. The component supports size-defined layouts (fixed, fixed-height, responsive, fill) and allows embedding multiple stories by linking to their URLs via anchor tags inside the player element.
extensions/amp-story-player/0.1 · high confidence
Introduce amp-story-shopping for in-story product discovery
This release adds the \amp-story-shopping\ extension (version 0.1), enabling creators to embed a configurable shopping experience directly within AMP stories. The extension introduces two new components: \amp-story-shopping-tag\, which marks specific elements on a story page as shoppable, and \amp-story-shopping-attachment\, which serves as the container for the shopping interface. When a user taps a tag or the "Shop now" call-to-action, the attachment opens to display a Product Listing Page (PLP) showing all products on the current page, or a Product Details Page (PDP) with in-depth information, images, and pricing for the selected item. Product data is configured via inline or remote JSON, supporting features like currency formatting, custom icons, and aggregate ratings.
extensions/amp-story-shopping · high confidence
Introduce amp-story-subscriptions for Web Story paywalls
Publishers can now add a paywall to AMP Web Stories using the new amp-story-subscriptions extension (version 0.1). This component integrates with existing amp-subscriptions infrastructure to display a bottom-sheet dialog when a user reaches a specified page (configurable via subscriptions-page-index, defaulting to page 2). The dialog supports templated messaging (price, headline, description) and allows users to sign in, subscribe via the publisher, or subscribe via Subscribe with Google. The extension includes specific CSS for the story context, JavaScript logic to manage grant status and dialog visibility, and validation rules to ensure proper usage within the story structure.
extensions/amp-story-subscriptions · high confidence
Introduce amp-stream-gallery component for product/article carousels
Adds the new \amp-stream-gallery\ extension (version 0.1), providing a gallery component optimized for displaying related products or articles. This component builds on \amp-base-carousel\ but offers distinct behaviors: it supports sizing via \min-item-width\ and \max-item-width\ attributes, allows for outset or inset navigation arrows, does not snap by default, and excludes autoplay. The implementation includes the JavaScript logic in \amp-stream-gallery.js\ and the associated CSS styles in \amp-stream-gallery.css\, \arrows.css\, \inset-arrows.css\, and \outset-arrows.css\ to handle layout, arrow visibility, and responsive sizing.
extensions/amp-stream-gallery/0.1 · high confidence
Introduce amp-subscriptions extension for paywall and entitlement management
The new amp-subscriptions extension enables publishers to implement subscription-based paywalls and entitlement checks. It provides a configurable service adapter that supports both remote authorization endpoints and iframe-based platforms, handling the full lifecycle from authentication to content unlocking. The extension includes a built-in dialog renderer for displaying paywall UI, AES-GCM encryption for securing document keys, and a metering system to track article views. It also features a comprehensive analytics module to track user actions like login, subscribe, and logout, along with pingback capabilities to report entitlement status back to the platform.
extensions/amp-subscriptions/0.1 · high confidence
Introduce amp-tiktok component for embedding TikTok videos
Adds a new \amp-tiktok\ component that allows users to embed TikTok videos in AMP pages. The implementation includes a JavaScript class (\AmpTiktok\) that handles video ID extraction from \src\ attributes or blockquotes, manages iframe creation with specific sizing and positioning logic to prevent layout shifts, and supports placeholder and loader visuals. A corresponding CSS file defines styles for centered video containers, unresolved states, and placeholder images to ensure a smooth user experience during loading.
extensions/amp-tiktok, extensions/amp-tiktok/0.1, extensions/amp-vimeo/0.1 · high confidence
Introduce amp-timeago component for fuzzy timestamp display
The new amp-timeago component allows pages to display dates as relative time strings (e.g., '3 hours ago') instead of static timestamps. It automatically updates the displayed text while the element is visible in the viewport and supports localization via the \locale\ attribute. A \cutoff\ attribute is available to stop updates after a specified number of seconds, reverting to the original placeholder text.
extensions/amp-timeago/0.1 · high confidence
Introduce amp-truncate-text component for dynamic text truncation
Adds the new amp-truncate-text component, which dynamically truncates overflowing text content and provides an expand/collapse mechanism. The component supports custom actions for expanding and collapsing text, utilizes shadow DOM when the experiment is enabled (hiding the sizer element in expanded mode), and manages collapsed, expanded, and persistent content slots to allow developers to define custom overflow indicators.
extensions/amp-truncate-text/0.1 · high confidence
Introduce amp-truncate-text component for text truncation with overflow controls
Adds the new experimental \amp-truncate-text\ component, which truncates text with an ellipsis and optionally displays an overflow element. The component supports slots for collapsed, expanded, and persistent states, allowing users to implement custom actions like navigation or inline expansion/collapse via tap actions. This entry covers the documentation and validator rules defining the component's structure, supported layouts, and attributes.
extensions/amp-truncate-text · high confidence
Introduce amp-twitter v1.0 with Bento web component support
The amp-twitter extension now includes version 1.0, introducing a new Bento-based web component (\\<bento-twitter\>\) alongside the legacy \\<amp-twitter\>\ element. This update provides developers with a modern, framework-agnostic way to embed Tweets, Moments, and timelines using standard web component APIs, while maintaining backward compatibility with the existing AMP component. The new version includes dedicated CSS for pre-upgrade styling to prevent layout shifts and supports dynamic attribute updates for interactive tweet loading.
extensions/amp-twitter/1.0 · high confidence
Introduce amp-user-notification element with geo-targeting and dismissal persistence
Adds the new amp-user-notification component, allowing authors to display fixed-position notifications that can be conditionally shown based on geographic groups (data-show-if-geo, data-show-if-not-geo) or external HTTP checks (data-show-if-href). The element supports persisting dismissal state via local storage (controlled by data-persist-dismissal) and includes built-in accessibility by defaulting to an alert role.
extensions/amp-user-notification/0.1 · high confidence
Introduce amp-video extension with video caching and flexible bitrate support
The \amp-video\ component is now available as a dedicated extension (version 0.1), replacing the previous inline implementation. This update introduces a remote video caching system that fetches and serves optimized video sources from the AMP cache, including automatic caption track injection. It also adds flexible bitrate management, which dynamically adjusts video quality based on the user's effective network connection type (e.g., 2G, 4G, 5G) to improve playback performance on slower networks.
extensions/amp-video/0.1 · high confidence
Introduce amp-video-docking extension for scroll-based video minimization
This change introduces the new \amp-video-docking\ extension, enabling videos to minimize (dock) to a corner or a custom position when the user scrolls out of view. The extension is defined by a new validator specification (\validator-amp-video-docking.protoascii\) and comprehensive documentation (\amp-video-docking.md\) that outlines usage, supported players (such as amp-brid-player, amp-dailymotion, and amp-jwplayer), and interaction behaviors like dragging and flick-to-dismiss. An \OWNERS\ file is also added to establish governance for the new component.
extensions/amp-video-docking · high confidence
Introduce amp-video-docking extension for scroll-triggered video minimization
The new amp-video-docking extension allows inline videos to minimize into a draggable, scroll-triggered floating player anchored to a viewport corner. This feature includes a docked control layer with playback, mute, fullscreen, and scroll-back buttons, adapts its layout via small and large breakpoints, and displays a placeholder icon in the video's original position while docked.
extensions/amp-video-docking/0.1 · high confidence
Introduce amp-video-iframe extension with pre-upgrade styling and event handling
The amp-video-iframe extension is now available, providing a new video player component that bridges to the Bento video infrastructure. The implementation includes specific CSS rules to handle pre-upgrade states, ensuring the element displays as a block with hidden children until built, and registers a JavaScript class that manages layout support via experiments and handles postMessage events for intersection ratios and standard video events like error and canplay.
extensions/amp-video-iframe/1.0 · high confidence
Introduce amp-viewer-integration extension for AMP-viewer communication
This change adds the new amp-viewer-integration extension, which establishes the communication protocol between AMP documents and their host viewers. It introduces handlers for forwarding focus, keyboard, and touch events to the viewer, implements text highlighting logic (including support for Chrome text fragments), and manages the handshake and messaging channels required for viewer integration.
extensions/amp-viewer-integration/0.1 · high confidence
Introduce amp-viqeo-player extension for Viqeo video embedding
Adds the new amp-viqeo-player component, allowing publishers to embed Viqeo videos in AMP pages. The extension includes the component implementation, documentation detailing attributes like data-profileid and data-videoid, and validator rules enforcing mandatory parameters and supported layouts.
extensions/amp-viqeo-player · high confidence
Introduce amp-wordpress-embed extension with Bento support
The amp-wordpress-embed extension is now available, allowing users to embed excerpts from WordPress posts or pages via an iframe. This update includes the core component definition, validation rules, and documentation, and explicitly supports Bento for standalone usage in non-AMP environments.
extensions/amp-wordpress-embed · high confidence
Introduce babel plugin to indirect log messages for binary size reduction
A new Babel plugin (\babel-plugin-transform-log-methods\) has been added to the build system. This plugin transforms development logging calls (such as \dev().assert\) by replacing human-readable message strings with short, base62-encoded IDs. It generates a JSON lookup table mapping these IDs back to the original messages. This change is designed to reduce the final binary size by approximately 2.8% in minified, compressed builds by removing verbose string literals from the compiled code.
build-system/babel-plugins/babel-plugin-transform-log-methods · high confidence
Introduce build task to inject AMP\_CONFIG into runtime targets
Adds a new build-system task that prepends the AMP configuration object to specified AMP runtime files (such as amp.js and v0.js). The task supports injecting both production and canary configurations, allows for local development overrides, enables a test mode, and provides an option to derandomize experiments for reproducible builds.
build-system/tasks/prepend-global · high confidence
Introduce built-in components: amp-img, amp-layout, and amp-pixel
AMP now includes three new built-in components that are always available in documents without explicit registration. The \amp-img\ component serves as a replacement for the HTML \img\ tag, handling image loading, preconnection, and attribute propagation. The \amp-layout\ component provides a multi-purpose container that applies AMP's layout system (such as responsive or intrinsic layouts) to any arbitrary HTML element. The \amp-pixel\ component acts as a simple tracking pixel for counting page views, supporting URL substitutions and optional \no-referrer\ policies. Documentation and Storybook stories for these components have also been added.
src/builtins · high confidence
Introduce configurable bundle-size approval gates for AMP runtime and extensions
The build system now enforces bundle-size limits on AMP runtime and extension files using a new \APPROVERS.json\ configuration. This file defines specific glob patterns for tracked files (such as \dist/v0.?(m)js\ and \dist.3p/current-min/vendor/\*.?(m)js\) and assigns approval teams (e.g., \wg-performance\, \wg-components\) along with size thresholds (e.g., 0.1 KB). If a pull request exceeds these limits, approval from the designated team is required to proceed, with \wg-performance\ serving as the default approver for unmatched files. The system also tracks these sizes using brotli compression via the \filesize\ library.
build-system/tasks/bundle-size · high confidence
Introduce configurable click filters for amp-ad-exit
The amp-ad-exit extension now supports configurable filters to control when an ad exit is allowed. This change introduces three new filter types: ClickDelay, which delays the exit action until a specified time interval has passed (optionally starting from a performance timing event); ClickLocation, which restricts exits to clicks within a defined rectangular area (relative to the iframe or a specific element); and InactiveElement, which ignores clicks on elements matching a specified CSS selector. These filters allow publishers to fine-tune the user experience by preventing accidental exits or ensuring interactions occur in specific areas.
extensions/amp-ad-exit/0.1/filters · high confidence
Introduce dedicated web worker for amp-bind expression evaluation
Adds a new web worker architecture to offload amp-bind expression evaluation from the main thread. This change introduces \src/web-worker/amp-worker.js\ to manage the worker lifecycle, including fetching the worker script via RTV URLs, handling Trusted Types policies, and bypassing XHR interceptors for local development. The worker entry point (\src/web-worker/web-worker.js\) initializes a \BindEvaluator\ for each scope and handles method calls like \bind.init\, \addBindings\, and \evaluateBindings\. Polyfills for older browsers (e.g., IE11) are included in \web-worker-polyfills.js\ and applied conditionally for non-ESM builds. Error reporting is integrated into the worker to send unhandled rejections and errors to the AMP error reporting service, with local dev errors suppressed.
src/web-worker · high confidence
Introduce default placeholder icons for unsupported lightbox content types
The lightbox gallery now displays specific default placeholder icons for content types that cannot be rendered as thumbnails, including ads, iframes, videos, and text. This change adds new service files to define and export these SVG-based placeholders, ensuring a consistent visual experience when the gallery encounters elements like \<amp-ad\> or \<amp-iframe\> that do not provide native thumbnail data.
extensions/amp-lightbox-gallery/0.1/service · high confidence
Introduce experimental AMP Sidebar v1.0 with Preact-based rendering and toolbar support
This change introduces a new experimental version of the AMP sidebar component (v1.0) located in \extensions/amp-sidebar/1.0\. The implementation shifts the rendering engine to Preact, providing a modernized component structure that includes a \BentoSidebar\ React/Preact component and a \BaseElement\ wrapper. Key features include a new \sidebar-toolbar-hook\ that allows for a horizontal menubar (toolbar) to be integrated into the sidebar via \toolbar\ and \toolbar-target\ attributes, and a dedicated \sidebar-animations-hook\ that manages slide-in/slide-out and fade animations for the sidebar and its backdrop. The component also integrates with the AMP history service to automatically push and pop history states when the sidebar is opened or closed, and includes a warning if the sidebar is not placed as a direct child of the body element.
extensions/amp-sidebar/1.0 · high confidence
Introduce experimental amp-next-page component for infinite-scroll document loading
Adds the new \amp-next-page\ component (version 0.1), which enables an infinite-scroll experience by dynamically loading and appending recommended documents to the current page. The component supports configuration via a remote JSON source (\src\ attribute) or inline JSON, and includes a built-in recommendation box that displays links to upcoming pages if loading is delayed or fails. It also provides features for customizing separators between pages, programmatically hiding specific elements (like headers or footers) in child documents via \hideSelectors\, and reusing analytics configurations from the parent document. The component is currently experimental and requires the \amp-next-page\ experiment to be enabled.
extensions/amp-next-page/0.1 · high confidence
Introduce inabox host script for non-AMP ad rendering
Adds the \inabox-host.js\ script and supporting modules (\inabox-messaging-host.js\, \frame-overlay-manager.js\, \position-observer.js\) that enable AMP ads to run inside iframes on non-AMP host pages. The host script initializes the messaging channel, validates message sources, and processes queued messages, while the messaging host handles position updates and full-overlay frame expansion. This allows ad networks to embed AMP ads in standard web pages or native app WebViews with proper viewport tracking and UI expansion capabilities.
ads/inabox · high confidence
Introduce modular ad network configuration and strategy architecture for amp-auto-ads
The amp-auto-ads extension has been restructured to support a pluggable ad network architecture. A new \AdNetworkConfigDef\ interface and \getAdNetworkConfig\ factory in \ad-network-config.js\ centralize configuration for supported networks, including AdSense, Alright, Denakop, Doubleclick, FirstImpression.io, Ping, Premiumads, and Wunderkind. Each network now has its own dedicated config file (e.g., \adsense-network-config.js\) handling specific logic like URL building, attribute mapping, and default constraints. The core \amp-auto-ads.js\ component now delegates ad placement logic to specialized strategies: \AdStrategy\ for standard inline placements and \AnchorAdStrategy\ for sticky/anchor ads, while \AdTracker\ manages ad count limits and spacing constraints. This change enables easier addition of new ad networks and more granular control over ad placement behavior.
extensions/amp-auto-ads/0.1 · high confidence
Introduce modular transform system for amp serve
The new server's transform pipeline is now structured as a modular system where each subdirectory under \build-system/server/new-server/transforms/\ can define a specific HTML transform via a \\*-transform.ts\ file, accompanied by isolated test cases in a \test/\ subdirectory. The main \transform.ts\ entry point orchestrates these transforms using \posthtml\, conditionally applying CSS and module transforms when ESM mode is enabled, and supports configuration overrides such as port and minification settings via command-line arguments.
build-system/server/new-server/transforms · high confidence
Introduce new ad placement algorithms and UI components for story ads
The \amp-story-auto-ads\ extension now supports configurable ad placement strategies, allowing publishers to choose between a simple page-count interval or a predetermined slot algorithm via an experiment branch. This change introduces a new ad badge UI with specific styling for desktop and RTL layouts, a glass pane overlay for ad pages, and a localized call-to-action button system. It also adds comprehensive analytics tracking for the entire ad lifecycle (request, load, insert, view, swipe, click, exit, discard) and supports remote JSON configuration for ad settings.
extensions/amp-story-auto-ads/0.1 · high confidence
Introduce new amp-jwplayer extension
Adds the amp-jwplayer extension, enabling the embedding of JW Player video content within AMP pages. This new component implements the standard AMP video interface, supporting core playback controls such as play, pause, mute, and unmute, as well as metadata retrieval like current time and duration. It handles iframe communication, fullscreen toggling, and integrates with AMP's consent management and video manager services.
extensions/amp-jwplayer/0.1 · high confidence
Introduce version 1.0 of amp-iframe with Bento web component support
This change introduces a new version 1.0 of the amp-iframe extension, providing a modern Bento web component alongside the legacy AMP implementation. The new component uses Preact and Shadow DOM to encapsulate the iframe, offering improved performance and style isolation. Key features include dynamic resizing via postMessage, automatic size adjustment when the iframe is outside the viewport to prevent layout shifts, and the ability to report intersection observer data to the embedded content. The extension also enforces strict positioning rules, requiring iframes to be placed outside the first 75% of the viewport or 600px from the top unless a placeholder is used.
extensions/amp-iframe/1.0 · high confidence
Introduces A4A cookie handling and experiment utility modules
This change adds new utility modules to the A4A (AMP for Ads) implementation to support cookie management and traffic-level experiments. The new \cookie-utils.js\ module handles setting cookies from ad responses (specifically for the \\_\gads\ and \\\_gpi\ identifiers) and processing user opt-out signals via postMessage, ensuring cookies are correctly partitioned on proxy origins. The \experiment-utils.js\ and \traffic-experiments.js\ modules provide machinery for randomized, controlled experiments on page loads, allowing for URL-based experiment selection and branch forcing for AdSense and DoubleClick ad tags. Additionally, \line-delimited-response-handler.js\ is introduced to stream and parse line-delimited JSON-HTML responses from ad servers, and a new \.eslintrc.js\ file enforces local linting rules for this directory.
ads/google/a4a · high confidence
Introduces amp-accordion v1.0 with Bento Web Component support and imperative API
The amp-accordion extension now includes a version 1.0 implementation that wraps the component as a standard Web Component (\\<bento-accordion\>\), enabling usage via npm or CDN scripts alongside the legacy AMP tag. This version exposes an imperative JavaScript API allowing developers to programmatically expand, collapse, and toggle sections, and registers specific actions (\toggle\, \expand\, \collapse\) for use in AMP templates. The release also includes dedicated CSS for layout and styling, ensuring proper display of section headers and content while maintaining backward compatibility through experiment flags.
extensions/amp-accordion/1.0 · high confidence
Introduces amp-megaphone extension for embedding Megaphone.fm podcasts
Adds a new amp-megaphone component that allows publishers to embed podcast players from Megaphone.fm directly into AMP pages. The extension supports both single episodes and playlists, configurable via attributes like data-episode, data-playlist, and data-episodes. It offers optional light theming (data-light), sharing controls (data-sharing), and tile layout (data-tile). The component handles pre-connecting to Megaphone's asset and image servers, manages iframe lifecycle, and integrates with the AMP pause helper to coordinate playback state with other media on the page.
extensions/amp-megaphone/0.1 · high confidence
Introduces onboarding education overlay for AMP Story navigation
Adds the \amp-story-education\ extension (version 0.1), which provides a full-screen overlay to guide users through story navigation gestures. The component displays animated visual cues for 'tap' and 'swipe' interactions, pauses the story playback while visible, and respects right-to-left (RTL) layout directions. It is designed to appear specifically within the mobile UI context to help users understand how to navigate through stories.
extensions/amp-story-education/0.1 · high confidence
Introduces the Bento amp-pan-zoom component (v1.0)
Adds a new version 1.0 of the amp-pan-zoom extension, implementing the Bento component architecture using Preact. This update provides a new interactive element that allows users to pan and zoom content via touch gestures (drag, pinch, double-tap) and includes on-screen zoom controls. The component exposes a public API for programmatic transformation and supports configuration of initial position and scale limits, enabling richer image and content viewing experiences within AMP pages.
extensions/amp-pan-zoom/1.0 · high confidence
Introduces the amp-3d-gltf component for rendering 3D models
Adds a new amp-3d-gltf component that allows embedding and interacting with 3D models in the glTF format. The implementation includes an animation loop, a viewer class utilizing Three.js for rendering, and support for actions such as rotating the model. It handles loading external assets, managing viewport interactions, and communicating with the parent AMP context via postMessage.
3p/3d-gltf · high confidence
Introduces the amp-google-read-al-player extension
Publishers can now embed the Google Read Aloud player in AMP pages using the new amp-google-read-aloud-player component (version 0.1). This extension renders an iframe that reads page content aloud using a specified voice, supporting attributes for API keys, Google Analytics tracking IDs, optional content URLs, intro/outro audio files, and pre-roll ad tags. The component integrates with the AMP video manager to handle media lifecycle events and includes validator rules to enforce required attributes and secure URL protocols.
extensions/amp-google-read-aloud-player · high confidence
Launch amp-mustache-0.2 with SVG support and strict triple-mustache sanitization
The amp-mustache extension is launched as version 0.2, introducing a new implementation that supports SVG content within templates. This version enforces strict sanitization for unescaped values (triple mustache) using a dedicated sanitizer, while also handling nested templates by replacing them with pointers to prevent variable replacement conflicts. The extension registers as a new template type, allowing users to adopt the updated rendering behavior with improved security and feature support.
extensions/amp-mustache/0.2 · high confidence
Launch of amp-next-page v1.0 with infinite scrolling and templated UI
The amp-next-page extension has been updated to version 1.0, introducing support for infinite article loading and remote page fetching. This release adds default and templated styles for separators and recommendation boxes, allowing authors to customize the look of the 'more articles' footer. The component now manages multiple pages via a shadow document model, handling visibility states to optimize performance, and includes analytics support to track user interactions with the next-page content.
extensions/amp-next-page/1.0 · high confidence
NWS fast fetch implementation for AMP story ads
The NWS ad network extension now supports fast fetch for serving ads in AMP stories via \\<amp-story-auto-ads\>\. This change introduces the core implementation logic and provides an internal documentation file detailing the configuration, such as setting the ad type to 'nws' and specifying a data slot. Additionally, an OWNERS file has been added to define review responsibilities for the extension.
extensions/amp-ad-network-nws-impl · high confidence
New AMP Analytics vendors and configuration files added
This change introduces a large set of new vendor configuration files for the AMP Analytics extension, adding support for numerous third-party analytics providers including Acquia Lift, Adobe Analytics, Adskeeper, Amplitude, AppsFlyer, At Internet, Baidu, Black Crow AI, BlueConic, BlueTriangle, Browsi, Burt, BySide, Captain Metrics, Chartbeat, Clicky, Colombia Analytics, Comscore, Cxense, Deep BI, Epica, Eulerian Analytics, Facebook Pixel, Gemius, GfK Sensic, Google AdWords, Google Analytics, Google Tag Manager (gtag), Ibeat, Idealmedia, Infonline, IP-Label, Keen, Kenshoo, Krux, Linkpulse, Lotame, and Mapp Intelligence. It also adds an OWNERS file to define review responsibilities for AppsFlyer and Mapp Intelligence configurations, and includes a \fake\.json file likely used for testing or as a template.
extensions/amp-analytics/0.1/vendors · high confidence
New AMP Dailymotion extension (v1.0) with Preact-based Bento implementation
This change introduces version 1.0 of the amp-dailymotion extension, replacing the previous implementation with a Preact-based architecture that shares code with the Bento video player components. For users, this provides a new way to embed Dailymotion videos using the \<amp-dailymotion\> tag, supporting attributes like data-videoid, autoplay, mute, and UI customization (endscreen, sharing, logo, info). The extension requires the 'bento' or 'bento-dailymotion' experiment to be enabled. Storybook examples and validator tests are included to demonstrate usage and validate the component's schema.
extensions/amp-dailymotion/1.0 · high confidence
New AMP Story examples and updated documentation assets
The examples/amp-story directory has been refreshed with a comprehensive set of new sample files demonstrating current AMP Story capabilities. These include interactive components like amp-story-360, amp-story-audio-sticker, and amp-story-captions (with style presets and container layouts), as well as advanced features such as amp-story-animation (triggered by visibility), amp-story-auto-ads (with development mode and custom JSON payloads), and branching navigation via fragment parameters. The examples also showcase desktop-specific layouts (one-panel, custom aspect ratios), panning media with lock-bounds, and audio-driven page advancement. Additionally, legacy references to ampbyexamples.com have been removed, and sample video URLs have been migrated from a shutting-down Google Cloud bucket to Netlify to ensure long-term availability.
examples/amp-story · high confidence
New AMP Story performance examples for LCP and visibility experiments
Added four new example stories in the performance directory to demonstrate and test specific AMP Story loading behaviors: \lcp.html\ and \lcp-compressed.html\ showcase Large Contentful Paint (LCP) metrics with uncompressed and compressed images respectively, both supporting the \\#load=first\ experiment; \splitcss.html\ illustrates the story prestyle + JS rendering flow; and \visibility.html\ demonstrates how to use the \story-load-inactive-outside-viewport\ experiment via URL hash to prevent inactive pages from triggering LCP.
examples/amp-story/performance · high confidence
New AMP Viewer Messaging library for secure cross-origin communication
The \amp-viewer-integration/0.1/messaging\ extension now includes a standalone NPM package (\@ampproject/viewer-messaging\) that provides a structured API for establishing a secure communication channel between an AMP Viewer and an AMP document. This library introduces a handshake mechanism (via \initiateHandshakeWithDocument\ and \waitForHandshakeFromDocument\) to verify origins and support opaque origins, replacing ad-hoc message passing with a typed, promise-based interface for sending requests and registering handlers.
extensions/amp-viewer-integration/0.1/messaging · high confidence
New AMP subscription examples for metering, contributions, and iframe providers
The examples/amp-subscriptions-google directory now includes several new demonstration pages: metering examples (amp-subscriptions-metering-gaa.amp.html, amp-subscriptions-metering-laa.amp.html, and amp-subscriptions-metering-gaa-bail.amp.html) showcasing GAA and LAA metering entitlements; a contribution example (amp-subscriptions-contribution.amp.html); a smartbox example (amp-subscriptions-smartbox.amp.html); an iframe-based provider example (amp-subscriptions-iframe.amp.html) with its corresponding provider implementation (amp-subscriptions-iframe.provider.html); and a metering registration widget (amp-subscriptions-metering-registration-widget.html). These files provide concrete implementations for various subscription and metering scenarios using the amp-subscriptions and amp-subscriptions-google extensions.
examples/amp-subscriptions-google · high confidence
New AMP4Ads sample data and test fixtures for ad network implementation
The \extensions/amp-ad-network-fake-impl/0.1/data\ directory now includes several new HTML and JavaScript sample files that serve as test fixtures and examples for the fake ad network. These additions cover various AMP4Ads scenarios, including basic ad structures (\fake\_amp.html\), ads utilizing 3p analytics and the \amp-ad-exit\ element (\fake\_amp\_ad\_with\_html\_attr.html\), ads using iframe transport for analytics (\fake\_amp\_ad\_with\_iframe\_transport.html\), and visibility specification tracking (\fake\_amp\_visibilityspec.html\). A new \demo\_a4a\_creative.out\ file provides a reserialized version of a creative demo for validation purposes.
extensions/amp-ad-network-fake-impl/0.1/data · high confidence
New AMPHTML ad examples and in-a-box host infrastructure
The \examples/amphtml-ads\ directory now includes a comprehensive set of AMPHTML ad templates (such as \adchoices-1.a4a.html\, \animation-ad.a4a.html\, and \dianomi.a4a.html\) alongside host pages (\gpt.host.html\, \many-ads.host.html\) designed to demonstrate and test these ads in an in-a-box environment. A new \ads-tag-integration.js\ script provides a bootstrap mechanism for the in-a-box host, and a \README.md\ clarifies the distinction between \.a4a.html\ ad files and \.host.html\ container pages, enabling developers to easily run and verify AMP ad implementations locally.
examples/amphtml-ads · high confidence
New BFCache analytics and unload-prevention examples
Added two new example pages in the \examples/bfcache\ directory to demonstrate best practices for Back/Forward cache (bfcache). The \analytics-report-when.html\ example shows how to configure \amp-analytics\ to report visibility metrics specifically on \documentExit\, ensuring data is captured even when the page is restored from bfcache. The \no-unload.html\ example demonstrates a page structure that avoids using the \unload\ event listener, which is necessary to prevent bfcache blocking in modern browsers.
examples/bfcache · high confidence
New Babel plugin to alias default-assigned parameters
A new Babel plugin, \babel-plugin-transform-default-assignment\, has been added to the build system. It transforms function parameters with default values (e.g., \function foo(x = 1)\) by introducing a local alias variable (e.g., \let \_x = x\) and using that alias within the function body. This change is designed to help Closure Compiler correctly type-narrow the value, excluding \undefined\ from the type of the defaulted parameter. The plugin includes tests for simple parameters, destructured parameters, and cases where it should throw errors for unsupported patterns like nested default assignments.
build-system/babel-plugins/babel-plugin-transform-default-assignment · high confidence
New Babel plugin to enable deep dead-code elimination for pure expressions
A new Babel plugin, \babel-plugin-deep-pure\, has been added to the build system. It processes calls to a \pure()\ function imported from \\#core/types/pure\ (or relative paths resolving to it) by stripping the wrapper and injecting \\#\_\PURE\\_\ comments into all nested expressions (such as function calls and \new\ expressions). This allows bundlers to more aggressively tree-shake code that was previously considered side-effectful due to the wrapper, while explicitly rejecting member expressions inside \pure()\ calls to prevent incorrect optimizations.
build-system/babel-plugins/babel-plugin-deep-pure · high confidence
New Babel plugin to fix JSDoc comment placement
A new Babel plugin, \babel-plugin-transform-fix-leading-comments\, has been added to the build system. This plugin corrects an issue where JSDoc comments are erroneously attached as trailing comments to a statement instead of leading comments on the next sibling. It achieves this by reassigning trailing comments to the following statement's leading comments, ensuring proper documentation association in the compiled output.
build-system/babel-plugins/babel-plugin-transform-fix-leading-comments · high confidence
New Babel plugin to mark AMP private properties for minification
A new Babel plugin, \babel-plugin-transform-rename-privates\, has been added to the build system. It transforms AMP source code by appending the \AMP\PRIVATE\\ suffix to class properties and methods that end with an underscore (e.g., \method\_\ becomes \method\_AMP\PRIVATE\\). This ensures that minifiers like Terser can safely mangle these names even when AMP code is bundled with third-party libraries, preventing naming collisions. The plugin specifically targets files within the AMP source tree, ignoring code in \node\_modules\ or \third\_party\ directories.
build-system/babel-plugins/babel-plugin-transform-rename-privates · high confidence
New Babel plugin to normalize parenthesized expressions
A new Babel plugin, \babel-plugin-transform-parenthesize-expression\, has been added to the build system. This plugin processes JavaScript AST nodes to ensure that parenthesized expressions are explicitly represented in the output, which helps standardize the code structure during the build process.
build-system/babel-plugins/babel-plugin-transform-parenthesize-expression · high confidence
New Babel plugin to remove 'use strict' directives
A new Babel plugin, \babel-plugin-transform-remove-directives\, has been added to the build system. This plugin transforms compiled code by stripping out \'use strict'\ directive strings from function bodies and script scopes, allowing for cleaner output in environments where strict mode is already enforced or unnecessary.
build-system/babel-plugins/babel-plugin-transform-remove-directives · high confidence
New Babel plugin to transform AMP assert calls
A new Babel plugin, \babel-plugin-transform-amp-asserts\, has been added to the build system. This plugin processes JavaScript code to handle AMP-specific assertion methods (such as \assertElement\, \assertString\, etc.) by either removing them entirely in production builds or preserving them with type annotations in development contexts, ensuring that type-checking logic is correctly stripped or maintained depending on the build environment.
build-system/babel-plugins/babel-plugin-transform-amp-asserts · high confidence
New Babel plugin to transform JSDoc typedef annotations into externs
A new Babel plugin, \babel-plugin-transform-annotation-to-extern\, has been added to the build system. This plugin processes JavaScript files to identify \@typedef\ annotations in JSDoc comments and transforms them into external type definitions (externs) suitable for Closure Compiler. It supports two modes: emitting the transformed typedefs directly into the AST for testing purposes, or writing them to a file in production pipelines. The plugin ensures unique typedef names and removes the original variable declarations and comments from the processed code.
build-system/babel-plugins/babel-plugin-transform-annotation-to-extern · high confidence
New Babel plugin to transform const to let for ESM output
A new Babel plugin, \babel-plugin-const-transformer\, has been added to the build system. This plugin modifies the output of JavaScript bundling by converting all \const\ variable declarations into \let\ declarations. This change is intended to ensure compatibility with certain ESM (ECMAScript Module) environments that do not support \const\ bindings in specific contexts.
build-system/babel-plugins/babel-plugin-const-transformer · high confidence
New Bento-based amp-audio component (v1.0)
A new version 1.0 of the amp-audio extension is introduced, built on the Bento architecture using Preact. This component provides a modern audio player with a public API for play, pause, and isPlaying actions, supports standard HTML5 audio attributes (src, loop, muted, preload), and exposes media metadata (title, artist, album, artwork) for integration with the browser's Media Session API. It is currently available behind the 'bento' and 'bento-audio' feature experiments and supports fixed and fixed-height layouts.
extensions/amp-audio/1.0 · high confidence
New CDN URL transformation utilities for the local server
Added new utility modules in the build-system server's transform utilities to handle CDN URL remapping and configuration. The \cdn.ts\ module provides functions to convert remote AMP CDN URLs (e.g., \cdn.ampproject.org\) into local development server paths, supporting path overwrites, extension changes (e.g., \.js\ to \.mjs\), and RTV URL generation. The \cdn-tag.ts\ module adds validation logic for script and link nodes, ensuring they originate from valid CDNs and have correct extensions. A \Lazy\ utility class was also introduced to support deferred initialization of resources, likely for performance optimization in the transformer pipeline. These changes enable the local server to correctly serve and transform AMP assets during development.
build-system/server/new-server/transforms/utilities · high confidence
New CSS build task with caching and synchronous transformation support
The build system now includes a dedicated CSS compilation task (build-system/tasks/css) that processes CSS entry points (such as ampdoc.css and amp-story-player.css) into JavaScript modules and output CSS files. This task introduces a TransformCache to cache PostCSS transformations based on content hashes, improving build performance. It also adds synchronous CSS transformation capabilities via jsify-css-sync.js for use cases requiring non-asynchronous processing, while maintaining support for asynchronous builds with debounced file watching.
build-system/tasks/css · high confidence
New CSS infrastructure for AMP Story Player and IMA video controls
This change introduces new CSS files to support the AMP Story Player and IMA video integration. It adds \amp-story-player-shadow.css\ to style the Story Player's shadow DOM, including navigation transitions and control buttons, and \amp-ima-video-iframe.css\ to provide custom controls and styling for video ads rendered in iframes. Additionally, it creates \css/OWNERS\ to define review responsibilities for the CSS directory and \css/Z\_INDEX.md\ to document the project's z-index usage.
css · high confidence
New OWNERS file and build-system common utilities
The build-system/common directory now includes an OWNERS file designating the ampproject/wg-infra team as the owners for this area. Additionally, a suite of new utility modules has been introduced to support the build system, including check-package-manager (which enforces npm usage and validates Node LTS versions), ci (providing service-agnostic CI state detection for GitHub Actions and CircleCI), exec and process (handling child process execution and output), logging (with terminal width-aware wrapping), npm-checks (validating package-lock.json sync and version), transform-cache (caching Babel and other transforms to disk and memory), and various helpers for git operations, file diffing, debouncing, and Preact/React attribute mapping.
build-system/common · high confidence
New Oblivki ad network implementation
Added the \amp-ad-network-oblivki-impl\ extension (version 0.1), enabling support for the Oblivki ad network. The implementation registers a new AMP element that extends \AmpA4A\, handling ad URL resolution by mapping base URLs to A4A-specific endpoints and specifying Cloudflare as the signing service. It also includes configuration logic to determine when A4A mode is enabled for Oblivki ads based on the source URL and \data-use-a4a\ attribute.
extensions/amp-ad-network-oblivki-impl/0.1 · high confidence
New PR-check build system and CI job scripts
The \build-system/pr-check\ directory now contains a complete set of new scripts that define the PR-check workflow. This includes \build-targets.js\ to determine which tests to run based on changed files, \checks.js\ to orchestrate linting and validation, and individual job scripts (e.g., \unit-tests.js\, \e2e-tests.js\, \dist.js\) to execute specific CI tasks. The system also introduces an \OWNERS\ file to grant the \ampproject/wg-infra\ team ownership of this directory.
build-system/pr-check · high confidence
New PWA example with service worker and shadow DOM support
The PWA example now includes a dedicated service worker (pwa-sw.js) that intercepts navigation requests to AMP documents, allowing the app shell to handle navigation while fetching content in the background. Additionally, a new entry point (pwa-sd-polyfill.html) demonstrates the PWA shell running with Shadow DOM polyfills (webcomponentsjs v1.3.3), enabling compatibility with browsers that lack native Shadow DOM and Custom Elements support. The main shell script (pwa.js) has been updated to support both standard and streaming document rendering modes, registering the service worker and managing navigation state via the History API.
examples/pwa · high confidence
New Storybook task for isolated component development
A new \amp storybook\ task has been added to the build system, enabling isolated development and testing for AMP components using Storybook. This task supports three environments—AMP, Preact, and React—allowing developers to run the Storybook dashboard on predefined ports (9001, 9002, and 9003 respectively) or specify custom ports. It includes configuration for building static Storybook outputs for PR deployments and provides documentation on style recommendations for writing stories, such as using \args\ for simple controls and avoiding redundant story names. The task also handles necessary setup steps like bootstrapping third-party frames and managing subpackage updates.
build-system/tasks/storybook · high confidence
New \`amp markdown-toc\` task to maintain table-of-contents
A new build task, \amp markdown-toc\, has been added to automatically generate and update tables of contents in Markdown files. By including a specific comment header in a file, the task can insert or refresh the TOC (with \--fix\) or verify that it is up-to-date during CI. The implementation uses \fast-glob\ for file discovery and supports custom formatting options via a JSON comment block.
build-system/tasks/markdown-toc · high confidence
New ad vendor integrations added to ads/vendors
This change adds support for several new ad networks and vendors in the ads/vendors directory, including 1wo, 24smi, 4wMarketplace, A8net, A9 (Amazon), AccessTrade, Ad.Agio, Adblade, AdButler, Adenza, Adform, AdFox, Ad Generation, AdGlare, Adhese, AdinCube, ADITION, Adman, Admanmedia, AdMatic, Admixer, Adnuntius, and AdOcean. Each vendor is implemented with a corresponding JavaScript adapter and documentation file, enabling publishers to use these specific ad services within AMP pages.
ads/vendors · high confidence
New amp task runner with CLI integration and CI workarounds
The build-system/task-runner directory now contains the core files for the 'amp' task runner, including amp-cli-runner.js (a global CLI shim that delegates to the local amp.js), amp-task-runner.js (the main runner logic using commander and esprima for lazy task loading), and install-amp-task-runner.js (which installs the CLI binary to the npm global bin directory). An OWNERS file is added to grant the wg-infra team ownership. The runner includes a temporary workaround for CircleCI where the 'e2e' and 'unit' tasks get stuck, forcing an exit after completion.
build-system/task-runner · high confidence
New amp-access-iframe-api npm package for iframe-based access control
A new standalone npm package, \amp-access-iframe-api\, has been introduced to support the iframe-based access protocol for both \amp-access\ and \amp-subscriptions\. This package provides the \AmpAccessIframeApi\ entry point, which allows developers to implement an \AccessController\ interface (handling \connect\, \authorize\, and \pingback\ methods) within an iframe. The implementation includes a dedicated messaging layer for secure communication with the parent AMP document, supporting features like one-behind authorization semantics and configurable iframe variables.
extensions/amp-access/0.1/iframe-api · high confidence
New amp-bind example pages added to documentation
Added a comprehensive set of new example HTML files in the examples/bind directory to demonstrate amp-bind capabilities. These include basic binding, carousel interactions, details element toggling, e-commerce product selection, error handling scenarios, form validation, a 2048-style game, iframe src binding, list binding modes (always, refresh, refresh-evaluate, no), live-list integration, macro definitions, and performance stress tests.
examples/bind · high confidence
New amp-consent examples for third-party iframes, ads, and TCF postMessage integration
The amp-consent examples directory now includes new demonstration pages for integrating consent with third-party iframes (amp-video-iframe and amp-iframe), AMP ads (amp-ad) via RTC, and the TCF PostMessage API. These examples show how to block content until consent is received, handle client-side and server-side consent decisions, and implement custom consent UIs that communicate with the parent AMP document via postMessage.
examples/amp-consent · high confidence
New amp-crypto-polyfill extension provides SHA-384 support
A new extension, amp-crypto-polyfill, has been introduced to provide a polyfill for the crypto API, specifically exposing the SHA-384 hash function. This extension registers a service builder that makes the SHA-384 implementation available to AMP pages, enabling cryptographic hashing capabilities that were previously unavailable or required manual implementation.
extensions/amp-crypto-polyfill/0.1 · high confidence
New amp-dynamic-css-classes extension adds referrer and viewer CSS classes
The new \amp-dynamic-css-classes\ extension (version 0.1) automatically adds CSS classes to the document body to enable styling based on the user's context. It adds classes prefixed with \amp-referrer-\ (e.g., \amp-referrer-twitter-com\) derived from the referrer URL, normalizing specific sources like \t.co\ to \twitter.com\ and detecting Pinterest via User Agent when the referrer is missing. Additionally, it adds the \amp-viewer\ class if the AMP document is embedded within a viewer. This allows authors to apply distinct styles for different traffic sources or viewer environments.
extensions/amp-dynamic-css-classes/0.1 · high confidence
New amp-facebook-page component for embedding Facebook pages
Adds the amp-facebook-page component, allowing users to embed a specific Facebook page via an iframe. The implementation handles preconnecting to Facebook domains, loading the Facebook SDK in the user's locale, and managing iframe lifecycle events such as resizing and loading states.
extensions/amp-facebook-page/0.1 · high confidence
New amp-fx effects: fly-in and scroll-toggled float-in
The amp-fx-collection extension now supports the fly-in effect (fly-in-top, fly-in-bottom, fly-in-left, fly-in-right) and the scroll-toggled float-in effect (float-in-top, float-in-bottom). These new visual effects are registered in the extension's type definitions and wired into the collection's installation logic, allowing authors to apply these animations to elements via the amp-fx attribute.
extensions/amp-fx-collection/0.1 · high confidence
New amp-nexxtv-player extension for nexxOMNIA media streams
Adds the amp-nexxtv-player component, allowing AMP pages to embed and play media streams from the nexxOMNIA platform. The extension supports video, audio, live, and radio content via attributes like data-mediaid, data-client, and data-streamtype, and includes validation rules and documentation for integration.
extensions/amp-nexxtv-player · high confidence
New amp-render component for template-based data rendering
AMP introduces the \amp-render\ component, which fetches JSON data from remote endpoints, \amp-state\, or \amp-script\ and renders it using templates (e.g., amp-mustache). This new capability supports placeholder and fallback UI states, a \refresh\ action to reload data, and dynamic resizing via \resizeToContents\. The component validates against specific layout modes (container, fill, fixed, etc.) and attributes like \binding\, \credentials\, and \xssi-prefix\.
extensions/amp-render · high confidence
New amp-skimlinks extension for affiliate link monetization
This release introduces the amp-skimlinks extension, which automatically detects affiliate links on AMP pages and replaces them with monetizable Skimlinks URLs. The extension resolves domains via a beacon API, supports a custom redirect domain via the custom-redirect-domain attribute, and provides page, link, and non-affiliate click tracking through amp-analytics. It also allows publishers to exclude specific domains and set a custom tracking ID.
extensions/amp-skimlinks/0.1 · high confidence
New amp-standalone extension for PWA navigation fixes
The new amp-standalone extension (version 0.1) improves navigation behavior for AMP pages saved to a device's homescreen (PWAs) on iOS Safari and Chrome. It prevents users from getting stuck in standalone mode by forcing external links to open in a new tab on Chrome, and ensuring internal links open in the original tab on Safari, rather than triggering unwanted new-tab behaviors.
extensions/amp-standalone · high confidence
New amp-story-interactive extension for quizzes, polls, and results
Story creators can now add interactive experiences to AMP Stories using the new amp-story-interactive extension (version 0.1). This extension introduces several new components: amp-story-interactive-binary-poll, amp-story-interactive-poll, amp-story-interactive-quiz, amp-story-interactive-img-poll, amp-story-interactive-img-quiz, amp-story-interactive-slider, and amp-story-interactive-results. These components allow users to create polls, quizzes, and result-based experiences that integrate with a backend endpoint to store and display aggregate voting data. The extension includes comprehensive validation rules and documentation for configuring these interactive elements within AMP stories.
extensions/amp-story-interactive · high confidence
New amp-vk extension for embedding VK posts and polls
The amp-vk extension is introduced, allowing users to embed VK.com post and poll widgets into AMP pages. This change adds the necessary documentation (amp-vk.md), ownership configuration (OWNERS), and validator rules (validator-amp-vk.protoascii) to support the new component, which accepts attributes like data-embedtype, data-owner-id, and data-post-id for posts, or data-api-id and data-poll-id for polls.
extensions/amp-vk · high confidence
New amp-vk extension for embedding VKontakte posts and polls
Adds the amp-vk extension, enabling AMP pages to embed VKontakte (VK) social content. The component supports two embed types: 'post' and 'poll', requiring specific data attributes (such as data-owner-id, data-post-id, and data-hash for posts; and data-api-id, data-poll-id for polls) to construct the appropriate iframe URLs from vk.com. It handles preconnecting to vk.com and manages the dynamic loading of the embedded widgets.
extensions/amp-vk/0.1 · high confidence
New and updated AMP ad examples in examples/amp-ad
The examples/amp-ad directory has been reorganized and expanded with new demonstration pages for various ad networks and features. New examples include a4a-fullwidth.amp.html, a4a-multisize.amp.html, and a4a.amp.html for A4A (AMP for Ads) implementations, adsense.amp.html for AdSense with consent notification support, adsviu.amp.html for the Adsviu network, adzerk.amp.html for Adzerk, doubleclick-multisize.amp.html for DoubleClick multi-size requests, doubleclick-remote-html.html for remote HTML usage, doubleclick-rtc.amp.html for Real-Time Config, doubleclick-safeframe.html for Safeframe creatives, doubleclick-targeting-macro.html for JSON targeting macros, doubleclick-usdrud.html for same-domain rendering flags, and doubleclick-vanilla.amp.html for basic DoubleClick usage. Existing examples like ads.amp.html and ads.amp.esm.html have been updated to include new ad networks such as Adenza, Adpushup, Clever, Digiteka, and others, and to reflect the removal of vendors like Lentainform and Yahoo. The ads-legacy.amp.html file is retained for backward compatibility testing.
examples/amp-ad · high confidence
New app-install ad example and remote configuration support
The amp-story ads example directory now includes a new app-install ad template (app-install.html) that demonstrates a custom-styled ad with app imagery and text, alongside a new remote.json file that enables remote configuration for ad attributes such as type and data-slot.
examples/amp-story/ads · high confidence
New babel plugin for static JSON configuration transformation
A new Babel plugin, \babel-plugin-transform-json-configuration\, has been added to the build system. It transforms \jsonConfiguration\ and \jsonLiteral\ calls into \JSON.parse\ statements with template literals, enabling static JSON configuration values to be inlined and parsed at build time. The plugin supports nested inclusions via \includeJsonLiteral\ and correctly handles escaping of special characters like backticks and interpolation strings.
build-system/babel-plugins/babel-plugin-transform-json-configuration · high confidence
New babel plugin to mangle enum object values for smaller bundles
A new Babel plugin, \babel-plugin-mangle-object-values\, has been added to the build system. This plugin transforms object expressions passed to the \mangleObjectValues\ helper function by replacing their string values with compact numeric indices (starting from 1). This allows developers to use descriptive string keys during development while shipping significantly smaller, mangled numeric values in production builds, which is particularly useful for optimizing large enum-like objects.
build-system/babel-plugins/babel-plugin-mangle-object-values · high confidence
New babel plugin to resolve URL config via runtime
Added the \babel-plugin-amp-config-urls\ build tool, which transforms namespace imports of \src/config/urls\ into references to \self.AMP.config.urls\. This allows extensions to reuse the URL configuration defined by the runtime at build time, while ensuring that binaries not depending on the runtime continue to use the static config values directly.
build-system/babel-plugins/babel-plugin-amp-config-urls · high confidence
New build plugin to remap JS dependencies
A new \remap-dependencies-plugin\ has been added to the build system, allowing specific JavaScript modules to be remapped to different targets during bundling. This plugin supports remapping both local files and npm packages to either bundled dependencies or externalized modules, with support for regex-based matching and proper resolution of directory imports and file extensions.
build-system/tasks/remap-dependencies-plugin · high confidence
New build-system tasks for analytics vendors, story localization, and assertions
The build-system now includes dedicated tasks to compile analytics vendor configurations, generate story localization files, and validate assertion dead-code elimination. Developers can use \amp analytics-vendor-configs\ to build vendor JSON files, \amp build-story-localization\ to flatten and output locale strings, and \amp check-asserts\ to ensure dev assertions are correctly removed in minified builds.
build-system/tasks · high confidence
New centralized tooling for managing AMP experiments
The \tools/experiments\ directory now provides a dedicated, structured system for managing experimental features. This includes a new \OWNERS\ file defining review responsibilities for the \wg-infra\, \wg-performance\, and \working-groups\ teams, a comprehensive \README.md\ documenting how to enable, add, and remove experiments, and a new \experiments-config.js\ file that serves as the central registry for all active experiment definitions (such as \amp-story\, \amp-next-page\, and \analytics-browser-events\). Additionally, a new \experiments.html\ interface and its supporting \experiments.js\ runtime logic have been introduced, allowing developers to toggle experiments via the CDN subdomain or programmatically, and to opt into specific release channels (Experimental, Beta, Nightly, RTV) via cookies.
tools · high confidence
New command-line tool to automatically sweep and remove expired experiments
A new \amp sweep-experiments\ task has been added to the build system to automate the cleanup of experiments that have been launched or disabled for a specified period (defaulting to 180 days). Running this command scans configuration files (\prod-config.json\, \canary-config.json\, \experiments-config.js\) and source code to identify expired experiments, then generates individual git commits to remove their configuration entries and automatically refactor runtime code (replacing \isExperimentOn()\ calls with their evaluated boolean literals). The tool also includes a companion \cleanup-branches\ script to automatically close pull requests and delete associated feature branches, streamlining the maintenance of the codebase by removing obsolete experimental features.
build-system/tasks/sweep-experiments · high confidence
New development server routes for A4A envelopes, analytics, and test fixtures
The build-system server now includes new route handlers to support local development and testing of AMP advertising and UI components. The \a4a-envelopes\ route provides endpoints for in-a-box, MRAID, friendly iframe, and safeframe ad envelopes, allowing developers to serve and test AMP4ADS documents locally. The \analytics\ route adds a POST endpoint to simulate analytics rewrites and a generic listener for analytics events. Additionally, the \list\ route introduces endpoints for infinite scroll testing (including error and state scenarios) and serves JSON data for nested menu demos, while the \test\ route provides fixtures for form submission and date-picker configurations.
build-system/server/routes · high confidence
New documentation for AMP Viewer integration capabilities and API
This change introduces comprehensive documentation for the AMP Viewer integration extension, including a new \CAPABILITIES.md\ file that lists supported viewer capabilities (such as A2A linking, client ID service, error reporting, and XHR interception) and their corresponding messages, an \OWNERS\ file assigning maintenance to the wg-viewers team, a \TICKEVENTS.md\ file detailing performance tick events (including FID, LCP, CLS, and various paint/layout metrics), and updated \amp-doc-viewer-api.md\ and \integrating-viewer-with-amp-doc-guide.md\ files that document the initialization parameters, messaging protocols, and handshake procedures for connecting AMP documents with viewers in both mobile web and webview contexts.
extensions/amp-viewer-integration · high confidence
New fly-in and fade-in animation presets for amp-fx
The amp-fx-collection extension now supports new animation presets: fly-in (from top, bottom, left, or right) and fade-in (including scroll-triggered fade-in). These effects are implemented via new provider files that define the animation logic, default durations, easing, and margin calculations, allowing authors to add entrance animations to elements using the amp-fx attribute.
extensions/amp-fx-collection/0.1/providers · high confidence
New jscodeshift build configuration and utilities
This change introduces a new shared configuration and utility layer for jscodeshift within the build system. It adds a parser configuration file that enables support for modern JavaScript features such as import assertions, optional chaining, and decorators, ensuring consistent parsing across build tasks. Additionally, it provides JavaScript utilities to execute jscodeshift commands and parse their output reports, streamlining how transforms are run and their results are collected.
build-system/test-configs/jscodeshift · high confidence
New jscodeshift transforms for sweeping experiment flags and config
Added two new jscodeshift transforms to the build-system sweep-experiments tool: \remove-experiment-config.js\ removes experiment entries from configuration files (e.g., \tools/experiments/experiments-config.js\) by matching the \id\ property, and \remove-experiment-runtime.js\ replaces runtime calls to \isExperimentOn()\ and \toggleExperiment()\ with static boolean values or their negations based on the launch state, while also cleaning up unused imports. These changes enable automated cleanup of experiment code during the sweep process.
build-system/tasks/sweep-experiments/jscodeshift · high confidence
New linting configuration and example files for the examples directory
The examples directory now includes a dedicated ESLint configuration file (.eslintrc.js) that disables specific linting rules (such as JSDoc checks and local AMP-specific rules) to accommodate the unique requirements of example files, while also setting up overrides for visual tests. Additionally, several new example files have been added to demonstrate component usage, including amp-3q-player, amp-accordion, ad-lightbox, adman, and ALP (AMP Landing Pages) with its associated creative.
examples · high confidence
New local development server app-index with settings and proxy capabilities
A new app-index module has been added to the build-system server to provide a local directory listing and development interface. This includes an Express middleware that serves a styled HTML index page with a proxy form for loading external URLs, a settings panel to toggle between different HTML envelope modes (such as standard, shadow, a4a, and inabox) and JavaScript serve modes (default, minified, or CDN), and automatic injection of required AMP extensions into the served documents. The implementation also introduces path mapping for the root URL and basic security checks to prevent directory traversal.
build-system/server/app-index · high confidence
New multi-bitrate video example added
An example page demonstrating multi-bitrate video playback has been added to the amp-video examples. The new file, multi-bitrate.html, shows how to use the amp-video component with multiple \<source\> elements, each specifying a different bitrate via the data-bitrate attribute, allowing the player to adapt to varying network conditions.
examples/amp-video · high confidence
New runtime performance example pages added
The examples/runtime folder now includes three new AMP pages designed for performance testing: article.html, which serves as a comprehensive stress test using many standard components; images.html, which loads 1,000 images to test the resources system's prioritization of viewport elements; and list-always.html, which demonstrates the slowest form of amp-list by using binding="always". These pages are owned by the performance working group and are intended for use with the amp performance tool.
examples/runtime · high confidence
New runtime-test task infrastructure for AMP build system
The build system introduces a new \runtime-test\ task area to manage and execute unit and integration tests. This change adds a dedicated OWNERS file for the \wg-infra\ team and implements the core test runner logic using Karma with esbuild transforms. It provides configurable browser launchers for Chrome, Firefox, Safari, and Edge (including headless and canary modes), helper utilities for detecting local file changes to run affected tests selectively, and CI-specific reporting (JUnit XML for CircleCI).
build-system/tasks/runtime-test · high confidence
New shared utilities for content recommendation and URL building
Added two new shared modules in the ads/google/a4a/shared directory: content-recommendation.js and url-builder.js. The content-recommendation module exports layout types, configuration records, and responsive sizing logic for Google matched content units, enabling consistent ad slot sizing across different screen widths. The url-builder module provides a utility to construct URLs from query parameters with support for length truncation, ensuring URLs stay within specified limits while preserving critical parameters.
ads/google/a4a/shared · high confidence
New standalone share menu component for AMP Stories
A new, separate \amp-story-share-menu\ extension has been introduced to handle the story sharing interface, moving this functionality out of the main \amp-story\ bundle to improve performance. This component provides a native-feeling share dialog that supports multiple providers (such as email, Facebook, Twitter, WhatsApp, and others) and includes specific styling for both mobile and desktop layouts. It manages visibility via store state updates, handles keyboard navigation (Escape to close), and supports cross-origin URL copying when embedded in an \amp-story-player\.
extensions/amp-story-share-menu · high confidence
New structured data examples for articles, recipes, reviews, sports, and video
The examples/metadata-examples directory now includes comprehensive AMP HTML templates for Articles, Recipes, Reviews, SportsEvent articles, and Videos, each provided in both JSON-LD and microdata formats. These samples demonstrate best practices for schema.org markup, including specific fields like dateModified and description for articles, recipeIngredient for recipes, and Twitter Card meta tags for article sharing. The examples also feature updated video URLs hosted on Netlify and correct schema usage (such as recipeIngredient instead of the superseded ingredients) to help publishers implement valid structured data.
examples/metadata-examples · high confidence
New utility modules for analytics, animations, and display observation
This change introduces a suite of new utility modules in \src/utils\ to support core runtime capabilities. \analytics.js\ provides a helper to trigger analytics events, while \animation.js\ adds a class for constructing and controlling arbitrary animation processes. \display-observer.js\ implements a service to track whether elements are displayable based on visibility and intersection. \close-watcher-impl.js\ supports the CloseWatcher API with a history-service fallback for modal dismissal, and \privacy-sandbox-utils.js\ exposes checks for the Attribution Reporting API. Additional utilities include \dom-transform-stream.js\ and \dom-writer.js\ for streaming DOM reconstruction, \dom-ancestor-visitor.js\ for traversing element ancestors, and \xhr-utils.js\ for serializing fetch requests and intercepting XHRs via the viewer.
src/utils · high confidence
New viewer host example for AMP integration
Added a new example file (amp-viewer-host.js) demonstrating how to implement a viewer host for communication with AMP documents. This example introduces a class that handles messaging initialization, including support for handshake logic and opaque origin handling, allowing developers to see how to properly set up and manage communication between the viewer and AMP content.
extensions/amp-viewer-integration/0.1/examples · high confidence
Release amp-mustache-0.1 from experimental
The amp-mustache extension version 0.1 is now officially released and no longer experimental. This version implements the Mustache.js templating engine for AMP, supporting both script and template tags, handling nested templates, and applying strict sanitization for unescaped (triple-mustache) content. Note that this version is deprecated in favor of more recent versions.
extensions/amp-mustache/0.1 · high confidence
Server-side module transformation for script tags
The new server transform in \build-system/server/new-server/transforms/modules\ automatically converts standard \\<script\>\ tags into module/nomodule pairs. It adds a \nomodule\ attribute to the original script and injects a corresponding \\<script type="module"\>\ with an \.mjs\ extension, enabling modern browser support while maintaining fallback for older browsers. This logic is applied during the HTML processing phase of the new server build.
build-system/server/new-server/transforms/modules · high confidence
Storybook demos for amp-accordion 1.0 and Bento API
Added Storybook stories for the amp-accordion 1.0 extension and its Bento component, providing interactive examples for basic usage, imperative API calls (expand, collapse, toggle), event handling, and AMP Bind integration.
extensions/amp-accordion/1.0/storybook · high confidence
Storybook demos for amp-iframe 1.0 and BentoIframe
Added Storybook stories for the amp-iframe 1.0 extension and the BentoIframe component. The new Basic.amp.js file provides AMP-specific examples demonstrating basic usage, placeholders, fallbacks, resizable iframes, and overflow buttons. The Basic.js file offers corresponding Bento component stories, showcasing standard rendering, intersection-based resizing behavior, and sending intersection post messages.
extensions/amp-iframe/1.0/storybook · high confidence
Storybook stories for Bento Embedly Card component
Added Storybook stories demonstrating the new Bento-based Embedly Card component. The stories cover basic usage with a URL and title, as well as configuration via the BentoEmbedlyContext for API keys, and include AMP-specific examples showing placeholder and fallback content handling.
extensions/amp-embedly-card/1.0/storybook · high confidence
Storybook stories for amp-soundcloud and Bento Soundcloud components
Added Storybook stories for the amp-soundcloud extension (version 1.0) and the new Bento Soundcloud component. The stories demonstrate various configurations including track and playlist embedding, responsive layouts, media queries, and placeholder/fallback handling for the AMP component, as well as basic track and playlist usage for the Bento component. A utility function for converting RGBA color values to HEX is also included to support the component's color customization.
extensions/amp-soundcloud/1.0/storybook · high confidence
Storybook stories for amp-vimeo 1.0 now include both legacy AMP and new Bento component variants
The Storybook location for amp-vimeo 1.0 has been updated to demonstrate both the traditional amp-vimeo element and the new BentoVimeo component. The Basic.amp.js file provides AMP-specific stories (Default, WithPlaceholderAndFallback, Actions) using the amp-vimeo tag with experimental bento flags, while Basic.js introduces a dedicated story for the BentoVimeo component itself, allowing users to preview and test the new component-based API alongside the existing tag-based implementation.
extensions/amp-vimeo/1.0/storybook · high confidence
Storybook stories for amp-youtube 1.0 (Bento)
Added Storybook stories for the amp-youtube 1.0 extension, providing interactive examples for both the classic AMP variant (Basic.amp.js) and the new Bento component (Basic.js). The AMP stories demonstrate usage with amp-accordion and HTML details elements, as well as placeholder and fallback content. The Bento stories showcase the component's API, including state inspection for properties like autoplay, loop, currentTime, and duration, and demonstrate integration with Bento accordion components.
extensions/amp-youtube/1.0/storybook · high confidence
Storybook stories now demonstrate both AMP and Bento carousel implementations
The storybook integration for amp-base-carousel now includes separate story files for the traditional AMP component (Basic.amp.js) and the new Bento component (Basic.js). This allows developers to preview and interact with both versions side-by-side, highlighting differences in API usage such as imperative method calls via refs in the Bento version versus AMP's event-based API, and exposing props like visibleCount and advanceCount in the Bento stories.
extensions/amp-base-carousel/1.0/storybook · high confidence
Support custom scope and API key for the CID API
The Client ID (CID) service now allows publishers to configure a custom scope and provide an explicit API key when requesting a client ID from the viewer. This change enables more granular control over how the CID is generated and persisted, allowing for specific use cases where the default scope or automatic key detection is insufficient.
src/service · high confidence
Support for Aniview in-unit video ads in Apester media
The Apester AMP extension now handles in-unit video advertisements from the Aniview provider. When the media configuration includes Aniview player options, the extension dynamically creates an iframe-based ad container within the content, applies a progress bar animation during the ad's skip timer, and respects user GDPR consent signals passed via the consent object. This allows publishers using Apester to serve video ads directly within the media unit without external intervention.
extensions/amp-apester-media/0.1/monetization/inUnit · high confidence
Support for importing JSON and JSON Schema files via Babel
The build system now allows developers to import local JSON and JSON Schema files directly in their source code using import assertions (e.g., \import data from './file.json' assert { type: 'json' }\). The \babel-plugin-transform-json-import\ plugin transforms these imports at build time: standard JSON files are parsed and embedded as \JSON.parse\ calls, while JSON Schema files are compiled using AJV, with the resulting validation logic inlined into the output. This enables static analysis and validation of JSON data at compile time rather than runtime.
build-system/babel-plugins/babel-plugin-transform-json-import · high confidence
amp-accordion extension files added with v1.0 support and validation rules
The \extensions/amp-accordion\ directory now contains the core definition files for the component, including \OWNERS\, \amp-accordion.md\, and \validator-amp-accordion.protoascii\. The documentation (\amp-accordion.md\) outlines the usage for websites, ads, and email, highlighting new capabilities such as the \animate\ attribute for roll-down/roll-up animations, the \expand-single-section\ attribute for exclusive expansion, and \amp-bind\ support for the \\[expanded\]\ attribute. The validator file (\validator-amp-accordion.protoascii\) introduces version 1.0 support for AMP and AMP4ADS formats, while maintaining version 0.1 for AMP4EMAIL, and enforces strict structural rules (e.g., mandatory heading children for sections).
extensions/amp-accordion · high confidence
amp-consent extension v0.1 implementation
The amp-consent extension (version 0.1) is now available, providing a standardized way for publishers to manage user consent. This release introduces a new component that supports integration with major Consent Management Platforms (CMPs) such as OneTrust, Usercentrics, and SourcePoint, as well as Google Funding Choices. It features a customizable UI with modal and fullscreen modes, supports the IAB Transparency and Consent Framework (TCF) v2.2 via a PostMessage API, and allows for custom consent policies and cookie writing. The extension also includes accessibility improvements, such as screen reader support and focus management, and handles geo-based consent requirements.
extensions/amp-consent/0.1 · high confidence
amp-experiment 1.0 adds support for mutating attributes, styles, and text content
The amp-experiment extension (version 1.0) now supports mutating element attributes, inline styles, and text content. This change introduces new mutation handlers in the \extensions/amp-experiment/1.0/mutation\ directory: \AttributeMutationDefaultClass\ for general attributes (with validation to prevent adding the \i-amphtml\ class), \AttributeMutationDefaultStyle\ for specific CSS properties (with strict validation for AMP elements vs. standard elements), \AttributeMutationDefaultUrl\ for \href\ and \src\ attributes on supported tags (AMP-IMG, AMP-IFRAME, A) with HTTPS enforcement, and \CharacterDataMutation\ for updating text content. These components implement a common \Mutation\ interface defined in \mutation.js\, enabling the experiment engine to apply these changes to selected elements.
extensions/amp-experiment/1.0/mutation · high confidence
amp-geo adds preset country lists and group support
The amp-geo extension now supports predefined country groups via new \preset-eea\ and \preset-us-ca\ presets, allowing publishers to easily apply location-specific styling or logic to broad regions like the European Economic Area or US California. This change introduces new files (\amp-geo-presets.js\, \amp-geo-in-group.js\) to manage these presets and group states, integrating them into the main \amp-geo.js\ logic to enhance configuration flexibility without requiring manual country code enumeration.
extensions/amp-geo/0.1 · high confidence
amp-instagram extension v0.1 initial implementation
Introduces the new \amp-instagram\ component (version 0.1), allowing users to embed Instagram posts using the \data-shortcode\ attribute. The extension supports responsive layouts, optional captions via the \data-captioned\ flag, and a default Instagram frame style via \data-default-framing\. It includes a dedicated CSS file for styling and documentation detailing usage and validation rules.
extensions/amp-instagram/0.1 · high confidence
amp-lightbox 0.1: New CSS, documentation, and modernized JavaScript implementation
This change introduces the \amp-lightbox\ 0.1 extension, providing a full-viewport modal overlay component. The diff adds the component's CSS (\amp-lightbox.css\) which defines the fixed positioning, z-indexing, and specific styles for ad lightbox close headers and buttons, alongside comprehensive documentation (\amp-lightbox.md\) detailing usage, attributes like \scrollable\ and \animate-in\, and accessibility features. The JavaScript implementation (\amp-lightbox.js\) is rewritten to use modern ES6 modules, integrating the native CloseWatcher API for better browser history and escape-key handling, supporting multiple animation presets (fade-in, fly-in), and ensuring proper resource scheduling and iOS scroll freeze prevention.
extensions/amp-lightbox/0.1 · high confidence
amp-lightbox extension specification and documentation added
This change introduces the core specification files for the \amp-lightbox\ component, including the validator rules (\validator-amp-lightbox.protoascii\), the \OWNERS\ file for repository access control, and the reference documentation (\amp-lightbox.md\). The validator defines support for both version 0.1 (latest) and version 1.0, noting that version 1.0 is Bento-supported and excludes the older version. It also marks the component as deprecated in AMP4EMAIL due to positioning issues. The documentation details usage, attributes like \animation\ and \scrollable\, actions (\open\, \close\), and accessibility features such as ESC key dismissal and focus management.
extensions/amp-audio, extensions/amp-lightbox, extensions/amp-twitter · high confidence
amp-position-observer extension introduces scroll-linked animation support and visibility events
The amp-position-observer extension is now available, allowing elements to trigger enter, exit, and scroll events based on their visibility within the viewport. This enables scroll-linked animations and interactive behaviors that respond to user scrolling. The extension includes logic to handle viewport changes, such as mobile address bar resizing, by ignoring small viewport height changes below a 150-pixel threshold to prevent animation jumps. It supports a 'once' attribute to trigger events only on the first iteration of visibility.
extensions/amp-position-observer/0.1 · high confidence
amp-script: New examples and canvas support
The examples/amp-script directory now includes a comprehensive demo page (example.amp.html) showcasing amp-script capabilities such as DOM manipulation, long tasks, localStorage access, and amp-state integration. A new canvas example (canvas.js) demonstrates 2D canvas rendering within amp-script. Additionally, a sandboxed example (example.sandboxed.amp.html) and export-functions.js illustrate how sandboxed scripts can export functions and access storage without CSP hashes. The directory also features TodoMVC implementations using both vanilla JS (todomvc.amp.html, todomvc.ssr.js) and Vue.js (vue-todomvc.amp.html, vue-todomvc.js), providing reference implementations for complex interactive apps.
examples/amp-script · high confidence
amp-video extension initialization and documentation
This change introduces the foundational structure for the amp-video extension, including the OWNERS file, comprehensive usage documentation (amp-video.md), and validation rules (validator-amp-video.protoascii). The documentation covers standard HTML5 video replacement usage, Bento standalone API interactions (play, pause, mute, etc.), and supported attributes like src, controls, and crossorigin. The validation rules define the component's behavior in regular AMP documents, amp-story-page-attachments, and amp-story contexts, specifying supported layouts, attribute constraints (e.g., mandatory autoplay in amp-story), and deprecations (e.g., controls in amp-story).
extensions/amp-video · high confidence
amp-youtube 1.0 specification and documentation added
This change introduces the formal specification, validation rules, and documentation for the \amp-youtube\ 1.0 version. It defines the validator rules in \validator-amp-youtube.protoascii\, establishing \1.0\ as the new supported version with \bento\_supported\_version\ enabled, while marking the previous \0.1\ version as deprecated. The \amp-youtube.md\ file provides updated usage instructions, including examples for standalone Bento usage and the component's API (play, pause, mute, etc.), and notes that the \1.0\ version handles the \controls\ attribute directly rather than converting \data-param-controls\.
extensions/amp-youtube · high confidence
Removals
Removal of the amp-redbull-player extension
The amp-redbull-player extension has been removed from the codebase. The source file for the extension is now empty, indicating that the Red Bull video player component is no longer available for use in AMP pages.
extensions/amp-redbull-player · high confidence
Removal of the deprecated amp-extended-sample extension
The \amp-extended-sample\ extension, which previously simulated a slow network load by delaying content rendering for two seconds, has been removed from the codebase. This sample component is no longer needed as it has been superseded by real extended components.
extensions/sample · high confidence
Removed obsolete AMP component fixture
The \fixtures/components.html\ test fixture has been deleted. This file previously contained a sample AMP HTML page used for testing component rendering and layout behaviors; its removal indicates that this specific test case is no longer required or has been superseded by other fixtures.
fixtures · high confidence
amp-slides extension removed
The \amp-slides\ extension implementation has been removed from the codebase. The file \extensions/amp-slides/0.1/amp-slides.js\, which previously contained the logic for the slide viewer component including swipe recognition, navigation buttons, and transition animations, has been deleted. Users relying on this extension will no longer have access to the \amp-slides\ component functionality.
extensions/amp-slides/0.1 · high confidence
amp-slides extension removed and deprecated
The \amp-slides\ extension has been removed from the codebase. Users relying on this component should migrate to \amp-carousel\ using the \type="slides"\ attribute, as detailed in the new deprecation notice. The extension's validator rules have been updated to reflect this deprecation, ensuring that while existing pages using the deprecated script tag continue to function, they are flagged for migration.
extensions/amp-slides · high confidence
Architecture
Ads directory restructured with new configuration and linting infrastructure
The \ads/\ directory has been reorganized to improve maintainability and reduce merge conflicts. A new \.eslintrc.js\ file has been added to configure linting rules specifically for the ads codebase, and an \OWNERS\ file has been introduced to define review responsibilities for the \wg-ads-reviewers\ team. The legacy \ads.js\ and \twitter.js\ files have been removed, as Twitter is no longer treated as an ad network. New configuration files, including \\_a4a-config.js\ for A4A (AMP Ads for AMPHTML pages) support and \\_config.js\ for ad network settings, have been added to centralize ad network definitions and A4A predicates. Documentation has also been updated with a new \README.md\ detailing integration guidelines and an \\_integration-guide.md\ for developers.
ads · high confidence
Consolidation of core runtime modules into src/core
The runtime's foundational modules—including third-party frame messaging, sandbox flag definitions, assertion logic (dev and user modes), context management, and various constants (actions, events, signals, consent, loading, visibility)—have been moved into the new \src/core\ directory. This reorganization centralizes core infrastructure, enabling stricter import restrictions and improved TypeScript type-checking across the codebase.
src/core · high confidence
Establish build and ownership structure for AMP extensions
The extensions directory is now a standalone Bazel workspace, introducing BUILD and WORKSPACE files that define public visibility, aggregate validator protoascii sources, and collect test data. An OWNERS file is added to enforce code-review policies, granting ownership to the wg-components working group and specific individuals for player-related components. Additionally, a README.md is created to document the distinction between extended components and templates, providing usage examples for including scripts and linking to the official component list and template specification.
extensions · high confidence
Introduce Bazel build system for the AMP Validator
The AMP Validator now uses Bazel as its primary build system, replacing previous build methods. This change introduces \WORKSPACE\ and \BUILD\ files for the validator root and the C++ engine, along with \.bazelrc\ configuration files that set C++17 standards and compiler flags. The build configuration pulls in dependencies such as Abseil, GoogleTest, Protocol Buffers, RE2, and Emscripten via \http\_archive\, enabling consistent compilation of the C++ validator engine and its tests.
validator · high confidence
Introduce centralized test configuration and linting rules
The \build-system/test-configs\ directory now contains the authoritative configuration for the project's test and linting infrastructure. This includes a new \karma.conf.js\ that standardizes the test runner environment (using \karma-esbuild\ and \spec\ reporters), a \config.js\ that defines file patterns for unit, integration, and e2e tests, and a \dep-check-config.js\ that enforces strict dependency boundaries between core, extensions, ads, and third-party code. Additionally, \forbidden-terms.js\ and \.eslintrc.js\ centralize linting rules to enforce terminology standards (e.g., \allowlist\/\denylist\) and prevent usage of deprecated APIs, while \OWNERS\ files establish code ownership for these critical build and test configurations.
build-system/test-configs · high confidence
New compile subdirectory structure and build configuration
The build-system/compile area now contains a dedicated set of files that define how AMP binaries are compiled and bundled. This includes a new OWNERS file to manage code review responsibilities for the compile directory, a build-compiler.js script to produce the compiler.js binary using esbuild, and build-constants.js to manage build-time flags like IS\_PROD and IS\_MINified. The bundles.config.js and bundles.config.extensions.json files now explicitly define the JS bundle targets (such as amp.js, bento.js, and various extension bundles) and their associated metadata, while bundles.legacy-latest-versions.jsonc maintains the mapping for deprecated '-latest' binaries. Additionally, compile-wrappers.js provides the logic for wrapping extension code, internal-version.js handles the generation of the 13-digit runtime version based on cherry-picks, and helper utilities like debug-compilation-lifecycle.js, helpers.js, log-messages.js, and sanitize.js support debugging, sourcemap handling, and output sanitization.
build-system/compile · high confidence
Restructure amp-ima-video implementation and ownership
The amp-ima-video component's implementation files have been reorganized to support Bento and core component ownership, including the introduction of a dedicated ImaPlayerData class for tracking video state and the migration of style and DOM helpers to core utilities. Additionally, the component's repository ownership has been updated to include the wg-components and wg-monetization working groups.
ads/google/ima · high confidence
amp-analytics extension refactored into modular service-based architecture
The \<amp-analytics\> extension has been restructured from a single monolithic file into a modular, service-oriented architecture. This change introduces dedicated modules for core capabilities: an Activity service for tracking user engagement time, a CookieWriter for managing analytics cookies, a SessionManager for session tracking, and a LinkerManager for cross-domain linking. The configuration loading logic has been extracted into a dedicated config module, and event handling is now managed through specialized trackers (e.g., ClickEventTracker, VisibilityTracker) within an AnalyticsGroup. This refactoring improves maintainability and allows for more granular control over analytics features like consent, session ID, and cookie expiration.
extensions/amp-analytics/0.1 · high confidence
Behavioural changes
2 commits (0 fixes) modifying build-system/babel-plugins/babel-plugin-jsx-style-object
A change to existing behaviour in build-system/babel-plugins/babel-plugin-jsx-style-object — 2 commits, 14 files.
build-system/babel-plugins/babel-plugin-jsx-style-object · medium confidence · unverified
AMP \<amp-vimeo\> now requires the Bento experiment to be enabled
The AMP Vimeo extension (version 1.0) has been updated to rely on the Bento architecture. As a result, the component will no longer function unless the 'bento' or 'bento-vimeo' experiment flag is enabled in the user's browser. This change introduces new base classes and CSS styles specific to the pre-upgrade state, ensuring the element displays correctly while the experiment is active.
extensions/amp-vimeo/1.0 · high confidence
AMP Facebook extension v1.0 now supports comments, likes, and pages in a single binary
The \extensions/amp-facebook/1.0\ extension has been updated to consolidate support for \amp-facebook\, \amp-facebook-comments\, \amp-facebook-like\, and \amp-facebook-page\ into a single extension binary. This change introduces a shared base class (\AmpFacebookBase\) and specific subclasses for each variant, allowing all four Facebook embed types to be served from the same versioned endpoint. The update also includes pre-upgrade CSS styles to ensure proper layout and visibility before the component initializes, and relies on the Bento experiment flags for layout support validation.
extensions/amp-facebook/1.0 · high confidence
AMP Form extension ownership and documentation structure established
The \amp-form\ extension now has a dedicated OWNERS file that assigns the \ampproject/wg-components\ team as the primary owners, while specifically routing changes to validator files (\validator-\*.protoascii\) to the \ampproject/wg-amp4email\ team for notification. This change also introduces the initial \amp-form.md\ documentation and \validator-amp-form.protoascii\ specification, formally defining the extension's supported formats (websites, ads, email, stories), allowed input types (including \password\ and \file\ for POST forms in non-email contexts), and response handling attributes (\submit-success\, \submit-error\, \submitting\).
extensions/amp-form · high confidence
AMP Inline Gallery extension now requires Bento experiments to be enabled
The \amp-inline-gallery\ extension (version 1.0) and its subcomponents (\amp-inline-gallery-pagination\, \amp-inline-gallery-thumbnails\) now enforce that either the global \bento\ experiment or the specific \bento-inline-gallery\ experiment is enabled before they will render. This change, visible in the new JavaScript entry points and CSS files in \extensions/amp-inline-gallery/1.0\, ensures that the underlying Bento-based implementation is properly initialized. Users relying on this extension must ensure their environment has the appropriate experiment flags active, as the components will otherwise assert and fail to load.
extensions/amp-inline-gallery/1.0 · high confidence
AMP JW Player extension now supports Bento component integration
The \amp-jwplayer\ extension (version 1.0) has been updated to integrate with the Bento web component architecture. This change introduces a new \AmpJwplayer\ class that extends the Bento base element, enabling the AMP component to leverage Bento's native custom elements and pre-upgrade styles. The extension now handles consent retrieval by passing policy state, info, and metadata to the underlying Bento player via \consentParams\. Users benefit from improved interoperability with the Bento ecosystem, including support for the new \bento-jwplayer\ web component API and standardized layout styles, while maintaining backward compatibility through the existing \amp-jwplayer\ tag.
extensions/amp-jwplayer/1.0 · high confidence
AMP Lightbox 1.0 now integrates browser history for back-button support
The \amp-lightbox\ component (version 1.0) has been updated to use the AMP history service, allowing users to close the lightbox by pressing the browser's back button. When the lightbox opens, a history entry is pushed that triggers the close action; this entry is removed when the lightbox closes or unmounts. This behavioral change is implemented in the new \amp-lightbox.js\ file, which also includes CSS styles in \amp-lightbox.css\ to handle the hidden state and pre-upgrade visibility.
extensions/amp-lightbox/1.0 · high confidence
AMP Social Share now responds to attribute changes via MutationObserver
The \amp-social-share\ component now dynamically updates its behavior and styling when its attributes (such as \type\, \data-target\, or \data-param-\*\) are changed after initial load. This is achieved by implementing a \MutationObserver\ in the JavaScript logic, which detects attribute mutations and re-renders the share button with the new configuration, allowing developers to switch share providers or parameters without reloading the page.
extensions/amp-social-share/1.0 · high confidence
AMP Story Auto Ads localization files migrated to JSON
The localization resources for the AMP Story Auto Ads extension (version 0.1) have been converted from their previous format to individual JSON files. This change introduces a new structure where each supported language (such as English, German, French, and others) is now represented by a dedicated \.json\ file in the \\_locales\ directory, containing the translated strings for ad call-to-action buttons. An \index.js\ file has also been added to import and export these localized strings, ensuring the extension can correctly display translated text for actions like "Book," "Buy Tickets," and "Install Now" in the user's preferred language.
_extensions/amp-story-auto-ads/0.1/\locales · high confidence
AMP Story documentation and validation structure reorganized
The AMP Story extension's documentation has been split from a single large file into multiple component-specific pages (amp-story, amp-story-page, amp-story-grid-layer, amp-story-page-attachment, amp-story-page-outlink, amp-story-cta-layer, amp-story-animation, amp-story-analytics, and amp-story-ads), and a new OWNERS file has been added to define repository access rules for the extension.
extensions/amp-story · high confidence
AMP Story localization files migrated to JSON format
The localization strings for AMP Story have been migrated from their previous format to individual JSON files (e.g., en.json, de.json) within the \_locales directory. This change introduces a structured format where string IDs map to objects containing the translated text and, for English, descriptive metadata. A new README.md file has been added to document the supported languages, fallback mechanisms, and the process for contributors to add or update translations. This affects how localized UI text is stored and maintained for the AMP Story extension.
_extensions/amp-story/1.0/\locales · high confidence
AMP animation parsers are precompiled from Jison source files
The CSS expression and keyframe extraction parsers in the AMP animation extension are now built from Jison grammar definitions (css-expr-impl.jison) rather than being shipped as pre-generated JavaScript. This change introduces a new build step that compiles the Jison grammar into the parser modules (css-expr-ast.js, css-expr.js) at build time, allowing the animation system to parse CSS expressions and extract keyframes from stylesheets more efficiently and with updated grammar support.
extensions/amp-animation/0.1/parsers · high confidence
AMP development server restructured with new modular components and lazy-build support
The \build-system/server\ directory has been reorganized into a modular architecture, introducing dedicated files for CORS handling (\amp-cors.js\), serve mode management (\app-utils.js\), and lazy compilation of JavaScript and extensions (\lazy-build.js\, \typescript-compile.js\). The main application entry point (\app.js\) now integrates a new server router and supports dynamic serve modes (default, minified, ESM, CDN, RTV). Additionally, the server now includes specific test utilities such as a request bank for synchronizing HTTP requests (\amp4test.js\), a video test bench (\app-video-testbench.js\), and a reCAPTCHA mock router (\recaptcha-router.js\), while removing legacy test server logic in favor of the new in-process Express setup.
build-system/server · high confidence
AMP video element now requires Bento experiments to be enabled
The amp-video extension (version 1.0) has been refactored to inherit from the Bento video base element, introducing a new runtime requirement: the 'bento' or 'bento-video' experiment flags must be enabled for the component to function. The JavaScript implementation now explicitly checks for these experiments in its layout support logic, and the extension registers the element using the new base class. Additionally, pre-upgrade CSS styles have been added to ensure correct display and child element hiding before the component is fully built.
extensions/amp-video/1.0 · high confidence
Add OWNERS file and internal metadata modules for Babel plugins
This change introduces an OWNERS file to define review responsibilities for the build-system/babel-plugins directory, assigning oversight to the wg-infra and wg-performance working groups. It also adds several internal JavaScript modules: log-module-metadata.js, which defines metadata for transformable logging methods; static-template-metadata.js, which maps static template factory functions like htmlFor and svgFor; and testSetupFile.js, which configures the Jest test timeout. These additions support the infrastructure and testing of the Babel plugins without altering their runtime behavior.
build-system/babel-plugins · high confidence
Add amp-toolbox-cache-url and update Caja HTML sanitizer
The third\_party directory now includes the amp-toolbox-cache-url library, which provides functions to translate origin URLs to AMP Cache URLs and generate cache subdomains. Additionally, the Caja HTML sanitizer has been updated with local modifications to export as an ES6 module, accept bracketed attribute names for amp-bind compatibility, and allow the \<template\> tag and source::src attribute.
_third\party · high confidence
AddThis extension introduces content classification and anonymous mode support
The AddThis extension now classifies page content to detect adult material and supports a new anonymous mode for WordPress integrations. The \classify.js\ utility scans page titles, hostnames, and meta tags to flag adult content, while \mode.js\ and \get-widget-id-overloaded-with-json-for-anonymous-mode.js\ enable configuration overrides via data attributes when no publisher ID is present. Additional utilities handle URL fragment parsing, CUID generation, and pixel tracking to support these features.
extensions/amp-addthis/0.1/addthis-utils · high confidence
Added OWNERS file to Classic extension template
The Classic extension template now includes an OWNERS file that designates the amp-github-apps wg-components team as the owners. This ensures that new extensions generated from this template automatically inherit the correct ownership rules for code review and access control.
build-system/tasks/make-extension/template/classic/extensions/amp-\\_component\_name\hyphenated\\_ · high confidence_
Added OWNERS files for amp-auto-lightbox and amp-image-viewer extensions
New OWNERS files have been added to the amp-auto-lightbox and amp-image-viewer extension directories. These files define the ownership rules for the respective extensions, assigning ownership to the 'ampproject/wg-components' working group, which establishes the review and maintenance structure for these components.
extensions/amp-auto-lightbox, extensions/amp-image-viewer · high confidence
Added golden CSS baseline for build verification
A new golden CSS file has been added to the build-system tasks to serve as a reference output for verifying CSS transformations. This file captures the expected styles generated by the build process, allowing developers to detect regressions in CSS output by comparing current builds against this baseline.
build-system/tasks/create-golden-css · high confidence
Automatic SVG namespace injection in JSX
A new Babel plugin (\babel-plugin-dom-jsx-svg-namespace\) automatically adds the \xmlns\ attribute to SVG elements (such as \\<svg\>\, \\<path\>\, \\<circle\>\) during the build process. This ensures that SVG DOM nodes are created with the correct namespace when using the \core/dom/jsx\ runtime, preventing rendering issues in browsers that require explicit namespace declarations. The transformation only applies to files importing from \core/dom/jsx\ and respects existing \xmlns\ props.
build-system/babel-plugins/babel-plugin-dom-jsx-svg-namespace · high confidence
Babel configuration is modularized and extended for React and SSR CSS
The build-system/babel-config directory has been restructured from a single configuration file into a modular system with separate config files for different build targets (minified, unminified, test, and React). This change introduces dedicated React build configurations that apply a \babel-plugin-react-style-props\ plugin, enabling proper handling of React-specific style attributes. Additionally, new SSR CSS configurations are added to support server-side rendering with CSS, allowing the build pipeline to correctly process styles in SSR contexts.
build-system/babel-config · high confidence
Bento version of amp-image-slider added
A new version 1.0 of the amp-image-slider component has been added, implementing the Bento architecture using Preact and Shadow DOM. This version introduces a new API with renamed attributes (such as display-hint-once replacing disable-hint-reappear) and supports custom labels and hints via slots. The component is gated behind the 'bento' and 'bento-image-slider' experiments and includes a seekTo action for programmatic control.
extensions/amp-image-slider/1.0 · high confidence
Centralized and tree-shakeable URL configuration
The \src/config/urls.js\ module now serves as the single source of truth for runtime URLs (such as CDN, third-party, and error reporting endpoints). These values are configurable at runtime via the \AMP\_CONFIG\ global or specific \\<meta\>\ tags, allowing for flexible deployment environments. Additionally, all exported constants are wrapped with \pure()\, enabling dead-code elimination to reduce bundle size when only a subset of URLs is used.
src/config · high confidence
Consolidate Google ad integrations into ads/google with deprecation of legacy DoubleClick
The legacy DoubleClick integration has been deprecated in favor of Fast Fetch, with the new \ads/google/doubleclick.js\ module now issuing a runtime error directing users to upgrade. To support this transition and unify code sharing, the repository has moved AdSense and DoubleClick implementations into the \ads/google\ directory, introducing \ads/google/utils.js\ for shared logic (such as multi-size dimension validation and matched content responsive height calculations) and \ads/google/adsense.md\ for updated AdSense configuration documentation. The \ads/google/OWNERS\ file establishes \ampproject/wg-ads-reviewers\ as the review group for this consolidated area.
ads/google · high confidence
Documentation and ownership updates for the fake ad network extension
The \amp-ad-network-fake-impl\ extension's internal documentation has been updated to clarify its usage for local testing and demos, specifically detailing the \srcdoc\ attribute for inlined creatives, the \a4a-conversion\ attribute for creative conversion, and the \checksig\ attribute for enforcing signature verification. Additionally, the extension's ownership file has been created or updated to assign review responsibilities to the \wg-ads-reviewers\ team.
extensions/amp-ad-network-fake-impl · high confidence
Enable TypeScript type checking in the build system
The build system now enforces strict TypeScript type checking on its JavaScript source files. This is achieved by introducing a \tsconfig.json\ configuration that enables \checkJs\ and strict mode options, alongside a \global.d.ts\ file to declare global variables and interfaces used across the build scripts. Additionally, an \OWNERS\ file has been added to define repository ownership rules for the build-system directory, and the ESLint configuration has been migrated to a \.eslintrc.js\ format to support the new linting and type-checking setup.
build-system · high confidence
Expanded HTML allowlist for unescaped Mustache templates
The AMP Purifier now permits additional HTML tags within unescaped triple-brace Mustache syntax (e.g., {{{variable}}}). For standard AMP pages, the allowlist includes structural and semantic elements such as \\<dl\>\, \\<dt\>\, \\<dd\>\, \\<col\>\, \\<colgroup\>\, and \\<amp-img\>\. A separate, stricter allowlist is applied specifically for the AMP4Email format to address its distinct security requirements. This change allows developers to use these tags in dynamic content without them being stripped by the sanitizer.
src/purifier · high confidence
Inline isEnumValue checks for smaller, faster runtime code
The build system now includes a Babel plugin that transforms \isEnumValue(enum, value)\ calls into direct equality checks (e.g., \value === 'A' \|\| value === 'B'\). This optimization removes the overhead of the runtime helper function by inlining the specific enum values at compile time, resulting in smaller and faster generated code for applications using static enums.
build-system/babel-plugins/babel-plugin-transform-inline-isenumvalue · high confidence
IntersectionObserver polyfill now supports cross-origin iframes
The amp-intersection-observer-polyfill extension has been updated to provide universal support for IntersectionObserver within cross-origin iframes, such as those in the inabox runtime. This change introduces a new cross-origin observer mechanism that establishes messaging between the iframe and its parent window to synchronize viewport and target positions, ensuring accurate intersection detection even when the polyfill runs in a different origin context. Users relying on IntersectionObserver inside cross-origin AMP iframes will now see correct behavior without manual workarounds.
extensions/amp-intersection-observer-polyfill · high confidence
Introduce TypeScript-based AMP Server-Side Rendering compiler
The compiler module has been rewritten in TypeScript to support server-side rendering of AMP components. This change introduces a new \buildDom\ interface that components must implement to enable SSR, separating DOM creation from side effects. The compiler now uses a versioned builder map to manage component-specific rendering logic, allowing components like \amp-layout\, \amp-fit-text\, and \amp-carousel\ to be rendered on the server without JavaScript. The entry point exposes a \compile\ function that accepts component versions and document nodes, returning the server-rendered AST.
src/compiler · high confidence
Introduce amp-facebook v1.0 with unified embedding and legacy deprecation
This change introduces version 1.0 of the \amp-facebook\ extension, consolidating the ability to embed Facebook posts, videos, and comments into a single component (\\<amp-facebook\>\) while deprecating the previous 0.1 version. The validator specification now defines \amp-facebook 1.0\ as the active standard, excluding the legacy 0.1 script, and establishes specific sub-components like \\<amp-facebook-comments\>\, \\<amp-facebook-like\>\, and \\<amp-facebook-page\>\ that require the new 1.0 extension. Documentation has been updated to reflect these capabilities, including attributes for embedding specific content types and supporting Bento standalone usage.
extensions/amp-facebook · high confidence
Introduce amp-timeago v1.0 with Bento architecture and timeago.js integration
The amp-timeago extension is updated to version 1.0, migrating to the Bento component architecture and replacing the previous implementation with the timeago.js library. This change introduces a new Web Component (\\<bento-timeago\>\) that supports multi-attribute date bindings (datetime, timestamp-ms, timestamp-seconds, offset-seconds) and expands locale support to 46 languages via the timeago.js ecosystem. The component now utilizes Preact for rendering, includes IntersectionObserver for lazy initialization, and provides specific CSS for pre-upgrade layout stability.
extensions/amp-timeago/1.0 · high confidence
Introduce amp-video-iframe v1.0 with new validation rules and attributes
The \amp-video-iframe\ extension now supports version 1.0 alongside the legacy 0.1, introducing stricter validation rules and new capabilities. The validator protoascii defines v1.0 as the new standard, adding support for the \\[src\]\ bindable attribute, the \data-param-\\ attribute for passing custom query parameters to the iframe, and the \dock\ attribute (requiring \amp-video-docking\). It also enforces that the \src\ must use HTTPS and excludes the \\\_amp\_source\_origin\ value. Documentation and ownership files are added to support this new component version.
extensions/amp-video-iframe · high confidence
Introduce dedicated E2E test infrastructure with Selenium and custom assertion wrappers
The E2E testing system has been restructured into a dedicated \build-system/tasks/e2e\ module, replacing the previous Gulp-based setup with a native AMP task runner implementation. This change introduces Selenium WebDriver as the core browser automation engine, supporting Chrome, Firefox, and Safari, and includes a custom \ControllerPromise\ class to enable implicit polling and asynchronous assertions within the Chai test framework. The new infrastructure provides robust debugging capabilities via a REPL-like interface, supports multiple document environments (single, viewer, shadow DOM, and AMPHTML ads), and includes built-in network logging and coverage reporting to improve test reliability and developer experience.
build-system/tasks/e2e · high confidence
Introduce dedicated Storybook environments for AMP, Preact, and React
The Storybook build configuration has been restructured into three distinct environments (AMP, Preact, and React) located in \build-system/tasks/storybook/env\. This change provides isolated configurations for each framework: the AMP environment targets \.amp.js\ stories with specific viewport and controls addons; the Preact environment maps React imports to Preact via webpack aliases and includes CSS handling; and the React environment resolves component imports to their built React bundles (\dist/component-react.max.js\) and applies the standard React Babel configuration. A shared utility for static directory resolution is also introduced to support these environments.
build-system/tasks/storybook/env · high confidence
JSS classnames are now deterministic and Windows-compatible
The Babel plugin for transforming JSS files now generates stable, deterministic classnames by hashing the file path using SHA-256, ensuring that classnames remain consistent across builds and environments. This change also fixes a Windows-specific issue by normalizing file paths to POSIX separators before hashing, preventing class name mismatches on Windows systems.
build-system/babel-plugins/babel-plugin-transform-jss · high confidence
Lightbox gallery swipe now dismisses the gallery
The user experience for the lightbox gallery has changed: swiping on the gallery now dismisses it, replacing the previous behavior where swiping navigated between images. This applies to the lightbox gallery component within the src area.
src · high confidence
Local server remaps CDN URLs to local paths for development
The new server's CDN transform now rewrites \\<script src\>\ and \\<link href\>\ attributes that point to the public CDN into local paths (e.g., \/dist/...\) when running locally. This allows developers to test pages using local assets instead of fetching from the live CDN. The transform supports options to enforce strict origin checks or use a loose check, and can append \.max\ suffixes to non-CSS filenames for cache-busting or naming conventions, while correctly preserving query strings, fragments, and file extensions like \.mjs\ or \.sxg\.
build-system/server/new-server/transforms/cdn · high confidence
Minified build output now features compacted copyright comments
The build process now uses a new Babel plugin to ensure that copyright and license comments in minified JavaScript output are condensed into single-line strings. This reduces the file size of the final bundle by removing unnecessary whitespace and line breaks from these notices, while preserving the legal text itself.
build-system/babel-plugins/babel-plugin-transform-minified-comments · high confidence
New \`amp release\` task runner implementation
The build system now uses a new \amp release\ task runner (replacing the previous Gulp-based approach) to manage AMP distribution builds. This change introduces a new \build-system/tasks/release/index.js\ module that handles flavor discovery (base, experimental, and custom), channel configuration (stable, beta, nightly, etc.), and artifact packaging. It also adds static support files like \ping.html\ and a preconnect polyfill placeholder to the release output.
build-system/tasks/release · high confidence
New animation runner architecture with Safari/Edge resume fix
The animation runner system has been restructured into a new base class and specialized implementations (NativeWebAnimationRunner, ScrollTimelineWorkletRunner) to support both standard Web Animations and ScrollTimeline-based animations. A key behavioral improvement in the native runner addresses a bug where animations in Safari and Edge would fail to resume; the code now explicitly handles the PENDING play state to ensure animations start correctly even when the browser reports a stuck state. Additionally, a utility function was added to calculate total animation duration, enabling relative seeking within finite timelines.
extensions/amp-animation/0.1/runners · high confidence
New development server with optional HTML transformation and CORS support
A new Express-based router has been added to the build-system server to serve example HTML files. This server now supports an optional transformation pipeline via the \transform\ query parameter (e.g., \?transform=0\ or \?transform=false\ allows skipping transformation for testing nomodule versions). It also handles CORS headers when the \\_\_amp\_source\_origin\ query parameter is present, and gracefully logs errors if the transformation pipeline fails, ensuring the server remains stable even when HTML processing encounters issues.
build-system/server/new-server · high confidence
New draggable drawer and inline UI for AMP Story page attachments
The \amp-story-page-attachment\ component now features a redesigned user interface with a draggable drawer for inline attachments and a dedicated open-attachment UI for outlinks. This change introduces a new \DraggableDrawer\ base class that handles swipe-to-open gestures, sticky headers, and smooth CSS transitions for both mobile and desktop layouts. The visual presentation includes a new header with a close button and domain label, support for light and dark themes, and animated progress bars for remote outlinks. Additionally, inline attachments now display a chip-based UI with optional images and labels, while form submissions within attachments show styled success/error status indicators.
extensions/amp-story-page-attachment · high confidence
New extensible loader extension with delayed, animated SVG spinner
The \extensions/amp-loader/0.1\ extension introduces a new loader implementation that replaces the previous inline logic. It features a 600ms delay before the loader appears, offset by the extension's load time to minimize perceived latency. The visual indicator is now a custom SVG spinner with CSS-driven animations (fade-in, scale, and spin) instead of the previous spinner generator. The loader supports different sizes (default, small, large) based on the element, includes a background shim for contrast, and allows for custom logos and colors. This change moves the loader code out of the core runtime, allowing pages to load the runtime without incurring the cost of the loader code until it is actually needed.
extensions/amp-loader/0.1 · high confidence
New linting rules for static JSX templates and test assertions
The \build-system/eslint-rules\ directory now includes several new custom ESLint rules to enforce stricter coding standards. The \core-dom-jsx\ rule restricts JSX usage within \core/dom/jsx\ imports to static templates, forbidding fragments, dynamic spread attributes, and unsafe element types to prevent script injection risks. The \always-call-chai-methods\ rule ensures Chai assertion methods are invoked with parentheses, while the \await-expect\ rule mandates that \expect\ calls in end-to-end tests are properly awaited. Additionally, the \no-deep-destructuring\ rule has been updated to allow array destructuring patterns, and the \no-duplicate-import\ rule now includes an automatic fixer to merge duplicate imports.
build-system/eslint-rules · high confidence
Optimized HTML template literal transpilation with deduplication
The build system now includes a Babel plugin that transforms \html\ and \svg\ tagged template literals by minifying the content (removing whitespace, comments, and unnecessary quotes) and hoisting identical templates to the program scope. This ensures that duplicate templates are not added to the bundle multiple times, reducing payload size and improving runtime performance by reusing a single hoisted constant for repeated template definitions.
build-system/babel-plugins/babel-plugin-transform-html-template · high confidence
React import remapping via internal Preact exports
The \src/react\ module now re-exports Preact and Preact Compat as a drop-in replacement for React. This allows external libraries that import from 'react' to automatically resolve to the internal Preact implementation, enabling compatibility with React-based code without requiring changes to the consuming library's import statements.
src/react · high confidence
Remove dev and user logging calls from ESM production builds
A new Babel plugin, babel-plugin-transform-dev-methods, has been introduced to strip specific logging calls from the final ESM output. When the build process detects imports of 'dev' or 'user' from the '/log' utility, this plugin automatically removes any subsequent calls to their 'info', 'fine', or 'warn' methods. This ensures that development and user-facing diagnostic logs are excluded from production bundles, reducing payload size and preventing console noise in deployed applications.
build-system/babel-plugins/babel-plugin-transform-dev-methods · high confidence
Restored blank page for visual diff testing
The blank.html file has been restored in the visual-tests directory, ensuring that the blank page asset is available for visual diff tests.
examples/visual-tests/blank-page · medium confidence
Restructure 3p iframe integration with new AmpContext and messaging infrastructure
The 3p directory has been reorganized to introduce a dedicated AmpContext implementation for third-party iframes, including new files like ampcontext.js, ampcontext-integration.js, and ampcontext-lib.js, alongside a new amp-script-proxy-iframe.js for handling script worker communication. Core utility functions have been consolidated into 3p.js, and a new .eslintrc.js configuration has been added to the 3p folder. Existing integrations such as beopinion, bodymovinanimation, embedly, and facebook have been updated to use this new context and messaging infrastructure, while environment.js now includes instrumentation for managing iframes and throttling timers.
3p · high confidence
Safe conversion of function declarations and expressions to arrow functions
The build system now includes a Babel plugin that automatically transforms simple function declarations and expressions into arrow functions during compilation. This optimization applies only when the function has a single return statement, does not use the \arguments\ object or \this\, is not a generator, and is not a named function used in ways other than direct calls. This change affects the output code structure for eligible functions, potentially impacting how \this\ binding behaves in edge cases where the original function's \this\ context was relied upon, although the plugin explicitly bails out in such scenarios.
build-system/babel-plugins/babel-plugin-transform-function-declarations · high confidence
Standardize Design Review issue generation via reusable template
The build system now uses a dedicated JavaScript template (design-review.js) to generate Design Review issue content, replacing previous ad-hoc or inline logic. This template defines the issue title, body, labels, and scheduling parameters (including a UTC time rotation for different global regions and a fixed session duration), ensuring consistent formatting and easier maintenance of the Design Review process.
build-system/common/update-session-issues/template · high confidence
Storybook demos for amp-facebook 1.0 now include both legacy AMP and Bento component variants
The Storybook configuration for the amp-facebook extension (version 1.0) has been updated to provide interactive examples for both the traditional AMP elements and the new Bento-based component. The \Basic.amp.js\ file demonstrates the legacy \\<amp-facebook\>\, \\<amp-facebook-comments\>\, \\<amp-facebook-like\>\, and \\<amp-facebook-page\>\ tags, including their specific attributes and placeholder/fallback handling. Concurrently, the new \Basic.js\ file showcases the unified \BentoFacebook\ component, which consolidates these use cases into a single API with props like \embedAs\, \href\, and \locale\. This allows developers to preview and test both implementation styles side-by-side within the Storybook environment.
extensions/amp-facebook/1.0/storybook · high confidence
Storybook stories for amp-brightcove 1.0 now include Bento component variants
The Storybook configuration for the amp-brightcove extension has been updated to showcase both the legacy AMP component and the new Bento-based implementation. A new Basic.amp.js file provides stories for the standard amp-brightcove tag, including examples with placeholder and fallback content, while a new Basic.js file introduces stories for the BentoBrightcove component, demonstrating its specific prop structure (videoId, player, account) and styling.
extensions/amp-brightcove/1.0/storybook · high confidence
Update OWNERS file for amp-animation-polyfill
The amp-animation-polyfill extension now includes an OWNERS file that designates the 'ampproject/wg-performance' working group as the responsible owners, aligning the repository's governance structure with recent working group changes.
extensions/amp-animation-polyfill · high confidence
Updated AMP extension generator templates
The \amp make-extension\ command now generates new template files for extension validation and documentation. Specifically, it includes a new \\_\validator\\-amp-\\_component\_name\hyphenated\\.protoascii\ file that defines the AMP validator rules (such as supported layouts and required attributes) for the generated component, and an updated \amp-\\_component\_name\hyphenated\\_.md\ documentation template that provides structured examples for usage, API interaction, and layout guidelines.
build-system/tasks/make-extension/template/shared/extensions/amp-\\_component\_name\hyphenated\\_ · high confidence_
Updated AMP extension template to use new layout enum and utility function
The generated AMP extension template now imports \Layout\_Enum\ and \applyFillContent\ from the core DOM layout module instead of using inline or legacy definitions. This change ensures that newly generated extensions adhere to the updated internal API for layout support checks and content filling, aligning the scaffold with the current core implementation.
build-system/tasks/make-extension/template/classic/extensions/amp-\\_component\_name\hyphenated\\/\\_component\version\\_ · high confidence_
Updated AMP extension template with language attribute
The HTML template used for generating classic AMP extensions now includes the lang="en" attribute on the root \<html\> element. This ensures that newly generated extension examples have proper language semantics, improving accessibility and SEO for users who scaffold new components using this template.
build-system/tasks/make-extension/template/classic/examples · high confidence
Updated extension scaffolding templates for Storybook and validator tests
The \make-extension\ build tool now generates updated template files for new AMP extensions. The Storybook template (\Basic.amp.js\) has been modernized to use aliased paths (e.g., \\#preact\) and leverages Storybook's \args\ API for component arguments, ensuring consistent preview setups. Additionally, the tool now automatically creates a validator test HTML file (\\_\validator\\-amp-\\_component\_name\hyphenated\\_.html\) with the \lang="en"\ attribute set on the root element, standardizing the initial test structure for new components.
build-system/tasks/make-extension/template/shared/extensions/amp-\\_component\_name\hyphenated\\/\\_component\version\\_ · high confidence_
Visual diff testing platform restructured with new configuration and development mode
The visual diff testing infrastructure has been reorganized into a modular structure under \build-system/tasks/visual-diff\, introducing a dedicated \.percy.yaml\ configuration file that defines snapshot widths (375px, 411px, 1400px) and network idle timeouts. A new \dev-mode.js\ module provides an interactive development environment for testing visual diffs, allowing developers to select webpages and run custom test functions with live CSS selector verification. The browser automation logic has been extracted into \browser.js\, which handles Chrome executable detection, Puppeteer launch options, and network request interception for mocking external resources. Additionally, the system now includes JSON network mocks for AMP ad verifying keys and Google Fonts, along with JavaScript snippets to freeze canvas images, wrap content in iframes for viewport-constrained testing, and remove AMP scripts and noscript tags to ensure cleaner visual snapshots.
build-system/tasks/visual-diff · high confidence
amp-ad extension refactored into modular components with sticky ad support
The amp-ad extension has been reorganized into distinct modules to improve maintainability and enable new ad behaviors. The main entry point (amp-ad.js) now handles the upgrade logic, deciding between Fast Fetch (A4A) and Delayed Fetch (3p) implementations. The 3p ad logic is split into amp-ad-3p-impl.js (core lifecycle), amp-ad-ui.js (UI handling for fallbacks, placeholders, and sticky ads), and amp-ad-xorigin-iframe-handler.js (cross-origin iframe communication). A new CSS file (amp-ad.css) introduces styling for sticky ads, including support for top, bottom, left, and right positions, with size limits (20% viewport height, 50% max height) and a close button. Concurrent loading is managed via concurrent-load.js, which throttles 3p ad loading. Legacy intersection observer support is maintained via legacy-ad-intersection-observer-host.js for backward compatibility with 3p ad iframes.
extensions/amp-ad/0.1 · high confidence
amp-anim rewritten to modernize lifecycle and improve accessibility
The amp-anim extension has been refactored to use the modern AMP component lifecycle (buildCallback, layoutCallback, unlayoutCallback) and new core utilities. For users, this means improved accessibility through the propagation of ARIA attributes (aria-label, aria-describedby, aria-labelledby) to the underlying image element, and a warning is now issued if role=img is manually set, as it breaks screen readers. The component now supports object-fit and object-position styles, uses async image decoding, and manages viewport visibility more efficiently by pausing animations when the element is out of view and releasing memory when unlayouted.
extensions/amp-anim/0.1 · high confidence
amp-animation extension restructured with Web Animation Service and polyfill management
The amp-animation extension has been refactored to introduce a dedicated WebAnimationService and a new polyfill installation mechanism (install-polyfill.js). This change ensures the Web Animations API polyfill is installed only when necessary, with specific logic to force the polyfill on Safari versions prior to 14 to address native implementation bugs. The core animation logic is now mediated through this service, which handles builder creation and resource loading, while the main component (amp-animation.js) manages visibility triggers, resize events, and action registration (start, pause, resume, etc.) using the new service infrastructure.
extensions/amp-animation/0.1 · high confidence
amp-brightcove extension upgraded to version 1.0 with Bento architecture support
The amp-brightcove extension has been updated to version 1.0, introducing a new implementation that leverages the Bento component architecture. This change adds specific CSS styles to ensure the player displays as a block-level element and hides non-placeholder children before the component is fully built. The JavaScript implementation now inherits from Bento base classes and enforces the requirement of the \data-account\ attribute. Additionally, the extension integrates with the consent management system by passing initial consent state and shared data to the player via URL parameters, and it requires the 'bento' or 'bento-brightcove' experiment to be enabled for layout support.
extensions/amp-brightcove/1.0 · high confidence
amp-carousel 0.1 rewritten with modular architecture and CSS scroll snap support
The amp-carousel 0.1 extension has been completely refactored from a single monolithic script into a modular structure comprising \build-dom.js\, \carousel-controls.js\, \scrollable-carousel.js\, and \slidescroll.js\. This change introduces a new DOM build system that generates controls and slide containers, replacing the previous inline style manipulation. It also adds support for CSS Scroll Snap via the \slidescroll\ implementation, which uses native browser snapping for smoother scrolling on supported devices, while maintaining a fallback for older browsers. The carousel now uses a dedicated \CarouselControls\ class to manage navigation button interactions, accessibility attributes, and hint animations, and includes specific handling for iOS versions to disable elastic scrolling where it causes jitters.
extensions/amp-carousel/0.1 · high confidence
amp-carousel 0.2 documentation and validation rules introduced
The \extensions/amp-carousel\ location now includes the reference documentation, analytics event definitions, and validator specifications for the new \amp-carousel\ 0.2 version. This update adds the \amp-carousel.md\ spec detailing usage, migration notes from 0.1, and accessibility considerations; \amp-carousel-analytics.md\ defining \amp-carousel-change\, \amp-carousel-next\, and \amp-carousel-prev\ triggers; and \validator-amp-carousel.protoascii\ registering the 0.2 extension version and its attributes (such as \delay\, \loop\, and \lightbox\) for AMP, AMP4ADS, and AMP4EMAIL formats. An \OWNERS\ file is also added to assign maintenance responsibilities to the \wg-components\ working group.
extensions/amp-carousel, extensions/amp-mustache · high confidence
amp-consent extension documentation and ownership structure introduced
The \amp-consent\ extension now includes its official documentation files (\amp-consent.md\, \integrating-consent.md\, \customizing-extension-behaviors-on-consent.md\) and a validator definition (\validator-amp-consent.protoascii\), establishing the reference for implementing consent flows, granular consent, and CMP integrations. Additionally, an \OWNERS\ file has been added to define the review process, assigning \ampproject/wg-ads-reviewers\ and \ampproject/wg-components\ as the responsible working groups.
extensions/amp-consent · high confidence
amp-date-countdown 1.0 stabilizes count-up attribute and adds when-ended support
The amp-date-countdown extension introduces version 1.0, which changes the count-up feature attribute from data-count-up to count-up for consistency, while retaining support for the legacy attribute name. This version also adds the when-ended attribute, allowing timers to continue running past zero instead of stopping, and officially supports the count-up direction for displaying elapsed time since a past date.
extensions/amp-date-countdown · high confidence
amp-date-picker version 0.1 release with new styling and attributes
The amp-date-picker extension has been updated to version 0.1, introducing a new default visual style defined in amp-date-picker.css (including specific overlay shadows and static borders) and supporting the \allow-blocked-end-date\, \minimum-nights\, and \maximum-nights\ attributes to control date selection constraints. The component now uses \react-dates\ for rendering, provides default styles for fullscreen and overlay modes, and includes logic to handle blocked dates and range limits via the \DatesList\ and wrapper components.
extensions/amp-date-picker/0.1 · high confidence
amp-fit-text 0.1 refactored to use build-dom and ResizeObserver
The amp-fit-text 0.1 extension has been significantly refactored to improve performance and reliability. The DOM structure is now built via a dedicated build-dom module, which introduces a hidden measurer element to accurately calculate font sizes. The component now uses ResizeObserver to automatically recalculate font sizes when the container or content changes, replacing previous manual layout triggers. Additionally, the component now supports reading and writing the textContent property directly, and it hides the content until the font size calculation is complete to prevent layout shifts.
extensions/amp-fit-text/0.1 · high confidence
amp-font extension marked as deprecated
The amp-font extension documentation and validator rules now explicitly mark the component as deprecated, advising users to switch to the CSS font-display descriptor instead. The extension remains available for legacy support but is no longer recommended for new implementations.
extensions/amp-font · high confidence
amp-form extension rewritten with new core services and UI components
The amp-form extension has been significantly refactored to improve reliability, performance, and developer experience. The form submission logic is now managed by a dedicated FormSubmitService, and validation is handled by a new FormValidator system that supports custom validation types (such as 'as-you-go' and 'show-all-on-submit') and provides better pattern matching for textareas. A new FormDirtiness service tracks field changes, automatically applying an 'amp-form-dirty' class and dispatching events when the form state changes. The extension now includes a new amp-form-textarea component that enables auto-expanding textareas via the 'autoexpand' attribute, and a ValidationBubble component that displays inline validation messages. Additionally, a FormProxy is installed on all forms to safely access DOM properties even when input names conflict with form API names.
extensions/amp-form/0.1 · high confidence
amp-iframe 1.0 specification and documentation added
This change introduces the formal specification and documentation for the experimental \amp-iframe\ version 1.0, marking it as a Bento-supported component. The new \validator-amp-iframe.protoascii\ file defines the validation rules for the 1.0 version, including supported attributes like \allow\, \referrerpolicy\, and \tabindex\, while keeping the legacy 0.1 version as deprecated. Accompanying documentation (\amp-iframe.md\ and \amp-iframe-vs-native-iframe.md\) explains the component's usage, security restrictions, dynamic resizing capabilities, and why it remains necessary compared to native iframes for features like consent data handling and cross-browser lazy loading. An \OWNERS\ file is also added to assign maintenance to the \ampproject/wg-components\ working group.
extensions/amp-iframe · high confidence
amp-instagram extension documentation and validation structure
This change introduces the foundational documentation, ownership, and validation rules for the amp-instagram extension. It adds an OWNERS file defining the responsible working groups, a markdown specification detailing the component's behavior (including automatic handling of Instagram's 'chrome' spacing around images) and attributes like data-shortcode and data-captioned, and a validator protoascii file that defines the amp-instagram 1.0 specification alongside the legacy 0.1 version, ensuring proper validation of the embed element's attributes and layout support.
extensions/amp-instagram · high confidence
amp-lightbox-gallery:1.0 adds browser history integration and analytics events
The \amp-lightbox-gallery\ extension now integrates with the AMP history service to manage browser back-button behavior, pushing a history entry when the lightbox opens and popping it when closed. Additionally, the component now triggers analytics events for key user interactions, specifically firing 'lightboxOpened' when the gallery opens, 'thumbnailsViewToggled' when the thumbnail grid is viewed, and 'descriptionOverflowToggled' when captions are toggled.
extensions/amp-lightbox-gallery/1.0 · high confidence
amp-selector 1.0 release with enhanced validation and documentation
The amp-selector extension introduces version 1.0, establishing a new validation schema that supports the \keyboard-select-mode\ attribute for improved accessibility and allows binding to the \disabled\ state. This release also includes comprehensive documentation covering usage, events (including \event.selectedOptions\), and the \clear\ action, alongside updated OWNERS configuration to reflect current working group responsibilities.
extensions/amp-selector · high confidence
amp-sidebar 1.0 release with autoscroll and toolbar support
The amp-sidebar extension has been updated to version 1.0, introducing support for the autoscroll attribute to automatically scroll to elements marked with autoscroll within the sidebar or toolbar, and enabling toolbar functionality that allows navigation elements to be duplicated and displayed in other parts of the page via media queries. The validator rules now explicitly define the 1.0 version alongside the deprecated 0.1 version, and the documentation has been refreshed to cover these new features, including usage in AMP4Email and amp-story contexts.
extensions/amp-sidebar · high confidence
amp-twitter component rewritten with new loader and preconnect logic
The amp-twitter component has been significantly refactored to use a new loader implementation and improved resource loading strategies. The JavaScript source now utilizes core DOM helpers and a new 3p-frame messaging system, replacing older patterns. A key behavioral change is the introduction of explicit preconnect and preload logic for Twitter domains (platform.twitter.com, syndication.twitter.com, pbs.twimg.com) to speed up embed rendering. The component now handles loading, success, and failure states more robustly, supporting placeholders and fallbacks as documented in the newly added amp-twitter.md specification file. The API surface remains compatible, requiring data-tweetid or data-momentid attributes.
extensions/amp-twitter/0.1 · high confidence
amp-youtube extension rewritten to use BaseElement and modern AMP patterns
The amp-youtube component has been significantly refactored to extend AMP.BaseElement instead of the legacy AMP.AmpElement, adopting modern AMP infrastructure such as the PauseHelper for viewport-based playback management and the VideoManager for standardized video events. This change introduces privacy-enhanced mode support via the credentials attribute (which appends -nocookie to the embed URL when set to 'omit'), improves autoplay handling by managing mute/unmute states internally rather than relying on YouTube's autoplay parameter, and adds support for live channel embedding via the data-live-channelid attribute. The component now also supports the dock attribute for video docking when amp-video-docking is present, and uses data-param-\* attributes to pass custom query parameters to the YouTube iframe while excluding autoplay and loop which are handled by AMP.
extensions/amp-youtube/0.1 · high confidence
Fixes
Add Storybook examples for amp-audio 0.1
Added a new Storybook file (Basic.amp.js) for the amp-audio 0.1 extension, providing visual parity examples for Safari. The file includes four story variants: a default layout, a fixed layout, a fixed-height layout, and a nodisplay layout with custom play/pause buttons.
extensions/amp-audio/0.1/storybook · medium confidence
Test coverage
Add CSS visual test for amp-fit-text and amp-truncate-text; Add E2E tests for amp-selector tabs with multi-version support; Add Storybook stories for amp-iframe sandbox security testing; Add e2e test for amp-story share menu link copying; Add unit and validator tests for amp-mustache 0.2; Add visual diff test for amp-user-notification; Add visual diff tests for amp-list; Add visual regression tests for AMP form submission states; Add visual regression tests for amp-autocomplete; Add visual test example for amp-sticky-ad; Add visual test for rotate-to-fullscreen behavior; Added E2E tests for amp-carousel 0.2 lightbox arrows and responsive slides; Added E2E tests for amp-lightbox and amp-lightbox with amp-autocomplete; Added e2e test fixture for amp-fit-text v2; Added e2e tests for allow-blocked-end-date behavior in amp-date-picker; Added e2e tests for amp-carousel 0.1 hidden controls and action trust levels; Added e2e tests for amp-lightbox-gallery open/close and carousel behavior; Added e2e tests for amp-positionobserver in AMPHTML ads; Added end-to-end test for amp-animation; Added end-to-end tests for AMP Story Auto Ads; Added end-to-end tests for AMP Story Player navigation and prerendering; Added end-to-end tests for AMP form validation and SSR rendering; Added end-to-end tests for amp-ad-exit extension; Added end-to-end tests for amp-consent client-side and server-side behaviors; Added end-to-end tests for amp-fit-text font sizing; Added end-to-end tests for amp-list load-more and SSR functionality; Added end-to-end tests for amp-sidebar behavior; Added end-to-end tests for amp-sidebar toolbar layout behavior; Added end-to-end tests for amp-sidebar version 1.0; Added end-to-end tests for amp-social-share v1.0; Added end-to-end tests for amp-video analytics, flexible bitrate, and autoplay; Added end-to-end tests for custom browser events and iframe transport; Added end-to-end tests for custom close button support; Added integration test for amp-accordion media attribute; Added integration test for amp-image-lightbox activation; Added integration test scaffolding for amp-bodymovin-animation; Added integration tests for AMP viewer messaging and handshake; Added integration tests for amp-form verification and submission behavior; Added integration tests for amp-fx-collection effects; Added integration tests for amp-script behavior; Added integration tests for amp-sidebar focus and scroll behavior; Added support for attribute prefixes in PreactBaseElement; Added test coverage for A4A ad rendering and validation; Added test coverage for amp-bind components; Added test coverage for babel-plugin-transform-function-declarations; Added test fixtures for AMP4Ads validation and serialization; Added test fixtures for JSS transform edge cases; Added tests for AMP Story interactive components; Added tests for AMP extension call transformation; Added tests for AMP server module transform logic; Added tests for Google Ads multi-size and matched content logic; Added tests for JSON import assertion handling and schema compilation; Added tests for JSS transform duplicate handling; Added tests for SmartAds ad network implementation; Added tests for amp-animation validation and CSS expression parsing; Added tests for amp-autocomplete initialization, bindings, and validation; Added tests for amp-base-carousel validation and runtime behavior; Added tests for amp-carousel 0.2 slides type and validator rules; Added tests for amp-date-countdown component; Added tests for amp-date-display 1.0 validation and rendering; Added tests for amp-date-display validation and functionality; Added tests for amp-experiment 1.0 validation and mutation logic; Added tests for amp-facebook 1.0 extension components; Added tests for amp-form textarea autoexpand, dirtiness, proxy, and validation; Added tests for amp-fx-collection validation and type logic; Added tests for amp-iframe v1.0 component and validator rules; Added tests for amp-inputmask validation and custom alias logic; Added tests for amp-jwplayer lazy loading and contextual search; Added tests for amp-lightbox-gallery:1.0; Added tests for amp-lightbox:1.0 validation and behavior; Added tests for amp-next-page configuration validation and component behavior; Added tests for amp-onat-google extension; Added tests for amp-position-validator; Added tests for amp-sidebar autoscroll and toolbar validation; Added tests for amp-sidebar v0.2 and toolbar functionality; Added tests for amp-social-share v1.0; Added tests for amp-timeago 1.0 component and validator rules; Added tests for amp-timeago component behavior and validation; Added tests for amp-video caching, flexible bitrate, and validation; Added tests for build-system server app-index utilities; Added tests for const-to-let transformation behavior; Added tests for dev-method transformation in ESM and non-module contexts; Added tests for fake ad network metadata and head transformation; Added tests for server-side URL replacement logic; Added tests for stringish literal transformation edge cases; Added tests for the ClickDelay filter's performance timing logic; Added tests for the HTML template tag transform plugin; Added tests for the amp-o2-player extension; Added tests for the extension generator template logic; Added tests for the markdown-toc task; Added unit and validation tests for amp-fit-text:1.0; Added unit and validator tests for amp-brid-player; Added unit and validator tests for the amp-gfycat extension; Added unit and validator tests for the amp-vimeo component; Added unit tests for A4A cookie, streaming, and experiment utilities; Added unit tests for A4A shared content recommendation and URL builder; Added unit tests for AMP viewer integration handlers; Added unit tests for AddThis utility functions; Added unit tests for NWS ad network configuration; Added unit tests for amp-ad extension components; Added unit tests for amp-auto-lightbox; Added unit tests for amp-carousel scrollable and slidescroll modes; Added unit tests for amp-loader initialization logic; Added unit tests for amp-script initialization, security checks, and user activation tracking; Added unit tests for amp-story 1.0 components; Added unit tests for amp-story-auto-ads extension; Added unit tests for amp-stream-gallery component; Added unit tests for the Adzerk ad network implementation; Added validation tests for amp-inline-gallery sub-components; Added validator tests and updated unit tests for amp-instagram; Added validator tests for amp-mraid in AMP4ADS; Added validator tests for amp-sticky-ad extension; Added visual diff test for access-controlled articles; Added visual regression test assets for amp-carousel; Added visual regression tests for amp-selector, lightbox gallery, and fade-in animations; Added visual regression tests for amp-video-docking; Added visual test for AMP Inabox with GPT; Added visual test for AMPHTML ad fallback behavior; Comprehensive test suite for amp-youtube validator and component behavior; End-to-end tests added for Bento Carousel 1.0; End-to-end tests for amp-script layout and mutation behaviors; Initial test coverage for amp-experiment extension; Initial test coverage for amp-subscriptions core components; Initial test coverage for amp-video-iframe; Initial test file for amp-image-slider component; Initial test suite for amp-accordion 0.1; Initial test suite for amp-auto-ads extension; Initial unit tests for AdSense ad network implementation and responsive state logic; Initial unit tests for amp-consent core components; Initial visual regression tests for amp-accordion; Integration tests for amp-date-picker actions and attributes; New end-to-end tests for amp-base-carousel 0.1; New testing infrastructure and developer tooling; New visual diff tests for AMP Story components and layouts; New visual regression tests for AMP Story Player controls and configurations; New visual test assets and helpers for AMPHTML ads (FIE and Inabox); New visual test fixture for article layout with app banner support; New visual test for AMP font loading behavior; Skip flaky end-to-end test for amp-subscriptions-google; Updated test template for generated AMP extensions.
Dependencies
Routine dependency updates across build and test tooling
This change updates a wide range of development dependencies across 25 manifests, including build tools (esbuild, rollup, babel, google-closure-compiler), linters (eslint, prettier, eslint-plugin-jsdoc), and test infrastructure (mocha, karma, puppeteer, selenium-webdriver, chromedriver). These updates ensure the build system and test suites remain compatible with current Node.js versions and incorporate upstream improvements and security patches.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 37 → 39 (+2.3)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 68 → 73 (+4.7)
- Architecture 76 → 81 (+4.8)
- Maturity 44 → 44 (-0.0)
- Readiness 34 → 40 (+6.2)
- Security 52 → 59 (+6.4)
- Accessibility 28 → 28 (+0.2)
- Performance 60 (new)
Resolved (5)
- Dependency hygiene PARTLY measured — npm pinning read, dependency currency not (no pnpm-resolved versions to grade)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- Medium: security finding (details withheld)
- Off-boarding risk: anonymized user #1
New (110)
- Documentation: written for insiders (build-system/tasks/sweep-experiments/README.md)
- Documentation: written for insiders (src/compiler/README.md)
- Duplicated block (13 lines × 2) (validator/build.py)
- Duplicated block (34 lines × 2) (validator/js/webui/main/serve.go)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (package-lock.json)
- High CVE: [GHSA redacted] (build-system/tasks/visual-diff/package-lock.json)
- Low cohesion: AmpRender (LCOM4 4) (extensions/amp-render/1.0/amp-render.js)
- Low cohesion: RuntimeTestConfig (LCOM4 6) (build-system/tasks/runtime-test/runtime-test-base.js)
- Low cohesion: StandardActions (LCOM4 4) (src/service/standard-actions-impl.js)
- Medium CVE: [GHSA redacted] (package-lock.json)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- …and 90 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
ampproject/amphtml was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 4e4d50186e2ec8dd33e9ce46e8386a6c4639bd02 — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.