npm stats
  • Search
  • About
  • Repo
  • Sponsor
  • more
    • Search
    • About
    • Repo
    • Sponsor

Made by Antonio Ramirez

modern-web-guidance

0.0.169

@hoten

npmSnykSocket
Downloads:37757
$ npm install modern-web-guidance
DailyWeeklyMonthlyYearly

Modern Web Guidance Logo

Modern Web Guidance

Inject web platform expertise, best practices, and modern API patterns directly into your AI coding agents.

Modern Web Guidance is an agent skill (aka SKILL.md) with a CLI that helps coding agents build better web applications using modern, high-performance, accessible, and secure APIs instead of legacy workarounds.

Supported by the Google Chrome team, the Microsoft Edge team, and the web development community.

Quickstart

npx modern-web-guidance@latest install

This command runs an interactive wizard to place the SKILL.md appropriately. See Alternative Installation Methods below.

Try it out (without installing)

# Search for relevant guides
npx modern-web-guidance@latest search "animate a dialog modal backdrop"

# Retrieve a guide by ID
npx modern-web-guidance@latest retrieve "animate-to-from-top-layer"

Why?

Coding agents often default to older patterns because LLM training data contains vast amounts of legacy code. This often leads them to generate bloated JavaScript for tasks that now have native, high-performance web platform solutions.

Even if a model knows an API exists, it often lacks the density of real-world, modern implementation patterns required for production-ready code.

Modern Web Guidance bridges this gap. Our skill's CLI returns targeted, expert-curated guidelines directly into your agent's context window, focusing on:

  • Modern Browser APIs: Helping models correctly structure APIs they frequently misuse.
  • Performance & Accessibility: Eliminating legacy bloat with clean, native patterns.
  • Responsible Fallbacks: Guiding models to use sensible, lightweight fallbacks instead of heavy polyfills or legacy libraries.

What's Included?

We cover the past several years of the web platform's new features, all the way up to the cutting edge. The guides are designed to be token-efficient; we run evals enabling us to prune lowest-common-denominator content that models already know.

Core Disciplines

🎨 User Experience

Smooth visual states (View Transitions, entry/exit animations, parallax scroll, CSS scrollbar-color).

πŸ“ CSS Layout

Modern layout systems (container queries, subgrid, modern color spaces like oklch, text-wrap tuning, and line-height trimming).

⚑ Performance

Speed optimizations (instant preloading, Interaction to Next Paint (INP) diagnostics, and scheduling tasks via scheduler.yield).

πŸ“ Forms & UI

Native components (Anchor Positioning for tooltips, Popover API, dialogs, :user-invalid validation, and auto-sizing fields).

β™Ώ Accessibility

Hardened patterns (accessible error announcements, keyboard focus management).

πŸ€– Built-in AI

Local client models (native translation, summarization, and language detection APIs).

View an example: the navigation-drawer guide.

The full list

102 modern web features

CSS & Layout (51 features)

::backdropCustom highlightsScroll snap events
:has()field-sizingScroll-driven animations
:not()font-size-adjustscroll-initial-target
:user-valid and :user-invalidimage-set()scrollbar-color
@functionIndividual transform propertiesscrollbar-width
@starting-styleinterpolate-sizescrollend
accent-colorlight-dark()scrollIntoView()
Active view transitionlinear() easingsibling-count() and sibling-index()
Anchor position container queriesMaskssin(), cos(), tan(), asin(), acos(), atan(), and atan2() (CSS)
Anchor positioningoverflow-clip-margintext-box
calc-size()overflow: cliptext-wrap
color-schemeoverlaytext-wrap: balance
Container queriesoverscroll-behaviortext-wrap: pretty
Container scroll-state queriesprefers-color-scheme media querytransition-behavior
Container style queriesprefers-contrast media queryView transitions
content-visibilityprefers-reduced-motion media queryview-transition-class
Cross-document view transitionsScroll snapWeb animations

HTML & DOM (20 features)

:autofillCustomizable <select>Invoker commands
<details>Email, telephone, and URL <input> typesmoveBefore()
<dialog closedby>Fetch priorityMutationObserver
<dialog>hidden="until-found"Mutually exclusive <details> elements
<link rel="expect">HTML in canvasPopover
<link rel="preload">inertpopover="hint"
blocking="render"Interest invokers

