Repository navigation
Releases
Releases · GoogleChrome/modern-web-guidance
v1.0.0
Release Notes: v1.0.0
Modern Web Guidance is out of preview! Version 1.0 ships 203 use-case guides covering 250 web platform features, and the project is now stewarded by the Google Chrome, Microsoft Edge, Mozilla Firefox, and MDN teams alongside the web development community. Per-agent and per-guide eval results are public on the new eval dashboard.
🛠️ CLI & Skill Updates
- Codebase modernization scanner (
legacy-scan):npx modern-web-guidance@latest legacy-scan [path]statically detects legacy web platform patterns and maps each finding to the guide with the modern replacement. It covers the roughly 20% of guides that have deterministic legacy rules today. The modern-web-guidance skill adds a matching 4-step workflow for agents: scan, verify, report, modernize. - Smaller, faster search: Search now runs on a zero-dependency embedding model plus BM25 instead of TensorFlow.js. It is still fully offline, and the npm download drops from 23.5 MB to 8.8 MB.
- Volatile feature opt-in (
set-allow-volatile-features): Guides for single-engine features that shipped in the last 3 months or are still stabilizing stay searchable, butretrieverequires an explicit.mwgrcopt-in, matching Origin Trial gating. - Search query refinement in
SKILL.md: Agents now translate implied intent into concrete UI primitives (for example,"confirmation modal dialog"instead of"confirm destructive action") and rephrase a weaksearchonce before falling back tolist.
🆕 New Guides
- UI components (8): accordion, app-menus, breadcrumbs, carousel, copy-button, navbar, tabs, toolbar
- UI behaviors (3): drag-and-drop (drag to rearrange a container's children), dynamic-sort (user-triggered reordering of lists, table rows, or card grids), sortable-table (sort rows by clicking column headers)
- Layout and UX (3): single-line-overflow (text that must stay on one line in a space it may not fit), form-factor-adaptation (layouts, controls, and text that adapt to any device or container), natural-interactions (hover, focus, and press feedback, motion that opens from its trigger, and swipeable content)
- PWA (1): install-web-app (in-page installs with the Web Install API)
🔄 Updated Guides
98 guides changed. The main themes:
- Accessibility review by human experts (nearly 70 guides)
- At least 3:1 contrast for non-text UI such as focus rings, icons, custom form controls, and scrollbar thumbs.
- Form errors are linked through
aria-describedbyonly while a field is invalid, and announced in a polite live region. - Swipe, pull, and drag gestures get button or keyboard alternatives.
- More guides cover reduced motion, forced colors, focus management, and zooming to 200%.
- Passkeys (7 guides): Pass the server-provided
rpIdto Signal API methods instead of deriving it fromwindow.location.hostname. - Discrete transitions (3 guides): Keep
allow-discreteout of thetransitionshorthand and declaretransition-behavior: allow-discreteseparately, so older browsers don't drop the whole declaration. - navigation-drawer: Use
<dialog>withshowModal()for pure drawers, orpopover="manual"for drawers that double as sidebars. - migrate-web-app-origin: Fixed the manifest
migrate_tomember, which is a single object withidandinstall_url, not an array.
Per-guide changes (98 guides)
- Updated the accessible-error-announcement guide to recommend initializing fields with
aria-invalid="false", dynamically associating error messages viadata-errortoaria-describedbyonly when invalid, announcing blur errors through a polite live region, and focusing the first invalid field upon failed submission. - Updated the language-model guide (also published as
prompt-api) to specify user gesture requirements when initiating model downloads, mandate accessible<progress>bars and polite status live regions for download progress, synchronizearia-busyandlangon streaming outputs, and enforce session clone lifecycle cleanup. - Updated the summarizer guide to require applying a
langattribute matching the BCP 47 code on the summary container whenever the output language differs from the document language. - Updated the animate-to-intrinsic-sizes guide to style
:focus-visiblealongside:hoveron expandable elements and await CSS transitions viagetAnimations()before hiding dismissed alerts to handle reduced-motion settings gracefully. - Updated the atrule-support-conditionals guide to include
@supports (container-type: size)in container query feature detection examples alongside scroll-state and anchored container types. - Updated the calculate-with-intrinsic-sizes guide to mandate pairing
visibility: hiddenand transitioningvisibilityalongsideblock-sizecollapses so closed content is removed from the accessibility tree and tab order. - Updated the css-layout guide to cross-reference single-line overflow techniques for truncating and revealing content on demand without layout friction.
- Updated the fluid-scaling guide to prohibit shrinking containers during browser zoom to ensure text scales up to 200% without loss of content.
- Updated the responsive-design guide to require keeping
clamp()maximum font sizes within 2.5 times the minimum and utilizing font-relative boundaries to preserve 200% zoom scaling compliance. - Updated the style-parent-with-has guide to clarify that parent error styling serves only as emphasis requiring field-specific error text, and updated ARIA synchronization to dynamically link error IDs and announce blur errors via a polite live region.
- Updated the animated-select-picker guide to require declaring
transition-behavior: allow-discreteas a standalone property after thetransitionshorthand, setting explicit text colors with backgrounds, and keeping::picker(select)scrollable by avoidingoverflow: hidden. - Updated the **[autofill-address-form](https://github.com/GoogleChrome/modern-web-guidance/blob/v1.0.0/skills...
v0.0.197
Release Notes: v0.0.197
🆕 New Guides
- Introduced a new guide for content-first-noise-reduction detailing techniques to eliminate visual clutter, reduce intrusive interface distractions, and prioritize core content for a more focused user experience.
🔄 Updated Guides
- Updated the modern-web-guidance skill to streamline triggering conditions, improve instructions for handling large retrieved guide files, and clarify custom browser policy guidelines.
- Updated the accessible-generated-content guide to provide a single-value
contentfallback before declarations using/alternative text syntax so older parsers do not discard the rule, and recommended moving required text to DOM elements. - Updated the language-model guide to format guidance on supplying
initialPromptsduring session creation as a standardized callout. - Updated the prompt-api guide to format guidance on supplying
initialPromptsduring session creation as a standardized callout. - Updated the ime-safe-enter-submit guide to explain how browsers emit
keyCode: 229during composition to help avoid premature form submissions when migrating key handlers toevent.key === 'Enter'. - Updated the slider guide to recommend anchoring tooltips to slider thumbs using CSS anchor positioning and reference
position-aware-tooltips. - Updated the efficient-background-processing guide to format event handling requirements for non-bubbling
contentvisibilityautostatechangeevents as a standardized callout. - Updated the faster-spa-view-transitions guide to require toggling the
inertattribute alongsidecontent-visibility: hiddento ensure inactive views are removed from the keyboard tab order. - Updated the performance guide to ensure deferred third-party script examples specify secure HTTPS URLs.
- Updated the passkey-management guide to fix code block formatting for dynamically importing WebAuthn polyfills.
- Updated the security guide to set
frame-ancestors 'none'andX-Frame-Options: DENYas default clickjacking defenses and clarify when to omitX-Frame-Optionsfor cross-origin CSP allowlists. - Updated the trusted-types guide to format limitations regarding character-level HTML escaping as a standardized callout.
- Updated the scroll-position-aware-elements guide to format layout padding recommendations for sticky and floating controls as a standardized callout.
- Updated the same-document-transitions guide to correct phrasing regarding unique view-transition names across list items.
- Updated the scoped-component-transitions guide to format notes on nested view transition group overflow clipping as a standardized callout.
- Updated the swipe-to-remove guide to format row direction terminology notes as a standardized callout.
- Updated the scrollspy guide to use the unescaped
target-currentclass name across fallback JavaScript and CSS:is()selectors. - Updated the custom-text-decorations guide to prune external cross-references and focus directly on native CSS text decoration and outline techniques.
- Updated the equal-width-text-lines guide to clarify applying
text-fitdirectly to single-line elements versus container multi-line lockups. - Updated the visually-texture-content guide to format mask mode customization guidance as a standardized callout.
- Updated the cpp-on-the-web guide to expand Emscripten best practices, including modern modular flags, clean CLI flag formatting, buffer-based memory passing across the JS-Wasm boundary, and main-thread offloading strategies.
🌐 Browser Support Updates
- the api.HTMLElement.showPopover capability: Now Baseline Widely available in
navigation-drawer. - Alt text for generated content: Now Baseline Newly available in
accessible-generated-content. - Local network access: Updated supported browser versions for Chrome and Edge in
local-network-access.
📊 Benchmark Evaluations
| Agent + Model | Tasks / Assertions | Unguided → Guided Pass Rate | Uplift |
|---|---|---|---|
| codex_cli (gpt-6.1-sol) | 205 / 1729 | 55% → 82% | +27pp |
| claude_code (claude-opus-5-5) | 205 / 1729 | 58% → 90% | +32pp |
| antigravity_cli (gemini-4-argon) | 205 / 1705 | 61% → 96% | +35pp |
Full Changelog: v0.0.196...v0.0.197
v0.0.196
Release Notes: v0.0.196
🆕 New Guides
- Added a new guide for sort-high-precision-timestamps explaining how to accurately sort microsecond- and nanosecond-level timestamps in JavaScript without precision loss or floating-point comparison errors.
- Added a new guide for secure-external-subresources covering techniques such as Subresource Integrity (SRI), Content Security Policy (CSP), and CORS to safeguard third-party scripts and assets against tampering.
- Added a new guide for card providing implementation patterns for responsive, accessible card components with robust layout structures and accessible whole-card click behaviors.
- Added a new guide for dialog detailing how to build accessible modal and non-modal dialogs using the native
<dialog>element with proper focus management, keyboard interaction, and backdrop styling. - Added a new guide for menu demonstrating how to create accessible application and navigation menus with proper ARIA roles, arrow-key keyboard navigation, and focus handling.
- Added a new guide for custom-text-decorations explaining how to style accessible, modern text underlines and decorations using CSS properties like
text-underline-offsetandtext-decoration-thickness.
🔄 Updated Guides
- Updated the accessibility guide with formal WCAG criteria mappings and expanded best practices for semantic landmarks, heading hierarchies, explicit
<label for>associations,aria-disabledevent suppression, and minimum target sizing. - Updated the autofill-address-form guide with patterns for multi-line street addresses, specifying
address-line1andaddress-line2autocomplete tokens and marking only the first line as required. - Updated the autofill-payment-form guide to advise placing format hints above inputs linked via
aria-describedbyand using unmaskedtype="text"withinputmode="numeric"for card security codes. - Updated the autofill-sign-in-form guide to clarify that password managers differentiate existing credentials via
autocomplete="current-password"rather than requiring a specific element ID. - Updated the autofill-sign-up-form guide to clarify that new credential creation relies on
autocomplete="new-password"rather than specific element ID naming conventions. - Updated the calculate-event-differentials guide to demonstrate DST-safe duration calculations with
Temporal.ZonedDateTime, calendar-aware comparisons usingTemporal.Duration.compare()with arelativeToanchor, and localized formatting viaIntl.DurationFormat. - Updated the capture-location-agnostic-data guide to cover selecting the narrowest
Temporal"Plain" type, configuringcalendarparameters, and managing month-end arithmetic usingoverflow: 'constrain'versus'reject'. - Updated the coordinate-global-events guide to recommend
temporal-polyfilland clarify explicit global scope assignment when polyfillingTemporal. - Updated the support-global-calendar-systems guide to demonstrate localized date formatting with the
era: 'long'option for era-based calendars like Japanese, alongside updated polyfill guidance. - Updated the conditional-async-dependencies guide to detail module evaluation order with top-level
await, warning against concurrent sibling static imports and recommending chained dynamicimport()calls when bootstrapping application modules. - Updated the identify-inp-causes guide to use Long Animation Frames API metrics to distinguish between style recalculation (
styleDuration,forcedStyleDuration) and layout work (layoutDuration,forcedLayoutDuration) when diagnosing interaction delays. - Updated the security guide to warn against regex-based HTML post-processing for CSP nonce injection and to recommend SHA-384 or SHA-512 hashes for Subresource Integrity on external scripts and stylesheets.
- Updated the trusted-types guide to introduce an entity-escaping policy with strict security caveats regarding attribute injection, alongside examples of declaring multiple named policies in Content-Security-Policy.
- Updated the position-aware-tooltips guide to clarify that popovers triggered by
popovertargetestablish implicit anchor connections natively without requiring explicitanchor-nameorposition-anchordeclarations. - Updated the viewport-aware-dropdowns guide to highlight that
popovertargettriggers provide implicit anchor associations for positioning dropdown panels without needing manualanchor-nameorposition-anchorattributes. - Updated the custom-button-actions guide to specify required ARIA states for custom invoker buttons, including
aria-expanded,aria-pressed,aria-haspopup, and preserving focus witharia-disabled="true". - Updated the interest-triggered-tooltips guide to streamline native anchor positioning using
position-areaandposition-try-fallbackson implicitinterestforanchors, reserving explicit anchor names for polyfill fallbacks. - Updated the agentic-forms guide to instruct Angular developers to configure Signal Forms using
provideExperimentalWebMcpForms()and theexperimentalWebMcpTooloption instead of adding declarative attributes to avoid duplicate tool registrations. - Updated the agentic-javascript-tools guide to mandate using official framework adapters (
use-webmcp-toolin React,@angular/corein Angular, and@vueuse/corein Vue) rather than invokingdocument.modelContext.registerTool()directly within UI components. - Updated the webmcp guide to mandate registering tools via official framework integrations (
use-webmcp-tool,@angular/core, and@vueuse/core) instead of callingregisterTool()directly inside components.
🗑️ Removed Guides
- Removed the format-human-readable-durations guide.
- Removed the manage-recurring-intervals guide.
- Removed the model-partial-time-concepts guide.
- Removed the sequence-distributed-events guide.
- Removed the stabilize-reactive-state guide.
🌐 Browser Support Updates
- the html.elements.input.autocomplete capability: Now Baseline Widely available in
autofill-address-form. - Intl.DurationFormat: Now Baseline Newly available in [`calculate-event-...
v0.0.195
Release Notes: v0.0.195
🆕 New Guides
- Added a new guide for sequence-distributed-events detailing how to reliably coordinate, order, and synchronize asynchronous events across distributed application components to eliminate race conditions.
- Added a new guide for quick-sign-ins demonstrating how to implement low-friction, secure authentication experiences using modern credential management and auto-sign-in patterns.
- Introduced a new guide for icons outlining performant, scalable, and accessible best practices for embedding and rendering SVG icons across modern web interfaces.
- Added a new guide for 2d-panning explaining how to implement smooth, responsive pointer- and touch-driven two-dimensional navigation for large viewports, maps, and canvas interfaces.
- Introduced a new guide for scoped-component-transitions showing how to craft isolated, localized view transitions and component state animations without causing page-wide layout recalculations.
- Added a new guide for progress providing guidance on creating semantic, accessible, and customizable determinate and indeterminate loading indicators.
🔄 Updated Guides
- Updated the modern-web-guidance skill with guidance on crafting 2–5 word action-oriented queries, evaluating results by descriptions rather than similarity scores, and cleanly adapting platform features into framework code.
- Updated the css-layout guide to update masonry grid terminology and cross-reference the renamed dropdown guidance for anchored layouts.
- Updated the ime-safe-enter-submit guide to clarify that
isComposingchecks and default action suppression apply to custom Enter-key handlers on single-line inputs as well as multiline textareas. - Updated the calculate-event-differentials guide to recommend chaining Temporal methods when combining dates and times, balancing calendar units with
largestUnit, formatting durations via.toLocaleString(), and checking status via duration.sign. - Updated the capture-location-agnostic-data guide to recommend reading date fields directly from
PlainDateproperties instead of formatting to parts, explicitly converting viaTemporal.Instant, and comparing plain dates with.equals(). - Updated the coordinate-global-events guide to recommend native
.toLocaleString()formatting for user-facing localized times rather than manual hour and minute string arithmetic. - Updated the batch-analytics-events guide to explicitly recommend deferring and batching Core Web Vitals telemetry alongside low-priority analytics using
fetchLater(). - Updated the full-session-analytics guide to explicitly include Core Web Vitals telemetry tracking throughout full browsing sessions using
fetchLater(). - Updated the passkeys guide to add cross-reference guidance for contextual in-place sign-ins using the
quick-sign-inspattern. - Updated the validate-origins guide to refine example origins to
app.example.comand clarify URL normalization andMessageEventorigin validation nuances inOrigin.from(). - Updated the position-aware-tooltips guide to cross-reference
viewport-aware-dropdownsfor general anchor collision flipping when directional indicator restyling is unnecessary. - Updated the responsive-table guide to specify keyboard scrollability (
tabindex="0"), region semantics (role="region"), and accessible naming on table containers while refining pseudo-element label announcements. - Renamed and updated the viewport-aware-dropdowns guide to clarify collision flipping for dropdown menus and cross-reference related tooltip and popover guidance.
- Updated the motion guide to advise against globally applying near-zero animation durations and demonstrated scoping reduced motion adaptations per-component using nested media queries.
- Updated the checkbox guide to detail cross-browser color contrast variations when applying
accent-colorto checkboxes and radio buttons. - Updated the spinner guide to hoist
@keyframesdefinitions out of nested selector blocks into top-level declarations. - Updated the apply-webgl-shaders guide to adopt
content="drawable", texture pre-allocation viatexImage2D,texElementSubImage2Duploads, and geometry synchronization viacanvas.updateElementGeometry(). - Updated the browser-ui-theming guide to recommend excluding range inputs (
:not(input[type="range"])) from global:user-validstyling to prevent unwanted slider borders and backgrounds. - Updated the dark-mode guide to highlight rendering differences for
accent-coloracross browsers and emphasize verifying indicator contrast in Safari. - Updated the export-html-media-from-canvas guide to use
content="drawable"attributes, manage pre-allocated textures in WebGL and WebGPU, and coordinate hit-testing geometry viacanvas.updateElementGeometry(). - Updated the expose-canvas-content-to-browser-features guide to transition HTML-in-Canvas implementations to
content="drawable", modern texture upload methods, and geometry synchronization withcanvas.updateElementGeometry(). - Updated the interactive-content-in-3d-scenes guide to reflect the latest HTML-in-Canvas attributes, texture handling patterns,
updateElementGeometry()hit testing, and Three.jsInteractionManagerintegration. - Updated the agentic-forms guide to advise keeping
tooldescriptionandtoolparamdescriptionfocused on intent and semantic meaning instead of repeating input names, options, or constraints already captured in the schema. - Updated the agentic-javascript-tools guide to emphasize concise descriptions without duplicating schema metadata, recommend manual argument validation and defaults in
execute, and guide configuring `webmcp-typ...
v0.0.194
Release Notes: v0.0.194
🆕 New Guides
- Introduced a new guide for slider covering best practices for building accessible, custom-styled range inputs for numeric value selection.
- Introduced a new guide for switch detailing how to create accessible toggle switch components using semantic form controls and modern styling techniques.
- Introduced a new guide for client-side-encryption explaining how to encrypt and decrypt sensitive data directly in the browser using the Web Crypto API prior to transmission or storage.
- Introduced a new guide for digital-signatures demonstrating how to generate and verify cryptographic signatures client-side to ensure payload integrity and authenticity.
- Introduced a new guide for prevent-page-scroll-under-modal-dialog outlining robust methods to lock background scrolling without layout shift while modal overlays are active.
- Introduced a new guide for scroll-completion-effects showing how to detect scroll boundaries and trigger contextual animations or UI state updates upon reaching the end of scrollable areas.
- Introduced a new guide for swipe-to-reveal guiding developers on implementing touch-friendly horizontal swipe gestures to uncover contextual actions in list-based interfaces.
- Introduced a new guide for checkbox covering patterns for accessible, custom-styled multi-state checkboxes including support for the indeterminate state.
- Introduced a new guide for hovercard detailing how to implement accessible, delay-managed preview popovers triggered by hover and focus interactions.
🔄 Updated Guides
- Updated the modern-web-guidance skill to require responses consulting the skill to conclude with a structured summary explaining applied implementation choices or clarifying why retrieved guidance was not applicable.
- Updated the css-layout guide to recommend
flex-wrap: balancefor compact item lists, correct thecontainershorthand syntax tocontainer-name / container-type, and detail usingoverscroll-behavior: chainon intermediate scroll wrappers. - Updated the autofill-payment-form guide to clarify that the standard autocomplete token for street addresses is
address-line1without a hyphen before the digit. - Updated the accessible-web-components guide to specify setting
tabindex="0"on interactive custom element hosts inconnectedCallbackrather than the constructor, and clarified when to use host tab order versusdelegatesFocus: true. - Updated the custom-elements guide to mandate calling
super()first in constructors to avoidReferenceError, document reflecting numeric attributes, and establish standardized naming conventions for custom elements, properties, and attributes. - Updated the form-associated-custom-elements guide to recommend disabling internal controls within
formDisabledCallbackrather than setting the host element'sdisabledattribute to prevent getting permanently stuck when parent<fieldset>elements toggle. - Updated the prerendering-custom-elements guide to recommend attaching declarative shadow DOM hydration listeners once during setup instead of within
connectedCallback, and modernised feature detection usingObject.hasOwn(). - Updated the shadow-dom guide to clarify that
delegatesFocus: trueforwards<label>clicks to internal controls for form-associated custom elements while preserving host:focusstyling. - Updated the styling-web-components guide to document managing
:state()viaElementInternals.statesand emphasize applyingdisplay: blockto custom elements when using container queries because size containment does not apply to inline boxes. - Updated the local-network-access guide to clarify that
WebSocketconstructors accept only subprotocol strings rather than atargetAddressSpacedictionary, explaining URL-based mixed content exemptions for local IP literals,localhost, and.localhostnames. - Updated the sanitize-untrusted-html guide to configure DOMPurify fallback options with
ALLOW_ARIA_ATTR: falseandALLOW_DATA_ATTR: falseto accurately match native Sanitizer API stripping behavior. - Updated the trusted-types guide to demonstrate creating policies delegating to sanitizer libraries, highlight using
Document.parseHTMLUnsafe(), and note includingdompurifyin thetrusted-typesContent Security Policy directive. - Updated the resilient-context-menus-and-nested-dropdowns guide to include
flip-block flip-inlineinposition-try-fallbacksso anchored panels can flip across both axes simultaneously in viewport corners. - Updated the interest-triggered-action-previews guide to document polyfill fallback requirements, including feature detection via
HTMLButtonElement.prototype.interestForElement, class-based:is()selectors, and CSS variable delay overrides. - Updated the interest-triggered-tooltips guide to detail polyfill handling with
HTMLButtonElement.prototype.interestForElementdetection, class-based styling selectors, and CSS variable fallbacks for interest delay timings. - Updated the motion guide to explain accessing triggering
Animationobjects directly via theevent.animationproperty on animation and transition events to avoid ambiguity and limitations when filteringgetAnimations(). - Updated the swipe-to-remove guide to cross-reference the
swipe-to-revealpattern for interactive action reveal mechanics that do not auto-commit single actions on swipe completion.
🌐 Browser Support Updates
- at-rule(): Added Firefox 157 support in
atrule-support-conditionals. - flex-wrap: Added Chrome 150 and Edge 150 support in
css-layout. - the api.KeyboardEvent.isComposing capability: Removed Safari support in
ime-safe-enter-submit.
🔌 Plugins
- Added a marketplace description to the Claude Code plugin catalog.
📊 Benchmark Evaluations
| Agent + Model | Tasks / Assertions | Unguided → Guided Pass Rate | Uplift |
|---|---|---|---|
| codex_cli (gpt-6.1-sol) | 153 / 1284 | 58% → 77% | +19pp |
| claude_code (claude-... |
v0.0.193
Release Notes: v0.0.193
🆕 New Guides
- restrict-outbound-connections: Restrict a page or worker to communicating only with an explicit allowlist of network endpoints to prevent unauthorized third-party requests and client-side data exfiltration.
- validate-origins: Compare and validate web origins and sites safely across cross-document messages and URLs without error-prone string parsing.
- verify-email-ownership: Verify that a user owns an email address during account creation, sign-in, or recovery without sending a one-time passcode or magic link email.
- drag: Support dragging to move a floating element around the page.
🔄 Updated Guides
- security: Updates and improvements to web platform guidance.
- consistent-cross-document-transitions: Updates and improvements to web platform guidance.
- dynamic-sibling-animations: Updates and improvements to web platform guidance.
🌐 Browser Support Updates
- paint-order: Now Baseline Widely available in
contrast-color.
📊 Benchmark Evaluations
| Agent + Model | Tasks / Assertions | Unguided → Guided Pass Rate | Uplift |
|---|---|---|---|
| codex_cli (gpt-5.6-sol) | 132 / 1124 | 59% → 81% | +22pp |
| claude_code (claude-sonnet-5) | 132 / 1124 | 54% → 87% | +33pp |
| antigravity_cli (gemini-3.8-flash-medium) | 132 / 1124 | 65% → 91% | +26pp |
Full Changelog: v0.0.192...v0.0.193
v0.0.192
Release Notes: v0.0.192
🆕 New Guides
- Added a new guide for accessible-generated-content covering techniques to ensure CSS-generated content with pseudo-elements remains accessible and properly announced by screen readers.
- Added a new guide for respect-os-text-scale explaining how to design layouts and size typography using relative units so web interfaces honor user-defined operating system text zoom settings.
- Added a new guide for atrule-support-conditionals detailing how to use
@supportsqueries to conditionally test for and progressively enhance modern CSS at-rules. - Added a new guide for responsive-design outlining modern layout strategies, container queries, and fluid sizing techniques for building resilient cross-device web interfaces.
- Added a new guide for selector-atrule-combinations demonstrating how to effectively nest and combine advanced CSS selectors within at-rules to streamline complex stylesheets.
- Added a new guide for sms-otp-form showing how to build secure, frictionless SMS one-time passcode verification forms using the WebOTP API and standardized autocomplete attributes.
- Added a new guide for interaction-paint-timing providing optimization strategies to minimize input latency and improve Interaction to Next Paint (INP) across user interactions.
- Added a new guide for lazy-load-video-and-audio covering best practices to defer non-critical media resources and boost initial page load performance.
- Added a new guide for motion offering guidance on crafting purposeful, accessible web animations while respecting user preferences for reduced motion.
- Added a new guide for dark-mode-toggle illustrating how to implement accessible, persistent theme switchers that harmonize user preferences with system color schemes.
- Added a new guide for browser-ui-theming explaining how to customize browser chrome, theme colors, and system status bars to deliver a cohesive, app-like visual experience.
- Added a new guide for color exploring modern CSS color spaces, relative color syntax, and contrast considerations for dynamic design systems.
- Added a new guide for equal-width-text-lines demonstrating layout and typographic techniques to balance headline lengths and achieve balanced, equal-width lines of text.
- Added a new guide for typography detailing best practices for web font loading, variable fonts, font metric overrides, and fluid typographic hierarchies.
- Added a new guide for visual-effects showcasing modern CSS graphical capabilities like backdrop filters, blend modes, clipping paths, and shadows to enhance UI depth.
🔄 Updated Guides
- Updated the accessibility guide with guidance on touch target sizing via logical properties (
min-block-size/min-inline-size), explicit:focus-visiblestyling withoutline-offset, and references to dedicated guides for color, typography, and motion. - Updated the css-layout guide to direct responsive design patterns, dynamic viewport units, and space reservation to the dedicated
responsive-designguide. - Updated the css guide to streamline core cascading rules (including using
revert-layerfor layered fallback overrides) while modularizing theming, motion, typography, and responsiveness into standalone guides. - Updated the autofill-sign-in-form guide to advise disabling browser text corrections via
spellcheck="false",autocorrect="off", andautocapitalize="off"on username and email identifier fields. - Updated the autofill-sign-up-form guide to recommend setting
spellcheck="false",autocorrect="off", andautocapitalize="off"to prevent browsers from modifying usernames and email addresses during registration. - Updated the forms guide to add recommendations for disabling text correction on identifier inputs and using
autocomplete="one-time-code"with the WebOTP API for SMS one-time passcode verification. - Updated the accessible-web-components guide to clarify outward cross-root label referencing using reflected ARIA element properties like
ariaLabelledByElementsalongside fallback strategies. - Updated the performance guide to recommend calculating
contain-intrinsic-sizefrom content dimensions using relative units such aslh,ch, orremto prevent Cumulative Layout Shift. - Updated the passkey-management guide to detail synchronizing user account profile updates (
nameanddisplayName) with password managers usingPublicKeyCredential.signalCurrentUserDetails(), separating user profile updates from server-only credential nickname edits. - Updated the animate-element-entry-exit guide to introduce reliable runtime feature detection for discrete
displaytransitions and a[data-closing]state pattern to coordinate smooth exit animations before hiding or removing DOM elements. - Updated the animate-to-from-top-layer guide with a fallback approach utilizing
[data-closing]andgetAnimations()to ensure dialog and popover exit transitions play completely before closing or light-dismissal. - Updated the dark-mode guide to detail image switching using
light-dark()alongside animage-set()MIME-type fallback strategy, and deferred toggle controls to the dedicateddark-mode-toggleguide. - Updated the interactive-content-in-3d-scenes guide to clarify and renumber the implementation steps for rendering HTML to WebGL/WebGPU canvas textures and synchronizing CSS transforms.
- Updated the agentic-forms guide to document that
toolactivatedandtoolcancellifecycle events dispatch ondocument.modelContextand provide a backward-compatible listener helper. - Updated the agentic-javascript-tools guide to advise returning structured error payloads from tool
executefunctions instead of throwing exceptions, ensuring AI agents receive actionable diagnostic context for recoverable failures.
🗑️ Removed Guides
...
v0.0.191
Release Notes: v0.0.191
🆕 New Guides
- accessible-web-components: Make custom elements accessible by default, setting roles and ARIA state via the ElementInternals ARIA mixin, managing focus with delegatesFocus, and keeping ARIA relationships within a single shadow root.
- custom-elements: Define, register, and manage the lifecycle of autonomous custom elements, covering constructor rules, lifecycle callbacks, upgrade timing, attribute/property reflection, and naming conventions.
- form-associated-custom-elements: Make a custom control participate natively in forms with formAssociated and ElementInternals, submitting its own value, integrating with constraint validation, and reacting to reset, disable, and state-restore.
- prerendering-custom-elements: Server-render a custom element, then hydrate it in place without re-rendering or a flash of unstyled content.
- shadow-dom: Encapsulate a component's DOM and styles with Shadow DOM, construct the tree efficiently with HTML templates, and project consumer content with slots.
- styling-web-components: Style across the shadow boundary with :host selectors, inherited and custom properties for theming, ::slotted and ::part, and cascade layers and container queries inside components.
- web-components: Orientation and cross-cutting principles for authoring and using Web Components, covering Custom Elements, Shadow DOM, templates and slots, Declarative Shadow DOM, styling across the shadow boundary, Form-Associated Custom Elements, and accessibility requirements. Use this guide when building reusable UI components, design systems, or server-rendered custom elements.
- avoid-redundant-large-asset-downloads: Avoid re-downloading and re-storing large shared assets, such as AI models, Wasm modules, or fully-bundled JavaScript libraries, that a visitor's browser may already hold from an unrelated site.
- load-shared-resources-declaratively: Serve popular, unmodified scripts, stylesheets, and JavaScript modules from a shared cross-origin cache using markup or import syntax alone, without writing custom caching logic.
- share-web-fonts-across-origins: Serve large, popular web fonts from a shared cross-origin cache instead of re-downloading them from a font CDN on every site that references them.
- migrate-web-app-origin: Transfer an installed web app to a new origin while preserving user configuration and OS-level shortcuts.
- local-network-access: Access resources on a user's local network or loopback interface from a public web application.
- trusted-types: Help prevent DOM-based XSS attacks by ensuring all untrusted content is sanitized before being inserted into the page.
- responsive-table: Build a data table that presents tabular data with proper header semantics, and remains readable and navigable on small screens and with assistive technologies.
- spatial-navigation: Implement accessible spatial navigation using arrow keys that works correctly in different layout modes (grid etc)
- cpp-on-the-web: Compile C/C++ to WebAssembly using Emscripten
🔄 Updated Guides
- Updated the animated-select-picker guide to advise using standard
valueattributes on<option>elements to ensure standard form submission behavior. - Updated the branded-select-styling guide to emphasize retaining standard
valueattributes on<option>elements to preserve default form submission behaviors. - Updated the custom-select-picker-layouts guide with guidance on using
:open::picker(select)selectors, customizing the::checkmarkpseudo-element, wrapping<selectedcontent>in a<button>, and managing keyboard navigation and accessibility constraints for grid layouts. - Updated the rich-media-picker guide to clarify that standard
valueattributes should be maintained on<option>elements to preserve form submission functionality. - Updated the out-of-order-html-streaming guide to document the full suite of static and streaming DOM insertion methods, detailing built-in sanitizer behaviors,
WritableStreamintegration, and processing instruction marker practices. - Updated the sanitize-untrusted-html guide to detail node manipulation patterns using
Document.parseHTML()to avoid mutation XSS, explain child preservation rules viareplaceWithChildrenElements, and provide aligned DOMPurify fallback configurations. - Updated the security guide to streamline Trusted Types guidance, emphasizing framework dependency audits and incremental rollouts using
Content-Security-Policy-Report-Only. - Updated the consistent-cross-document-transitions guide to advise against applying
blocking="render"to third-party scripts, analytics, or tag managers to avoid triggering view transition timeouts. - Updated the agentic-javascript-tools guide to clarify WebMCP producer/consumer roles, detail frame-level discovery controls with
exposedToandfromOrigins, enforceAbortSignalcancellation patterns, and documentconsequentialHintanddebuggingtool annotations.
🗑️ Removed Guides
- Removed the prevent-text-wrapping guide.
🌐 Browser Support Updates
- HTML processing instructions: Added Chrome 150 and Edge 150 support in
out-of-order-html-streaming.
📊 Benchmark Evaluations
| Agent + Model | Tasks / Assertions | Unguided → Guided Pass Rate | Uplift |
|---|---|---|---|
| codex_cli (gpt-5.6-sol) | 132 / 1124 | 59% → 81% | +22pp |
| claude_code (claude-sonnet-5) | 132 / 1124 | 54% → 87% | +33pp |
| antigravity (gemini-3.8-flash-medium) | 132 / 1124 | 65% → 91% | +26pp |
Full Changelog: v0.0.190...v0.0.191
v0.0.190
Release Notes: v0.0.190
🆕 New Guides
- Introduced a new guide for out-of-order-html-streaming explaining how to improve perceived performance by streaming initial shell markup and asynchronously injecting deferred content fragments.
- Introduced a new guide for sanitize-untrusted-html detailing strategies to safely clean user-provided HTML markup and prevent cross-site scripting (XSS) vulnerabilities.
- Introduced a new guide for contrast-color demonstrating how to automatically select accessible, high-contrast foreground colors for dynamic backgrounds in CSS.
🔄 Updated Guides
- Updated the ime-safe-enter-submit guide to clarify that the
isComposingbug affects Safari versions older than 27. - Updated the performance guide to recommend serving JPEG XL as a modern image format alongside AVIF and WebP to achieve optimal compression and quality.
- Updated the security guide to include the
focus-without-user-activationPermissions Policy directive as a best practice for preventing third-party iframes from stealing focus.
🌐 Browser Support Updates
- the api.KeyboardEvent.isComposing capability: Now Baseline Newly available in
ime-safe-enter-submit. - Top-level await: Now Baseline Newly available in
conditional-async-dependencies. - Anchor positioning: Added Safari 27 support across 5 guides (
css-layout,resilient-context-menus-and-nested-dropdowns,anchor-positioning-tab-underline,interest-triggered-tooltips,persistent-app-tours). - attr(): Added Chrome 133, Edge 133, and Firefox 155 support in
progress-ring. - Customizable <select>: Added Safari 27 support across 4 guides (
animated-select-picker,branded-select-styling,custom-select-picker-layouts,rich-media-picker). - Grid lanes: Added Safari 26.4 support in
css-layout.
🔌 Plugins
- Updated the Codex plugin metadata with brand logo assets, a refined short description, and set the category to "Developer Tools".
- Updated the category classification to "Developer Tools" in the Agent Marketplace catalog.
📊 Benchmark Evaluations
| Agent + Model | Tasks / Assertions | Unguided → Guided Pass Rate | Uplift |
|---|---|---|---|
| codex_cli (gpt-5.6-sol) | 132 / 1124 | 59% → 81% | +22pp |
| claude_code (claude-sonnet-5) | 132 / 1124 | 54% → 87% | +33pp |
| antigravity (gemini-3.8-flash-medium) | 132 / 1124 | 65% → 91% | +26pp |
Full Changelog: v0.0.189...v0.0.190
v0.0.189
Release Notes: v0.0.189
📊 Benchmark Evaluations
| Agent + Model | Tasks / Assertions | Unguided → Guided Pass Rate | Uplift |
|---|---|---|---|
| codex_cli (gpt-5.6-sol) | 132 / 1124 | 59% → 81% | +22pp |
| claude_code (claude-sonnet-5) | 132 / 1124 | 54% → 87% | +33pp |
| antigravity (gemini-3.8-flash-medium) | 132 / 1124 | 65% → 91% | +26pp |
Full Changelog: v0.0.188...v0.0.189