JavaScript & APIs (31 features)

AbortController and AbortSignalLanguageModelSpeculation rules
enterkeyhintLong animation framesSummarizer
Event timingNavigation APISVG
Federated credential managementnavigator.modelContextTemporal
FetchPage visibilityTop-level await
fetchLaterPage visibility stateTranslator
Form-associated WebMCP attributesPartitioned cookiesUser agent client hints
inputmodePermissions policyWeb authentication
Intersection observerRegistered custom propertiesWeb authentication signal methods
Intl.DurationFormatResize observer
Language detectorScheduler API
128 real-world developer use cases

accessibility

  • accessible-error-announcement: Synchronize programmatic accessibility states (like aria-invalid) with the visual :user-invalid state to ensure screen reader users receive error feedback only after interaction, mirroring the visual experience.

built-in-ai

  • language-detection: Detect the language of user-generated content or already present site content.
  • language-model: Run on-device natural language inference in the browser using the Prompt API, with streaming output, structured JSON responses, and multi-turn session management.
  • summarizer: Summarize text content using the on-device Summarizer API.
  • translator: Translate text between languages using the on-device Translator API.

css

  • highlight-text-ranges: Highlight arbitrary text ranges on a page such as search results, spelling errors, or collaborative editing cursors.

forms

  • animated-select-picker: Create a custom select component whose dropdown is animated. For example, the menu fades or slides into view, or the options animate upon selection.
  • autofill-address-form: Build an address form with correct autocomplete attributes and autofill support.
  • autofill-highlight-inputs: Use CSS to highlight form fields that have been autofilled by the browser and not edited by the user.
  • autofill-payment-form: Build a payment form that collects card details with correct autocomplete values and autofill support.
  • autofill-sign-in-form: Build a sign-in form with correct autocomplete values and autofill support.
  • autofill-sign-up-form: Build a sign-up form with correct autocomplete values and autofill support.
  • brand-consistent-forms: Match checkboxes, radio buttons, range sliders, and progress bars to your site's color palette without replacing them with custom components.
  • branded-select-styling: Create custom select elements whose button, picker, arrow icon, and checkmark all seamlessly match your brand or design system's typography, colors, spacing, and border treatments.
  • custom-select-picker-layouts: Create custom select pickers whose options are positioned in unique or interesting ways, rather than the traditional stacked list of options.
  • form-fields-automatically-fit-contents: Allow form fields to grow and shrink to fit the user input, e.g. as the user types or selects a different option. Apply maximum and minimum size limits to create dynamic and responsive form fields that conform with the page design.
  • required-field-feedback: Provide error message for required form fields that were skipped or left empty only after user interaction, to avoid preemptive errors and ensure feedback is timely and contextually relevant to the user's flow.
  • rich-media-picker: Create a custom select component whose options can contain complex HTML formatting (e.g. images, icons, and other rich formatting) rather than just plain text.
  • select-menu-interaction: Validate that a non-default option has been chosen in a select menu only after the user has interacted with the control.
  • validate-input-after-interaction: Show form field validation feedback (e.g. password complexity or email format requirements) only after the user has finished their initial interaction, avoiding premature errors on page load or while the user is typing.

passkeys

  • passkey-authentication: Authenticate a returning user with a passkey for primary sign-in.
  • passkey-conditional-create: Silently register a passkey for an existing user after a successful password login.
  • passkey-management: Let users view and manage the passkeys registered to their account.
  • passkey-reauthentication: Verify a signed-in user's identity using their existing passkeys before a sensitive action.
  • passkey-registration: Register a passkey for an existing user account.

performance

  • batch-analytics-events: Debounce and batch multiple analytics events together in a single beacon to minimize network contention and reduce server load, while still delivering real-time updates.
  • break-up-long-tasks: Break up heavy synchronous processing (complex computations and/or long loops) or DOM updates, to let the browser handle user input and repaint the screen.
  • calculate-total-foreground-time: Calculate the total time a user actually spent viewing a page, excluding periods when the tab was in the background.
  • conditional-async-dependencies: Conditionally load or initialize async dependencies (such as importing polyfills for missing web features) without requiring complex orchestration across all of a page's script dependencies.
  • defer-rendering-heavy-content: Reduce rendering times in content-heavy web pages (e.g. pages with long feeds, lots of articles, or complex dashboards), by deferring rendering for any content that is not immediately visible to the user.
  • defer-work-until-scroll-ends: Defer expensive operations like DOM updates, data fetching, analytics tracking, or layout recalculation until after scrolling completes to maintain smooth scroll performance.
  • deprioritize-background-fetches: Deprioritize background data fetches made with the Fetch API to prevent network contention with user-initiated requests.
  • detect-initial-visibility-state: Reliably determine whether a page was initially loaded in the background, even in cases where the script is loaded asynchronously after the user foregrounded the page.
  • efficient-background-processing: Conserve system resources and battery life by pausing background JavaScript execution (such as &lt;canvas&gt; animations, WebGL rendering, or high-frequency WebSocket data polling) when the component is off-screen and then resume them just-in-time when they scroll back into view.
  • faster-spa-view-transitions: Enable faster transitions back to previously visited views in a Single-Page Application (SPA) by preserving their structural DOM state instead of destroying and rebuilding them on every navigation.
  • full-session-analytics: Reliably track analytics, errors, and telemetry data across the user's entire page visit, and defer sending of the data until the user leaves the page.
  • identify-heavy-scripts: Identify the scripts most responsible for long animation frames
  • identify-inp-causes: Identify slow running JavaScript that is impacting INP metric
  • improve-next-page-load-performance: Improve page load performance by prefetching or prerendering pages that the user is likely to visit next.
  • interactions-in-complex-layouts: Make interactions snappier and more responsive (reducing Interaction to Next Paint (INP) scores) by avoiding layout re-calculations in complex layouts, such as data-heavy dashboards or spreadsheet-style grids.
  • optimize-image-priority: Optimize the loading priority of Largest Contentful Paint (LCP) candidate images and deprioritize non-critical images to reduce critical resource load delays.
  • optimize-preload-priority: Optimize the relative priority of preloaded content to reduce critical resource load delays.
  • optimize-script-priority: Optimize the loading priority of scripts by boosting critical asynchronous scripts and deprioritizing non-essential or late-body scripts to improve sequencing and reduce delays.
  • resolution-optimized-pseudo-elements: Use resolution-optimized images in CSS pseudo-elements (such as ::before and ::after) to reduce the number of DOM nodes.
  • schedule-tasks-by-priority: Schedule tasks with different priorities to ensure critical work runs first while background work is deferred.
  • sequence-distributed-events: Log and sequence operations in distributed microservices or high-throughput tracing environments by recording timestamps with nanosecond resolution.

privacy

  • privacy: Action-oriented guidelines for web developers to implement privacy by design, data minimization, third-party audits, and secure data handling. Use this skill when designing applications, integrating third-party services, handling user data, or configuring security headers.

user-experience

  • adapt-scrollbar-to-contrast-preferences: Enhance scrollbar visibility for users who prefer high-contrast interfaces
  • anchor-positioning-tab-underline: Transition an element seamlessly between two target element positions. For example, moving a selected tab underline between the previously selected tab and the currently selected tab.
  • animate-element-entry-exit: Smoothly hide/show elements as they are added/removed from the DOM or as their display values are toggled.
  • animate-to-from-top-layer: Animate elements such as dialogs, popovers, and tooltips as they're entering/exiting the top layer.
  • animate-to-intrinsic-sizes: Smoothly animate interactive components (like accordions, menus, and expanding cards) to and from their natural dimensions.
  • apply-webgl-shaders: Apply custom visual effects with WebGL shaders to HTML content.
  • calculate-event-differentials: Calculate the duration and time remaining between dates and times.
  • calculate-with-intrinsic-sizes: Calculate the size of an element based on its intrinsic size, while ensuring it fits within given design constraints.
  • capture-location-agnostic-data: Record chronological data that should not change based on a user's location, such as birthdates, recurring alarms, or national holidays.
  • carousel-slide-effects: Create a carousel of slides with images or other visual elements, where each slide animates as they enter/center/exit their scroller. For example, the slides may fade-in/fade-out, rotate, get bigger or smaller, etc.
  • carousel-snap-highlights: Visually highlight the currently snapped non-interactive item in scroll-snapping carousels, galleries, or full-page swipe experiences. For example, expanding a card when snapped, or revealing hidden content.
  • child-state-based-styling: Build a component that changes its styling based on the state of one of its child elements. For example, a component that renders in light or dark mode based on whether a theme toggle is checked (or not).
  • complex-shapes: Clip elements and their content to any free-form shape, like a symbol, brush stroke, or organic texture for more expressive designs.
  • component-specific-light-dark-theme: Force certain elements to be in light mode or dark mode (e.g. code blocks, media players, etc) independently of the page's color-scheme.
  • consistent-cross-document-transitions: Ensure critical page state is loaded and stable before initiating a cross-document view transition. This means critical CSS styles are loaded and applied, critical JavaScript is loaded and run, and the HTML visible for the user's initial view of the page has been parsed before the transition runs.
  • content-based-styling: Build a component that changes its layout based on whether it contains specific child elements (or not). For example, if the component contains an image, use a multi-column layout, otherwise default to a single-column layout.
  • coordinate-global-events: Schedule future meetings or events by explicitly binding them to a geographical IANA time zone so that event times remain accurate regardless of Daylight Saving Time (DST) transitions, "skipped" or "repeated" hours during clock changes.
  • cross-document-transitions: Create smooth, seamless transitions between full page navigations, such as cross-fades, custom reveal effects, or morphing of content from one page to the next.
  • customize-scrollbar-color-and-thickness: Customize the color or thickness of a scrollbar
  • dark-mode: Implement dark mode support in a way that respects the user's light/dark theme preference and adapts browser UI (e.g. scrollbars, form controls, etc)
  • declarative-button-actions: Declaratively connect a button to any element to trigger custom, application-specific actions using declarative button commands, invoker commands, button commands, custom commands, or declarative toggle actions.
  • declarative-dialog-popover-control: Toggle the visibility of a dialog or popover from a button without writing JavaScript.
  • deliver-optimized-decorative-images: Deliver optimized decorative images (such as backgrounds, UI icons, or complex masks) by simultaneously providing next-generation image formats (like AVIF or WebP) alongside multiple pixel densities (like 1x and 2x) so the browser can dynamically negotiate the best combination of file size and visual quality for the user's device capabilities.
  • design-token-reactivity: Define higher-order design tokens, like density modes (compact, comfortable, spacious) or themes and have descendant components react to changes directly and in component-appropriate ways.
  • directional-navigation-transitions: Animate visual state changes to reflect the direction of a user's navigational flow, such as sliding new content in from the right when advancing forward or from the left when returning to a previous screen.
  • dynamic-sibling-animations: Stagger animation or transition timing across sibling elements so each one starts after a computed delay based on its position in the sibling list.
  • dynamic-sibling-styling: Create dynamic visual spectrums or layout arrangements that automatically adapt to the number of elements in a group.
  • export-html-media-from-canvas: Capture and export dynamic HTML content as images or video frames from within canvas.
  • expose-canvas-content-to-browser-features: Expose content rendered in a canvas to browser features like assistive technologies, translation, or reading mode.
  • flicker-free-client-side-ab-testing: Deliver and render A/B tests, multi-variate tests, or other experiments using client-side JavaScript to alter or inject HTML, CSS, and JavaScript without the original content showing first before flickering or flashing to show the experiment content.
  • fluid-scaling: Scale items like font size, spacing, and media sizes smoothly based on the parent container's size rather than using fixed breakpoints
  • format-human-readable-durations: Present elapsed time or durations to users in a readable, localized format, with the flexibility to display either detailed unit breakdowns (e.g., "1 hour and 30 minutes") or total unit counts (e.g., "90 minutes") depending on context.
  • group-element-transitions: Transition a group of similar elements simultaneously using the same transition logic, such as removing a product from a shopping cart and having all the other products animate into their new positions.
  • improve-text-layout-and-legibility: Improve the layout and legibility of short standalone text content, such as headings no longer than a few lines, by enabling the browser to apply evenly balanced line breaks when wrapping text.
  • individual-transform-properties: Animate or override individual CSS transform properties (e.g. translate, rotate, scale) independently of other transform properties on a single element.
  • interactive-content-in-3d-scenes: Integrate interactive HTML elements into a 3D scene.
  • interactive-content-reveal: Create interactive reveal effects, such as a spotlight that follows the user's pointer to uncover details within an image or UI section.
  • interest-triggered-action-previews: Show a live preview of a button's effect when a user signals interest (e.g. hovering, focusing, or long-pressing) but before they commit to clicking.
  • interest-triggered-tooltips: Show a tooltip or supplemental information when a user hovers over, focuses on, or long-presses an interactive element, without requiring a click.
  • light-dismiss-a-dialog: Create a modal dialog that can be closed via light dismiss (i.e. clicking or tapping outside of the dialog)
  • manage-recurring-intervals: Calculate recurring intervals for subscription billings or payroll cycles, automatically adjusting for edge cases such as month-end transitions (e.g., adding one month to January 31st) to ensure accurate period calculations.
  • model-partial-time-concepts: Model date and time concepts that inherently lack a standard component (such as a specific year, day, or date) without using arbitrary placeholder values that introduce calculation errors.
  • move-dom-element-without-losing-state: Move or reparent a DOM element without losing important element state, such as interactivity states (:focus/:active), <iframe> loading state, animation/transition state, etc
  • navigation-drawer: Create a navigation drawer component that, when triggered from a menu button, slides in from the side overlayed on top of existing page content, and slides out when dismissed (by swiping away, tapping outside, or pressing escape).
  • overflow-clipping-control: Adjust the visible clipping boundary of an element to align with the content edge, padding edge, or border edgeβ€”or a specified offset from any of theseβ€”offering finer-grained control over how content is clipped.
  • parallax-scroll-effects: Create scroll-based effects (such as parallax) where foreground and background layers move at different rates, creating a sense of depth as the user scrolls.
  • persistent-app-tours: Create persistent onboarding walkthroughs using tethered native overlays that stay open during user interaction.
  • persistent-toast-notifications: Create non-intrusive toast and overlay notifications for persistent, stackable messaging and state communication.
  • persistent-top-layer-ui: Keep a modal dialog, fullscreen element, or native popover visibly open and functionally active when its underlying DOM node is moved or reparented in the DOM.
  • physics-based-easing: Create custom, physics-based animation and transition effects, like bounce and spring, that feel more natural and engaging than traditional easing curves.
  • platform-controls-dismiss-dialog: Create a modal dialog that can be closed via standard platform-specific user actions, such as pressing the Esc key on desktop platforms, or a "back" or "dismiss" gesture on mobile platforms
  • position-aware-tooltips: Build tooltips and popovers with directional arrows (or other visual styling) that automatically point the correct way when the element flips to a fallback position.
  • precise-text-alignment: Achieve precise vertical alignment with text of any font. For example, exactly equal visual padding above and below text, or aligning text perfectly flush with adjacent icons or images.
  • prevent-text-wrapping: Ensure the browser does not insert line breaks into text and will allow text to overflow its container.
  • pull-to-reveal: Build a pull-to-reveal feature that would enable the user to pull down on the screen to reveal more content, like a search bar.
  • reduce-style-repetition: Reduce excessive style repetition by encapsulating complex or dynamic styling logic into reusable functions (such as a function that computes a gradient based on a set of input parameters).
  • resilient-context-menus-and-nested-dropdowns: Build accessible, responsive menus, tooltips, dropdowns, or contextual overlays that must be tethered to specific UI elements, guaranteeing that the overlay automatically repositions itself (e.g., flipping axes) when it encounters viewport edges, ensuring it never gets cut off.
  • same-document-transitions: Visually connect persisting elements across different page states or navigations in a Single Page Application (SPA) (e.g. expanding a product thumbnail into a full-bleed hero image) by smoothly morphing their size, position, or other styling properties.
  • scroll-entry-exit-effects: Create fade-in, scale-up, or other complex reveal-type effects on elements as they enter and exit the scrollport (or viewport) while the user is scrolling.
  • scroll-position-aware-elements: Build floating buttons or widgets (back-to-top, scroll-to-bottom, chat launchers, etc.) that appear and disappear based on whether the user has scrolled at all.
  • scroll-progress-indicator: Create a scroll progress bar, stepped progress tracker, or any visual affordance that communicates how far through a page or section the user has scrolled.
  • scroll-snap-realtime-feedback: Provide real-time visual feedback in linked UI elements while a user scrolls through snap-aligned content, before the scroll gesture completes.
  • scroll-snap-state-sync: Synchronize navigation indicators, linked content panels, and analytics tracking with the actively snapped item in a scrollable container.
  • scroll-target-on-load: Build a scrollable list of elements (e.g. a carousel of images or a chat conversation thread) that can be displayed with a particular element scrolled into view on the initial render.
  • scrollability-affordance-hints: Build scroll-shadow overlays, gradient fades, or directional arrow indicators that appear only when there's actually more content to scroll to in that direction.
  • scrollytelling: Animate visual properties on a target element β€” such as fading a backdrop, shifting a background color, or to create scrollytelling experiences β€” driven entirely by the scrollport position of a completely different element.
  • search-hidden-content: Hide content from view using patterns such as accordions, tabs, and "Read more" sections, while ensuring the hidden text reveals itself during native "Find in page" searches, allows search engine indexing, supports URL fragment deep links, and maintains ARIA accessibility.
  • shaped-cutouts: Combine multiple shapes to create complex cutouts or 'knockout' effects in elements, such as adding a notch to an element.
  • shrinking-header-on-scroll: Smoothly animate a fixed header or full-page cover on scroll to dynamically shrink, gain shadows, and transform its layout over a predefined scroll distance.
  • size-aware-styling: Build a component whose styles can be conditionally dependent on its own width or height, rather than the width or height of the viewport. For example a card component that can change its layouts depending on how large it is, or a call-to-action button that can conditionally display helper text based on its width.
  • soft-edge-content-fade: Apply a transparency gradient to content edges to indicate further scrollable areas or to obscure payment-walled text.
  • stabilize-reactive-state: Manage task deadlines or schedules in data-driven views without unexpected side effects from shared mutable state.
  • stack-drill-down: Build full-screen hierarchical navigation that lets users drill down into nested views and swipe or navigate back to return, with browser history kept in sync.
  • style-parent-with-has: Style parent elements of a form field (e.g. labels or fieldsets) when the field is invalid.
  • support-global-calendar-systems: Display and calculate dates in non-Gregorian calendar systems (e.g., Islamic, Hebrew, or Chinese) accurately for international users.
  • swipe-to-remove: Let users act on items in a list (remove, archive, mark as read, etc.) with a horizontal swipe gesture, so they can process entries quickly without tapping a separate control.
  • visually-stable-font-fallbacks: Define font styles such that text remains readable and visually consistent in the event that there's a swap between the perferred font and one of the fallbacks (or vise versa).
  • visually-stable-mixed-fonts: Define font styles such that text remains readable and visually consistent in situations where multiple fonts are used to render a single block of text.
  • visually-texture-content: Apply realistic weathering and texture patterns to elements to give them an organic, aged, or physical material appearance.

webmcp

  • agentic-forms: Expose client-side functionality as tools to AI agents by annotating standard HTML forms with WebMCP attributes.
  • agentic-javascript-tools: Programmatically register client-side JavaScript functions as tools for AI agents using the WebMCP Imperative API.

Safe Adoption of Modern Features

  • Progressive Enhancement & Nuanced Fallbacks: We distinguish between purely additive enhancements (like speculative preloading) which are safe to let older browsers silently ignore, and critical behaviors (like dialog controls or network beacons) where we write highly considered, low-overhead fallbacks.
  • Responsible Fallbacks: We prioritize lightweight, case-specific custom fallbacks (<50 LOC) or conditionally-loaded polyfills instead of heavy third-party bundles.
  • Gotchas & Quirks: We document hidden platform limitations, such as the 64KB payload quota for fetchLater() or macOS-specific scrollbar behaviors.
  • Baseline-Aware Integration: We leverage real-time compatibility data from the Baseline project so agents can dynamically adapt to current browser support and any browser support preferences.

How It Works

  1. Activation: The coding agent activates the modern-web-guidance skill because of a relevant task. The agent is instructed to use the modern-web CLI for web platform queries.
  2. Local Semantic Search: The agent runs modern-web search "<query>". The tool matches the query to the best guide using an offline, CPU-efficient TensorFlow.js model (no network calls, no API keys).
  3. Guide Fetch: The agent retrieves the guide via modern-web retrieve <guide-id>, inserting targeted code patterns, gotchas, and fallbacks directly into its context window.

[!TIP] Note: We use npx to ensure the content doesn't go stale, but the CLI works offline, completely private and local. The NPM package is self-contained, with no extra dependencies to ensure both low-latency and supply-chain security.

Alternative Installation Methods

Vercel Skills CLI (aka npx skills)
npx skills add GoogleChrome/modern-web-guidance
GitHub CLI
gh skill install GoogleChrome/modern-web-guidance
Google Antigravity
agy plugin install https://github.com/GoogleChrome/modern-web-guidance
GitHub Copilot CLI
/plugin marketplace add GoogleChrome/modern-web-guidance
/plugin install modern-web-guidance@googlechrome
Claude Code Plugin
/plugin marketplace add GoogleChrome/modern-web-guidance
/plugin install modern-web-guidance@googlechrome
/plugin  # Select GoogleChrome marketplace, press enter, enable AutoUpdate
/reload-plugins

Updating

If you installed the skill using npx modern-web-guidance@latest install, you can update with: npx modern-web-guidance@latest update.

Otherwise, consult your agent's documentation for updating plugins and skills.

Evals to prove this works well ;)

We developed a robust eval harness to ensure that the content is empirically proven and continuously calibrated to ensure AI agents write better code. We run automated evaluations using a closed-loop validation pipeline:

  [ Expert-authored guidance and demo ]
            β”‚
            β–Ό
  [ Generated assets ] ──> Playwright Grader (.spec.ts) & Negative Demo (.html)
            β”‚
            β–Ό
  [ Calibration loop ] ───────> Runs Grader on Gold-Standard Demo (Must Pass 100%)
            β”‚                   Runs Grader on Negative Demo (Must Fail 100%)
            β–Ό
  [ E2E agent evals ] ────────> Runs coding agents in guided vs. unguided modes
                                Compares accuracy w/ and w/o the skill
  1. Simulated Developer Tasks: We define realistic, developer prompts that mimic real-world requests (e.g., "make my images load faster"). The prompts avoid naming APIs or features, testing whether the agent can successfully discover the relevant guides naturally.
  2. Browser-based Assertions: We write browser automation scripts that verify the guide was followed correctly: exact runtime behaviors, computed styles, accessibility states, etc.
  3. Self-Healing Calibration: Graders are calibrated against both a reference implementation (100% pass target) and a control page (0% pass target). The agent automatically refines tests on failure.
  4. E2E Testing: We measure coding agent performance on real tasks with and without guidance. The opportunity (100% - unguided pass rate) and uplift (guided - unguided pass rate) are key. If there's little opportunity, then models already do a great job and our guidance isn't providing much value. Based on the results, we revise guides to maximize the uplift, optimizing their effectiveness.

Recent eval results snapshot

DateAgent + ModelTasks / AssertionsUnguided β†’ Guided (Uplift)
May 18claude_code (opus-4-7)75 / 60352% β†’ 85% (+33pp)
May 17claude_code (opus-4-7)75 / 60354% β†’ 85% (+31pp)
May 16codex_cli (gpt-5.5)75 / 60349% β†’ 82% (+33pp)
May 16claude_code (opus-4-7)75 / 60351% β†’ 86% (+35pp)
May 15codex_cli (gpt-5.5)74 / 60052% β†’ 81% (+29pp)
May 15claude_code (opus-4-7)74 / 60053% β†’ 82% (+29pp)
May 15antigravity74 / 60047% β†’ 91% (+44pp)
May 14antigravity68 / 55447% β†’ 91% (+44pp)
Apr 30claude_code (opus-4-6)66 / 51644% β†’ 81% (+37pp)
Apr 28claude_code (opus-4-6)66 / 52441% β†’ 77% (+36pp)

Available Skill Packs

You can customize which skill packs are installed using the --choose flag:

npx modern-web-guidance@latest install --choose
  • modern-web-guidance (~234 tokens): Comprehensive guidance on modern browser APIs, layouts, and performance.
  • chrome-extensions (~181 tokens): Guidance on Manifest V3, background workers, extension APIs, and Chrome Web Store publishing.

Telemetry & Privacy

Google collects anonymous usage statistics (such as search queries, guide retrievals, and installation) to improve the reliability, relevance, and performance of the tool. You can inspect what is