Skip to content
CAI
Software that uses CAICheck a score

gatsbyjs/gatsby

49.4

Weak · 25 September 2026

130.3k

lines of production code

TypeScript

with JavaScript

3

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is the core framework and plugin ecosystem for Gatsby, a static site generator that builds websites by sourcing data from various providers and transforming it into static pages. It provides the underlying infrastructure for page generation, GraphQL data querying, and build-time optimizations, while also maintaining a comprehensive suite of benchmarks and end-to-end tests to validate performance and functionality across different adapters and runtime environments.

How it got here

2015–2017 — Monorepo standardization and plugin expansion

89 changes.

This period focused on restructuring the Gatsby codebase into a standardized monorepo with unified tooling, testing, and build configurations across all packages. It involved the widespread adoption of TypeScript, the introduction of new plugins for styling and data transformation, and the expansion of the examples directory to demonstrate modern framework capabilities.

2018–2019 — API modernization and testing expansion

77 changes.

This period focused on modernizing the Gatsby API surface, notably introducing the File System Route API, the Head API for metadata, and the Slices API for layout composition. Significant effort was directed toward migrating core packages to TypeScript and upgrading underlying dependencies like PostCSS and Webpack. The work was heavily supported by the creation of extensive E2E and integration test suites to validate these new features and ensure build stability.

2020–2021 — benchmarking infrastructure and image plugin

70 changes.

This period focused on establishing a comprehensive internal benchmarking suite to measure build performance across various data sources and processing pipelines. It also introduced the new gatsby-plugin-image package to replace the deprecated legacy image handling, alongside significant expansions to end-to-end test coverage for MDX, Contentful, and development runtime behaviors.

2022–2025 — TypeScript adoption and adapter improvements

29 changes.

This period focused on expanding TypeScript support across the Gatsby ecosystem, introducing TSX support for runtime entry points and adding new minimal TypeScript starters. It also featured significant enhancements to the Netlify adapter, including CDN support and improved handler generation, alongside the introduction of a dedicated script management package and the deprecation of legacy plugins.

Features

Add AVIF image support to gatsby-transformer-sharp

The gatsby-transformer-sharp plugin now recognizes and processes AVIF image files. This is enabled by adding 'avif' to the list of supported extensions in the transformer's configuration and adding the corresponding AVIF options type to the GraphQL schema, allowing users to include AVIF images in their Gatsby projects alongside existing formats like JPEG, PNG, and WebP.

packages/gatsby-transformer-sharp · high confidence

Add Agility CMS benchmark starter site

Introduces a new Gatsby benchmark project in benchmarks/source-agilitycms that integrates the @agility/gatsby-source-agilitycms plugin. The site includes configuration for development and production environments, scripts to initialize and update content via the Agility CMS management API, and React components to render dynamic pages, post listings, and post details sourced from Agility CMS.

benchmarks/source-agilitycms · high confidence

Add CSV data processing example

The using-csv example now demonstrates how to load and query CSV files using Gatsby's GraphQL layer. It includes a sample data file (letters.csv) mapping letters to ASCII values and a page component that fetches this data via the allLettersCsv GraphQL query to display it in a table.

examples/using-csv · high confidence

Add CSV-text benchmark to the Gabe benchmark suite

A new benchmark scenario has been added to the Gabe project to track the performance of Gatsby when processing CSV data as plaintext, without using Markdown. This benchmark generates a site with an arbitrary number of simple pages (controlled by the N environment variable) containing a header, quote, and paragraphs of random text, sourced from a single large CSV file via gatsby-source-filesystem and gatsby-transformer-csv. It serves as a baseline for comparison against other Gabe benchmarks like gabe-fs-markdown.

benchmarks/gabe-csv-text · high confidence

Add Core Web Vitals tracking and preconnect hints to Google Analytics plugin

The \gatsby-plugin-google-analytics\ now supports tracking Core Web Vitals (LCP, FID, CLS) via the new \enableWebVitalsTracking\ option, which injects a web-vitals polyfill and sends performance metrics to Google Analytics. Additionally, the plugin now automatically adds \preconnect\ and \dns-prefetch\ links to the document head to optimize connection to Google's servers. These changes are accompanied by updated TypeScript definitions for the \OutboundLink\ component and \trackCustomEvent\ function, along with a comprehensive test suite covering the new web vitals integration and existing plugin behaviors.

packages/gatsby-plugin-google-analytics · high confidence

Add Cosmic JS benchmark site

Added a new Gatsby-based benchmark site in the benchmarks/source-cosmicjs directory that sources content from Cosmic JS. The site queries posts (title, body, cover image) and generates individual article pages, using a shared layout component that can be swapped (layout\_1.js vs layout\_2.js) to simulate code changes across multiple pages. Configuration is driven by environment variables (BENCHMARK\_COSMIC\_BUCKET, BENCHMARK\_COSMIC\_API\_URL, BENCHMARK\_COSMIC\_READ\_KEY, BENCHMARK\_COSMIC\_WRITE\_KEY, BENCHMARK\_COSMIC\_DATASET), and an update-post.js script is included to modify a random article and trigger a rebuild via webhook.

benchmarks/source-cosmicjs · high confidence

Add Drupal benchmark site

A new Drupal benchmark site has been added to the benchmarks suite. It sources data from a Drupal instance via the \gatsby-source-drupal\ plugin, displaying article titles, bodies, and cover images. The site includes a data updater script to modify Drupal content and provides two interchangeable layout components (\layout\_1.js\ and \layout\_2.js\) to simulate code changes during benchmarking.

(repo-wide) · high confidence

Add Excel file processing example

The \examples/using-excel\ directory now includes a demonstration of how to query data from Excel files. The new \src/pages/index.js\ component fetches data from two sheets (\Sheet1\ and \Sheet2\) of an Excel file using GraphQL queries (\allLettersXlsxSheet1\ and \allLettersXlsxSheet2\) and displays the 'Letter' and 'ASCII Value' fields in separate HTML tables.

examples/using-excel · high confidence

Add File System Route API example

The examples/route-api directory now includes a comprehensive demonstration of the File System Route API. This example showcases collection routes that generate pages from data nodes (such as products and blog posts), nested collection routing for hierarchical data like parks, client-only catch-all routes for handling missing resources, and dynamic splat routes for flexible URL patterns like image previews.

examples/route-api · high confidence

Add Gabe benchmark for File System Route API with Markdown

A new benchmark site has been added to the Gabe project to measure the performance of Gatsby's File System Route API when generating pages from Markdown files. This baseline site generates an arbitrary number of simple pages (defaulting to 512) using pseudo-random content, allowing developers to benchmark build times and memory usage (configurable via N and M environment variables) specifically for the route API and Markdown transformation pipeline.

benchmarks/gabe-fs-markdown-route-api · high confidence

Add Gatsby MDX filesystem benchmark site

A new benchmark site has been added to the Gabe project to measure MDX performance for individual files per page. This baseline site generates an arbitrary number of simple pages, each containing a small header, an import, and two paragraphs of random text, allowing users to run builds with configurable page counts and memory limits to track MDX processing speed.

benchmarks/gabe-fs-mdx · high confidence

Add Gatsby example site using Faker for mock data

The \examples/using-faker\ directory now contains a complete Gatsby starter site that demonstrates integrating the Faker library to generate mock user data. The example includes a layout component that fetches personal details (name, address, contact info) and a company list via GraphQL, displaying them in a CSS Grid-based index page. It also provides a basic 404 page and global styles, serving as a reference for using Faker within a Gatsby static site generation workflow.

examples/using-faker · high confidence

Add Gatsby source plugin for PINC data to development runtime tests

A new Gatsby source plugin named \gatsby-source-pinc-data\ has been added to the e2e test development runtime. This plugin sources test data from a local \db.json\ file, creating nodes of type \PincData\ with generated slugs (e.g., \/preview/{uuid}\). It supports syncing data, handling webhook updates, and resetting the data store, providing a dedicated data source for testing Gatsby Preview functionality within the development environment.

e2e-tests/development-runtime/plugins/gatsby-source-pinc-data · high confidence

Add Google OAuth and Gmail integration examples

Added two new Gatsby-based example applications: a Google OAuth flow in \examples/functions-google-oauth\ demonstrating server-side login, token exchange, and logout via Gatsby Functions, and a Gmail labels viewer in \examples/functions-google-gmail\ that uses client-side Google Sign-In to fetch and display user labels through a backend function.

examples/functions-google-gmail, examples/functions-google-oauth · high confidence

Add GraphQL Typegen example with fragment support

The \examples/using-graphql-typegen\ directory now includes a complete Gatsby application demonstrating GraphQL code generation. The example features an index page that queries site metadata and utilizes a \SiteInformation\ fragment (defined in a new \Info\ component) to display build time, illustrating how to structure queries and leverage generated types in a Gatsby project.

examples/using-graphql-typegen · high confidence

Add GraphQL source example with blog post components

The \examples/using-gatsby-source-graphql\ directory now includes a functional example demonstrating the \gatsby-source-graphql\ plugin. This addition introduces a \blog-post.js\ component for rendering individual posts with images and content, an \index.js\ page listing published blog posts with formatted dates, and a \utils.js\ module for generating URL slugs, providing a concrete reference for integrating remote GraphQL schemas into a Gatsby site.

examples/using-gatsby-source-graphql · high confidence

Add HJSON data example to Gatsby site

The using-hjson example now includes HJSON data files (example.hjson, a.hjson, b.hjson) and a corresponding Gatsby page that queries and displays this data. Users can see how to use the HJSON transformer to load structured data with features like comments, unquoted keys, and multiline strings, and access it via GraphQL queries in a Gatsby application.

examples/using-hjson · high confidence

Add Hacker News clone example site

The \examples/hn\ directory now contains a complete Hacker News clone built with Gatsby. This includes a layout component with the classic HN styling, components for rendering story items and nested comments, a CSS file replicating the original visual design, and pages/templates that fetch data from the \gatsby-source-hacker-news\ plugin to display top stories and individual story threads with their comment trees.

examples/hn · high confidence

Add JSS-styled example site with Gatsby integration

The examples/using-jss directory now contains a working Gatsby site demonstrating the gatsby-plugin-jss integration. The example includes Home and Detail pages that use react-jss for styling via the injectSheet higher-order component, and utilizes Gatsby's Link component for client-side navigation between pages.

examples/using-jss · high confidence

Add RSS Feed example site

A new example site has been added to demonstrate RSS feed generation. The site includes a landing page that welcomes users and provides a direct link to view the generated RSS feed at /rss.xml.

examples/feed · high confidence

Add Sanity.io benchmark site to test build performance

A new Gatsby-based benchmark site has been added to the \benchmarks/source-sanity\ directory to measure build performance when sourcing content from Sanity.io. The site queries article titles, bodies, and cover images from a Sanity dataset, generating individual pages for each article. It includes two interchangeable layout components (\layout\_1.js\ and \layout\_2.js\) to simulate code changes across multiple pages during builds. An update script (\update-post.js\) is provided to modify content in the Sanity dataset, allowing users to test how the build system handles data updates.

benchmarks/source-flotiq, benchmarks/source-kontent, benchmarks/source-sanity · high confidence

Add Stylus example demonstrating global and CSS Modules styles

The \examples/using-stylus\ location now includes a complete demo application that showcases how to use Stylus for styling in Gatsby. The example features two pages: \index.js\ which uses global Stylus styles (defined in \index.styl\), and \css-modules.js\ which demonstrates CSS Modules with scoped styles (defined in \css-modules.module.styl\). It also includes a typography utility setup via \typography.js\.

examples/using-stylus · high confidence

Add TypeScript example for Gatsby pages and components

The using-typescript example now includes TypeScript source files for the main layout, 404, and index pages. These components demonstrate how to use TypeScript interfaces to type PageProps and GraphQL query results, providing a reference implementation for developers integrating TypeScript with Gatsby.

examples/using-typescript · high confidence

Add WordPress benchmark site for build performance testing

A new benchmark project has been added to test Gatsby build performance when sourcing data from a WordPress site. This setup requires a WordPress instance with the WPGatsby plugin and a GraphQL endpoint provided via the BENCHMARK\_WPGRAPHQL\_URL environment variable. The benchmark site uses the gatsby-source-wordpress plugin to fetch posts and images, generating a static site with an index page listing articles and individual article pages to measure build times and output.

benchmarks/source-wordpress · high confidence

Add benchmark suite for gatsby-plugin-manifest

A new benchmarking setup has been added for the gatsby-plugin-manifest plugin, allowing developers to measure the performance of the onPostBootstrap lifecycle method. The suite includes a configuration file that registers the gatsby-plugin-benchmark-reporting plugin and a test script that executes the bootstrap process multiple times to calculate average, minimum, and maximum execution times. This enables users to track performance regressions or improvements in the manifest plugin's build-time behavior.

benchmarks/plugin-manifest · high confidence

The \examples/using-js-search\ directory now includes a working example demonstrating client-side search functionality. It features two implementations: a standalone component (\SearchContainer\) that fetches book data via Axios and indexes it using the \js-search\ library with configurable strategies (prefix, exact, all substrings) and sanitizers, and a Gatsby-integrated component (\ClientSearch\) that accepts book data and search options via props to build a similar index. The example includes a home page and a template page to render these search interfaces.

examples/using-js-search · high confidence

Add create-pages benchmark for stress-testing page generation

A new benchmark application has been added to the \benchmarks/create-pages\ directory to stress-test Gatsby's page creation performance. This benchmark generates a configurable number of pages (defaulting to 5,000, adjustable via the \NUM\_PAGES\ environment variable) using a blank template. It includes a \gatsby-plugin-benchmark-reporting\ plugin to capture and report build metrics, allowing users to run the benchmark via \npm run build\ or \yarn bench\ to evaluate performance under load.

benchmarks/create-pages · high confidence

Add example demonstrating Gatsby Head API usage

This change introduces a new example application (\examples/using-gatsby-head\) that showcases the Gatsby Head API. It includes a reusable \SEO\ component (\src/components/seo.tsx\) for managing document head elements like title, meta tags, and Twitter cards, a custom hook (\src/hooks/use-site-metadata.tsx\) to fetch site metadata via GraphQL, and page components (\src/pages/index.tsx\, \src/pages/parks/{Park.name}.tsx\) that export \Head\ functions to inject specific metadata and structured data (JSON-LD) for each route.

examples/using-gatsby-head · high confidence

Add example demonstrating Gatsby schema customization with JSON data

The \examples/using-type-definitions\ directory now contains a complete Gatsby site example that demonstrates schema customization using JSON files. The example includes components for layout, headers, SEO, and image handling, along with pages that query and display data from \author.json\, \blog.json\, and \comment.json\. This serves as a reference for users implementing custom type definitions and data sourcing in Gatsby.

examples/using-type-definitions · high confidence

Add example demonstrating GraphQL fragment usage in Gatsby

The \examples/using-fragments\ directory now includes a working Gatsby example that demonstrates how to define and use GraphQL fragments. It introduces \Details\ and \Social\ components, each exporting a specific fragment (\DetailsFragment\ and \SocialFragment\) to query nested \siteMetadata\ fields. The main page query composes these fragments to fetch data, illustrating a cleaner alternative to inline field selection for reusable data requirements.

examples/using-fragments · high confidence

Add example demonstrating dynamic module prefetching and preloading

The \examples/using-prefetching-preloading-modules\ directory now contains a complete Gatsby site example that demonstrates how to use Webpack's \webpackPrefetch\ and \webpackPreload\ magic comments for dynamic imports. The example includes an index page with two buttons: one triggers a dynamically imported alert module with prefetching enabled, and the other uses a \DynamicComponent\ to trigger a dynamically imported console module with preloading enabled, illustrating the difference in loading behavior for users.

examples/using-prefetching-preloading-modules · high confidence

Add example demonstrating multiple provider integration

The 'using-multiple-providers' example now includes an index page that demonstrates integrating Redux and Apollo Client within a single React component. The page displays a Redux-managed counter state and allows users to query a list of blog posts via Apollo; clicking a post updates the Redux store, which triggers a second Apollo query to fetch and display the post details.

examples/using-multiple-providers · high confidence

Add example homepage to Gatsby theme starter workspace

The example site within the Gatsby theme starter workspace now includes a basic homepage component that renders a simple div with the text 'Homepage in a user's site'. This provides a concrete starting point for users to see how the theme integrates with a standard Gatsby page structure.

starters/gatsby-starter-theme-workspace/example · high confidence

Add example site demonstrating path prefix usage

An example site has been added to the 'using-path-prefix' directory to demonstrate how to configure and use prefixed paths in Gatsby. The site includes a home page with navigation links to three simple content pages (A, B, and C), utilizing the Gatsby Link component for client-side routing.

examples/using-path-prefix · high confidence

Add filters and sort benchmark

A new benchmark suite has been added to stress test Gatsby's query filtering and sorting capabilities. The \benchmarks/query-filters-sort\ directory includes a Gatsby site configuration that generates configurable numbers of nodes and pages, along with multiple GraphQL query templates covering various filter operations (such as equality, range, regex, and array matching) and sorting options. This allows developers to measure performance characteristics under different data volumes and query complexities.

benchmarks/gabe-fs-markdown-images, benchmarks/query-filters-sort · high confidence

Add fs-text benchmark for plaintext performance tracking

A new benchmark site has been added to track plaintext build performance. It generates a configurable number of simple pages (defaulting to 512) using raw text files sourced via gatsby-source-filesystem, bypassing markdown processing to isolate file-system and text-handling costs. Users can run the benchmark with \yarn bench\ (or \N=1000 M=2 yarn bench\ for 1000 pages and 2GB memory) to measure build times and memory usage for this specific workload.

benchmarks/gabe-fs-text · high confidence

Add gatsby-plugin-styled-jsx for scoped CSS support

The new \gatsby-plugin-styled-jsx\ package enables drop-in support for styled-jsx, allowing developers to use \\<style jsx\>\ tags for scoped CSS in their components. The plugin integrates with Gatsby's build process by adding the \styled-jsx/babel\ plugin during Babel configuration and, in production builds, automatically flushing and injecting the generated CSS into the document head. It supports standard styled-jsx configuration options such as \optimizeForSpeed\, \sourceMaps\, \vendorPrefixes\, and the ability to chain additional CSS preprocessing plugins via the \jsxPlugins\ option.

packages/gatsby-plugin-styled-jsx · high confidence

Add gatsby-remark-graphviz plugin for rendering Graphviz diagrams

The new \gatsby-remark-graphviz\ package allows users to render Graphviz diagrams (using \dot\ and \circo\ languages) directly from markdown code blocks into responsive SVGs. The plugin uses \viz.js\ to handle rendering without requiring a system-level Graphviz installation, applies default responsive styling (\max-width: 100%; height: auto;\), and supports custom SVG attributes like \id\ and \class\ via code block metadata.

packages/gatsby-remark-graphviz · high confidence

Add gatsby-source-remote-images plugin to the using-gatsby-image example

The using-gatsby-image example now includes a new gatsby-source-remote-images plugin that sources remote images from Unsplash. This plugin uses createRemoteFileNode to download images and links them to UnsplashImagesYaml nodes via a localFile field, enabling the example to display remote images alongside local ones.

examples/using-gatsby-image/plugins/gatsby-source-remote-images · high confidence

Add i18n example with localized navigation and MDX support

The \examples/using-i18n\ directory now includes a complete Gatsby-based example demonstrating internationalization. It introduces a \LocaleContext\ provider in the layout component to manage locale state across the application tree. A custom \LocalizedLink\ component ensures internal navigation respects the current language prefix, while an \MdxLink\ wrapper automatically applies localization to internal links within MDX content. The example also features a \useTranslations\ hook that queries translation JSON files via GraphQL to render locale-specific text, and a navigation component that allows switching between English and German locales.

examples/using-i18n · high confidence

Add initial example website collection and build automation

This change introduces a new \examples\ directory containing starter sites that demonstrate specific Gatsby capabilities, including client-only routing, data fetching via GraphQL and runtime APIs, RSS feed generation, e-commerce with Stripe, and serverless functions for forms, authentication (Auth0, Google OAuth), and external integrations (Airtable, Gmail). It also adds a \build-all-examples.sh\ script to automate testing these examples and a root \README.md\ with guidelines for creating and maintaining example sites.

examples · high confidence

Add markdown benchmarks for id and slug indexing strategies

Added two new Gatsby-based benchmark sites in \benchmarks/markdown\_id\ and \benchmarks/markdown\_slug\ to measure build performance when querying MarkdownRemark nodes by their internal \id\ versus their generated \slug\. Both benchmarks generate a configurable number of random markdown pages and include a \gatsby-plugin-benchmark-reporting\ plugin to capture build metrics. The \markdown\_id\ benchmark queries pages by \id\ (noted as faster), while the \markdown\_slug\ benchmark queries by \slug\ (noted as slower), allowing developers to compare the performance impact of different GraphQL indexing strategies.

_benchmarks/markdown\_id, benchmarks/markdown\slug · high confidence

Add markdown-table benchmark with reporting plugin and Node 12 target

A new markdown-table benchmark has been added to the benchmarks suite, targeting Node 12 (via .nvmrc) and utilizing the gatsby-plugin-benchmark-reporting plugin for performance tracking. The benchmark generates 5,000 pages by default (configurable via NUM\_PAGES) containing markdown with tables, allowing users to run the build or benchmark using yarn. This specific benchmark is retained for historical reasons, with users directed to the markdown-slug and markdown-id benchmarks for more representative testing.

_benchmarks/markdown\table · high confidence

Add minimal TypeScript starter for Gatsby

A new minimal TypeScript starter has been added to the Gatsby ecosystem, providing a pre-configured project structure using TypeScript for page components (such as \index.tsx\ and \404.tsx\). This starter includes basic styling, a home page with links to documentation and tutorials, and a 404 page, offering developers a ready-to-use foundation for building Gatsby sites with type safety.

starters/gatsby-starter-minimal-ts · high confidence

Add path-prefix E2E test site with assetPrefix and slice support

A new E2E test site has been added to the \e2e-tests/path-prefix\ directory to verify behavior when using a custom \pathPrefix\ (\/blog\) and \assetPrefix\ (\http://localhost:9001\). The test configuration includes a Gatsby setup that generates an RSS feed respecting the path prefix and registers a header slice via \gatsby-node.js\, with Cypress tests targeting the \/blog\ base URL.

e2e-tests/path-prefix · high confidence

Add plugin options schema validation and default configuration for gatsby-plugin-sharp

The plugin now enforces a strict schema for its configuration options, validating settings such as \defaults.formats\, \quality\, and format-specific options (e.g., \jpgOptions\, \pngOptions\) to prevent invalid inputs. It also introduces a \defaults\ configuration object that allows users to set global defaults for image processing (like formats, placeholders, and quality) which are applied to \gatsbyImageData\ and \StaticImage\ components, ensuring consistent image handling across the site.

packages/gatsby-plugin-sharp · high confidence

Add query benchmark for stress-testing GraphQL performance

A new query benchmark has been added to the \benchmarks/query\ directory to help evaluate Gatsby's GraphQL query execution performance under load. The benchmark generates a configurable number of pages and data types (controlled via \NUM\_PAGES\ and \NUM\_TYPES\ environment variables) and includes a script (\bin/runQueryTiming.sh\) to measure the time taken by the query execution phase. It also supports an optional \QUERY\_LINKED\_NODES\ flag to stress-test data dependency tracking by creating complex linked node relationships. The setup includes a reporting plugin (\gatsby-plugin-benchmark-reporting\) and a \recording.md\ file containing historical performance data comparing different internal storage implementations.

benchmarks/query · high confidence

Add server-side rendering and hydration support for Styletron

The \gatsby-plugin-styletron\ now includes \gatsby-ssr.js\ and \gatsby-browser.js\ implementations to enable server-side rendering and client hydration. The plugin wraps the root element with a Styletron Provider, injecting server-generated styles into the HTML head via \onRenderBody\ and hydrating them on the client using the \\_styletron\hydrate\\ class. It also supports passing options like \prefix\ and \debug\ to the Styletron constructor and enables debug mode by default in non-production environments.

packages/gatsby-plugin-styletron · high confidence

Add simple-auth example with client-only routes and authentication

The simple-auth example now demonstrates a complete authentication flow using client-only routes. It includes a login form that validates against hardcoded credentials (username 'gatsby', password 'demo') and stores user data in localStorage. The app uses @reach/router for client-side navigation to protected routes (Profile, Details) and Gatsby's Link for public pages, with a PrivateRoute component handling access control by redirecting unauthenticated users to the login page.

examples/simple-auth · high confidence

Add support for caching AVIF images in the offline plugin

The offline plugin now includes AVIF images in its runtime caching strategy. This ensures that AVIF assets are cached by the service worker when users visit pages containing them, improving offline resilience for sites using this modern image format.

packages/gatsby-plugin-offline · high confidence

Add support for disabling vendor prefixes in styled-components

The Gatsby styled-components plugin now allows users to disable automatic vendor prefixing for CSS properties. By setting the \disableVendorPrefixes\ option to \true\ in the plugin configuration, the plugin passes this setting to the underlying \babel-plugin-styled-components\ during build stages and to the \StyleSheetManager\ during browser and server-side rendering, giving users control over legacy CSS property handling.

packages/gatsby-plugin-styled-components · high confidence

Add support for hiding and highlighting code lines via comments

The \gatsby-remark-prismjs\ plugin now supports line-level directives in code blocks, allowing users to hide specific lines or highlight ranges using comment markers (e.g., \// hide-range{2-3}\, \// highlight-line\). This enables cleaner documentation by omitting boilerplate or focusing attention on key snippets, with the directives stripped from the final output.

packages/gatsby-remark-prismjs · high confidence

Add using-javascript-transforms example site

The \using-javascript-transforms\ example site has been added, demonstrating how to use the \gatsby-transformer-javascript-frontmatter\ plugin to extract frontmatter from JavaScript files. The example includes a blog layout with components for navigation, sidebars, and post chrome, along with templates for rendering Markdown and JavaScript-driven posts. It features a choropleth map visualization using D3.js, showcasing how to integrate dynamic data and interactive elements within a Gatsby site.

(repo-wide) · high confidence

Add using-remark example site with code highlighting and interactive components

The \examples/using-remark\ directory now contains a complete example site demonstrating Gatsby's Markdown processing capabilities. It includes a \Counter\ component to show how React components can be embedded in Markdown, a \Layout\ using \StaticQuery\ and Prism.js for syntax highlighting, and specific code example files (\hide-and-highlight-lines.js\, \hide-lines.js\, \highlight-lines.js\) that illustrate how to use comment-based annotations to hide or highlight specific lines in code blocks rendered from Markdown.

examples/using-remark · high confidence

Add vanilla-extract example application

The examples/using-vanilla-extract directory now contains a complete Gatsby starter demonstrating the vanilla-extract CSS-in-JS library. This example includes a dark/light mode toggle component with scoped styles, a branded landing page, and global styling setup, providing a reference implementation for integrating vanilla-extract into a Gatsby site.

examples/using-vanilla-extract · high confidence

Added CSV-to-Markdown benchmark site

A new benchmark site has been added to the Gabe benchmarking suite to measure Gatsby's performance when sourcing content from a CSV file and transforming it into Markdown. This benchmark generates a configurable number of pages (defaulting to 512) using pseudo-random content, utilizing \gatsby-source-filesystem\, \gatsby-transformer-csv\, and \gatsby-transformer-remark\ to create a blog-like structure with pagination and navigation.

benchmarks/gabe-csv-markdown · high confidence

Added Gatsby Preview e2e test plugin with webhook support

A new \gatsby-source-fake-data\ plugin has been added to the e2e test suite to support Gatsby Preview testing. This plugin sources fake data from a local \db.json\ file and, crucially, now accepts webhook data passed via the \webhookBody\ argument in \sourceNodes\. When webhook data is present, it creates nodes directly from the payload; otherwise, it falls back to syncing local data, allowing the e2e tests to simulate real-time preview updates.

e2e-tests/development-runtime/plugins/gatsby-source-fake-data · high confidence

Added Gatsby filesystem markdown benchmark site

A new baseline benchmark site has been added to the Gabe project to track Markdown performance for individual files per page. This benchmark generates an arbitrary number of simple pages, each containing a header, a quote, and two paragraphs of random text, to isolate Markdown processing metrics. It uses \gatsby-source-filesystem\ and \gatsby-transformer-remark\ to build these pages from generated content, allowing users to run benchmarks with configurable page counts and memory limits via the \yarn bench\ script.

benchmarks/gabe-fs-markdown · high confidence

Added JSON and YAML baseline benchmarks to the Gabe project

Two new baseline benchmark sites have been added to the Gabe project to measure Gatsby performance: one for JSON data (\gatsby-transformer-json\) and one for YAML data (\gatsby-transformer-yaml\). These benchmarks generate pseudo-random blog-like content and build static sites to track the performance impact of their respective data transformers. Users can run these benchmarks by installing dependencies and executing \yarn bench\, which allows them to configure the number of generated pages and Node.js memory usage via environment variables.

benchmarks/gabe-json-text, benchmarks/gabe-yaml-text · high confidence

Added benchmark data update script for WordPress

A new data-update script has been added to the WordPress benchmark suite to allow updating benchmark data. The script reads credentials and the GraphQL endpoint from environment variables (BENCHMARK\_WORDPRESS\_USERNAME, BENCHMARK\_WORDPRESS\_PASSWORD, BENCHMARK\_WPGRAPHQL\_URL) and uses the gatsby-source-wordpress fetch utility to mutate the title of the most recent article by replacing its last word with a random one.

benchmarks/source-wordpress/scripts · high confidence

Added example applications for Gatsby Functions

The examples folder now includes several complete starter applications demonstrating how to use Gatsby Functions with various third-party services. These include a basic form handler, an Airtable integration for storing submissions, a Google Sheets connector, a SendGrid email sender, a Twilio text message sender, and an Auth0-secured application with protected API routes. Each example provides the necessary frontend pages and backend function handlers to serve as a reference implementation.

(repo-wide) · high confidence

Added example source plugin with GraphQL API and site demo

The 'creating source plugins' guide now includes a complete working example consisting of a GraphQL API server and a Gatsby site. The API (in examples/creating-source-plugins/api) provides in-memory data for posts and authors, supporting queries, mutations (create, update, delete), and real-time subscriptions via GraphQL Yoga. The example site (in examples/creating-source-plugins/example-site) demonstrates how to consume this data, displaying posts with images and author details on the home page.

examples/creating-source-plugins/api, examples/creating-source-plugins/example-site · high confidence

Added video accessibility example with transcript, captions, and description tracks

The using-video example now includes a complete HTML5 video player that demonstrates accessibility features by loading separate WebVTT files for transcript, captions, and audio description. Users can see how to integrate these distinct track types into a single video element to support diverse accessibility needs.

examples/using-video · high confidence

Automated MDX article title updates with webhook notifications

A new script in the benchmarks/mdx/scripts directory now automatically updates the title of the first MDX article found in the src/articles directory by generating a random title using faker. After modifying the file, the script optionally triggers external webhooks if the BENCHMARK\_MDX\_UPDATE\_WEBHOOKS environment variable is configured, enabling automated data refresh notifications for benchmarking purposes.

benchmarks/mdx/scripts · high confidence

CSV transformer adds flexible node type naming and file-per-file parsing options

The \gatsby-transformer-csv\ plugin now allows users to customize the GraphQL node type names generated from CSV files via the \typeName\ option, supporting either a static string or a custom function. Two helper functions, \typeNameFromFile\ (default, one type per file) and \typeNameFromDir\ (one type per folder), are exported for common grouping strategies. Additionally, the \nodePerFile\ option lets users choose whether to create a separate node for each CSV row (default) or a single node per file containing all rows under a configurable key (default key \items\).

packages/gatsby-transformer-csv · high confidence

Canonical URL plugin now supports stripping query strings

The \gatsby-plugin-canonical-urls\ plugin now accepts a \stripQueryString\ option. When enabled, the plugin removes URL search parameters from the generated canonical links, helping to prevent duplicate content issues where different query strings (e.g., \/blog\ vs \/blog?tag=foobar\) might otherwise be indexed separately. This applies to both the initial server-side rendered link and subsequent client-side route updates.

packages/gatsby-plugin-canonical-urls · high confidence

The \gatsby-plugin-catch-links\ plugin now allows users to configure an \excludePattern\ option in \gatsby-config.js\ to prevent the plugin from intercepting navigation for links matching a specific regular expression. This is useful for excluding certain paths or external links from the plugin's SPA navigation behavior, ensuring they fall back to standard browser handling.

packages/gatsby-plugin-catch-links · high confidence

Enable Preact Fast Refresh and framework bundling in development

The \gatsby-plugin-preact\ now supports fast-refresh (hot reloading) for Preact components during development. The plugin's \gatsby-node.js\ configures the \@prefresh/webpack\ plugin and \@prefresh/babel-plugin\ in the \develop\ stage, while also ensuring the Preact framework libraries are correctly grouped into the framework chunk. Additionally, \gatsby-browser.js\ initializes the Prefresh error overlay and hot-middleware client in non-production environments, providing immediate feedback on compile and runtime errors without a full page reload.

packages/gatsby-plugin-preact · high confidence

Experimental Gatsby Theme CLI added

An experimental command-line interface for managing Gatsby themes has been introduced in the deprecated-packages/gatsby-theme directory. This CLI provides three main capabilities: creating new child themes via the \new\ command (which scaffolds a theme package inheriting from parent themes), ejecting theme components to local shadowing via the \eject\ command (supporting both copy and extend modes with automatic import path transformation), and debugging theme configurations via the \debug\ command (which checks for common issues like file shadowing mismatches and typos in directory names).

deprecated-packages/gatsby-theme · high confidence

Facebook Analytics plugin adds configurable SDK options and development controls

The gatsby-plugin-facebook-analytics now supports additional configuration options for the Facebook JavaScript SDK, including \version\ (defaulting to v3.3), \xfbml\ (defaulting to true), \cookie\ (defaulting to false), \debug\, and \language\. It also introduces an \includeInDevelopment\ option, allowing users to load the analytics library during development if needed, whereas previously it was strictly production-only. The plugin now correctly handles debug modes by loading the debug SDK variant and respects the specified language for the SDK endpoint.

packages/gatsby-plugin-facebook-analytics · high confidence

File System Route API reaches General Availability

The File System Route API is now generally available, allowing you to programmatically create pages from data collections using dynamic file paths (e.g., \src/pages/{Product.name}.tsx\). This update introduces support for collection-based routing, client-only routes using bracket syntax (e.g., \\[slug\].js\), and new plugin options to ignore specific files or customize slug generation. The plugin also now automatically updates pages when underlying data nodes change, ensuring your generated pages stay in sync with your content.

packages/gatsby-plugin-page-creator · high confidence

Google Global Site Tag plugin initialization and configuration

The \gatsby-plugin-google-gtag\ package is initialized with a complete implementation for integrating Google's Global Site Tag (gtag.js) into Gatsby sites. The plugin injects the gtag.js script and configures it via \trackingIds\ and \gtagConfig\ options, while offering a \pluginConfig\ to control behavior such as placing the script in the head, respecting Do Not Track (DNT) signals, excluding specific paths, using a self-hosted origin, and delaying pageview events on route updates. It also provides an \\<OutboundLink\>\ component for tracking outbound clicks and includes TypeScript definitions and schema validation for plugin options.

packages/gatsby-plugin-google-gtag · high confidence

Google Tag Manager plugin adds Core Web Vitals tracking and self-hosting options

The \gatsby-plugin-google-tagmanager\ now supports tracking Core Web Vitals (LCP, FID, CLS) via a new \enableWebVitalsTracking\ option, which injects a polyfill and pushes measurement events to the data layer. It also introduces \selfHostedOrigin\ and \selfHostedPath\ options to allow hosting the GTM script on a custom domain, and allows \defaultDataLayer\ to be defined as a function for dynamic runtime values. Additionally, the plugin now includes a \routeChangeEventName\ option to customize the route-change event name and enforces \aria-hidden\ on the GTM iframe for accessibility.

packages/gatsby-plugin-google-tagmanager · high confidence

Initial release of gatsby-design-tokens package

The \gatsby-design-tokens\ package is now available, providing a comprehensive set of design tokens for Gatsby sites. It exports plain objects and arrays for CSS properties including colors, typography (fonts, sizes, weights), spacing, breakpoints, shadows, and transitions, following the System UI and Theme UI specifications. The package also includes pre-configured theme objects (\theme\ and \theme-gatsbyjs-org\) that integrate these tokens into a ready-to-use Theme UI theme, complete with support for dark mode in the \theme-gatsbyjs-org\ variant.

packages/gatsby-design-tokens · high confidence

Initial release of gatsby-plugin-cxs for CSS-in-JS styling

This entry introduces the new \gatsby-plugin-cxs\ package, which enables the use of the CXS library for CSS-in-JS styling within Gatsby sites, including support for server-side rendering. The plugin automatically injects the generated CSS styles into the document head during the render phase, allowing developers to write inline styles that are efficiently processed and rendered on the server.

packages/gatsby-plugin-cxs · high confidence

Initial release of gatsby-plugin-sass with Sass/SCSS support

This entry introduces the \gatsby-plugin-sass\ package, providing drop-in support for Sass and SCSS stylesheets in Gatsby projects. The plugin configures Webpack to process \.scss\ and \.sass\ files, supporting both standard stylesheets and CSS Modules (via \.module.scss\ extensions). It allows users to pass options to the Sass compiler (such as \includePaths\, \precision\, and \additionalData\), customize \css-loader\ behavior, inject PostCSS plugins, and optionally use \resolve-url-loader\ to fix relative \url()\ resolution. The plugin defaults to the Dart Sass implementation but allows switching to \node-sass\ via the \implementation\ option, and includes schema validation for all plugin options.

packages/gatsby-plugin-sass · high confidence

Initial release of gatsby-remark-code-repls plugin

This entry introduces the gatsby-remark-code-repls plugin, which allows you to embed links to popular code REPLs (Babel, CodePen, CodeSandbox, and Ramda) directly in your Markdown documentation. By using special protocol links (e.g., \babel://file.js\), the plugin transforms them into HTML anchors that open the corresponding local code examples in the target REPL. It supports features like custom link text, target attributes, and provider-specific options such as including matching CSS for CodePen or specifying NPM dependencies for CodeSandbox.

(repo-wide) · high confidence

Initial release of gatsby-source-contentful v8.17.0

This entry marks the initial release of the \gatsby-source-contentful\ plugin at version 8.17.0. The package is now structured with a dedicated \.babelrc\ configuration using \babel-preset-gatsby-package\ and includes a \rich-text.d.ts\ file that exposes the \renderRichText\ helper for React applications. The plugin provides a \schemes\ export for plugin options validation and includes a \CHANGELOG.md\ documenting the history of the package.

packages/gatsby-source-contentful · high confidence

Initial release of the new gatsby-plugin-image package

This entry introduces the \gatsby-plugin-image\ package, a new built-in plugin for handling responsive images with high performance. The package provides the \GatsbyImage\ component for dynamic images (fetched via GraphQL) and the \StaticImage\ component for static assets, both of which automatically generate multiple sizes and formats (including AVIF and WebP) at build time. It includes a Babel plugin to parse \StaticImage\ props, helper functions like \getImage\ and \getSrc\ to simplify data extraction from GraphQL nodes, and supports features like lazy loading, placeholders, and SSR hydration. The package also deprecates the older \gatsby-image\ plugin and its associated resolvers, encouraging migration to the new \gatsbyImageData\ GraphQL field.

packages/gatsby-plugin-image · high confidence

Initial sitemap example implementation

The sitemap example now includes a complete set of React components to demonstrate the gatsby-plugin-sitemap functionality. This includes a basic layout wrapper, an index page linking to the generated sitemap, and specific pages (including a 'secret' page) to illustrate which routes are included or excluded from the sitemap.xml output. Additionally, a blog post template is provided, utilizing Gatsby's GraphQL API to fetch and render markdown content, showcasing how dynamic pages are handled within the sitemap generation context.

examples/sitemap · high confidence

Introduce HJSON transformer plugin

Adds the \gatsby-transformer-hjson\ plugin, enabling Gatsby sites to parse \.hjson\ files into GraphQL nodes. The transformer supports both single HJSON objects and arrays of objects, creating corresponding nodes (e.g., \FooHJson\) that can be queried via GraphQL. This includes the core logic in \src/gatsby-node.js\, unit tests, and standard package configuration files.

packages/gatsby-transformer-hjson · high confidence

Introduce \`create-gatsby\` interactive CLI for scaffolding new sites

The \create-gatsby\ package is now available as a standalone tool to scaffold new Gatsby projects via an interactive command-line interface. Users can run \npm init gatsby\ (or \yarn create gatsby\) to answer setup questions regarding the starter template, programming language (JavaScript or TypeScript), CMS integration, styling framework, and additional features. The tool supports a non-interactive mode using the \-y\ flag for quick setup and the \-ts\ flag to default to TypeScript. It handles cloning the selected starter, installing dependencies, and configuring plugins based on user selections.

packages/create-gatsby · high confidence

Introduce conditional compilation and dynamic import preservation in babel-preset-gatsby-package

The \babel-preset-gatsby-package\ preset now supports conditional compilation via a new \babel-transform-compiler-flags\ plugin, allowing developers to define available flags (such as \GATSBY\_MAJOR\) and use them in source code (e.g., \\CFLAGS\.MAJOR\) to enable or disable code paths at build time. Additionally, a new \keepDynamicImports\ option and corresponding \babel-transform-mark-to-keep-dynamic-import\ plugin have been added, enabling users to specify file paths where dynamic imports should be preserved rather than transformed into CommonJS \require\ calls. The preset also updates its default Node.js target to version 18.0.0 and includes a \.babelrc\ configuration for internal package compilation that enforces CommonJS modules and TypeScript support.

packages/babel-preset-gatsby-package · high confidence

Introduce dedicated gatsby-script package with Script component

The \gatsby-script\ package is now a standalone module providing the \Script\ component and \ScriptStrategy\ enum, allowing developers to load external scripts with specific strategies such as \postHydrate\, \idle\, and \offMainThread\. This component supports deduplication of scripts via a global cache, replays load/error callbacks for duplicate instances, and integrates with Partytown for off-main-thread execution. The package also includes a \collectedScriptsByPage\ utility for managing script collection per page and a shim for \requestIdleCallback\ to ensure compatibility across environments.

packages/gatsby-script · high confidence

Introduce dedicated legacy polyfills package for IE11 support

The \gatsby-legacy-polyfills\ package has been introduced to bundle specific polyfills required for legacy browsers (IE11, Chrome \< 64, Safari \< 12.1). This package loads polyfills such as \core-js\ features, \event-target-polyfill\, \whatwg-fetch\, and \url-polyfill\ via the \nomodule\ attribute, ensuring that modern browsers do not download these scripts while legacy ones receive the necessary compatibility layers. The package includes a build process that generates the polyfill bundle and a test suite to verify that all specified polyfills are correctly included in the output.

packages/gatsby-legacy-polyfills · high confidence

Introduce gatsby-cypress package with TypeScript support and Babel compilation

The gatsby-cypress package now includes TypeScript definitions (index.d.ts) for its custom Cypress commands (waitForRouteChange, waitForAPI, waitForAPIorTimeout) and adds a .babelrc file to ensure source files are compiled via babel-preset-gatsby-package before distribution. This improves developer experience for TypeScript users and ensures consistent code transformation for the package's commands.

packages/gatsby-cypress · high confidence

Introduce gatsby-plugin-lodash for optimized Lodash builds

Adds a new Gatsby plugin that integrates the Lodash webpack plugin and the @sigmacomputing/babel-plugin-lodash to enable modular, tree-shaken Lodash builds. By default, the plugin enables all Lodash feature sets during the build-javascript stage, but users can opt out of specific features (such as shorthands or cloning) via the \disabledFeatures\ option in the plugin configuration to further reduce bundle size.

packages/gatsby-plugin-lodash · high confidence

Introduce gatsby-plugin-preload-fonts for route-specific font preloading

The new \gatsby-plugin-preload-fonts\ plugin reduces time to first meaningful paint by preloading font assets required for each route. It works in two steps: first, a \gatsby-preload-fonts\ CLI script uses Puppeteer to scrape your application's routes and generate a \font-preload-cache.json\ mapping of routes to their font dependencies; second, the plugin injects \\<link rel="preload"\>\ tags for those fonts during server-side rendering. The plugin supports a \crossOrigin\ configuration option (string or function) to control the crossorigin attribute on preload tags, defaults to \anonymous\ for self-hosted fonts, and includes a CI mode that skips interactive prompts when routes have not changed.

packages/gatsby-plugin-preload-fonts · high confidence

Introduce gatsby-plugin-schema-snapshot for GraphQL schema locking

Adds the \gatsby-plugin-schema-snapshot\ plugin, which allows users to lock down a project's GraphQL schema by saving a minimal schema snapshot to a file (defaulting to \schema.gql\) and re-creating the schema from those type definitions during bootstrap. The plugin supports configuration options to include or exclude specific types or plugins, ensures field types are included by default, and provides an \update\ option to manually replace the saved snapshot with an updated version. It also includes logic to unlink the existing schema file on initialization if the \update\ option is enabled, ensuring a clean state for regeneration.

packages/gatsby-plugin-schema-snapshot · high confidence

Introduce gatsby-plugin-subfont for automatic font optimization

Adds a new Gatsby plugin that wraps the Subfont CLI tool to automatically optimize font delivery for the site's homepage during the build process. The plugin runs in the \onPostBuild\ lifecycle, subsetting and inlining fonts for \index.html\ by default, and exposes configuration options such as \fallbacks\, \inlineFonts\, and \fontDisplay\ to allow users to customize how fonts are served and displayed.

packages/gatsby-plugin-subfont · high confidence

Introduce gatsby-worker package with messaging API and worker pool

The \gatsby-worker\ package is introduced to provide a utility for executing tasks in forked processes, featuring a \WorkerPool\ class that supports distributing tasks across multiple workers via \.single\ or executing setup tasks on all workers via \.all\. This release adds a new messaging API allowing bidirectional communication between the main process and workers using \getMessenger\, and includes a \silent\ option to ignore output from workers. The package also exposes an \isWorker\ helper to detect the execution context and includes integration tests to verify the new functionality.

packages/gatsby-worker · high confidence

Introduction of Gatsby Hello World starter

A new Gatsby starter project named 'hello-world' has been added to the repository. This starter provides a minimal example application that renders a simple 'Hello world!' message on the home page, serving as a basic template for users to begin building Gatsby sites.

starters/hello-world · high confidence

Introduction of the standalone gatsby-cli package

The Gatsby command-line interface is now distributed as a standalone package (\packages/gatsby-cli\), separating CLI logic from the core framework. This change introduces a new build pipeline using Rollup and Babel to bundle the CLI, including a dedicated Ink-based logger for the progress bar. It adds a post-install script that displays a success message when the CLI is installed globally, and implements the \gatsby plugin add\ command to automatically install NPM packages and update \gatsby-config.js\ (supporting both \.js\ and \.ts\ configurations). The package also includes comprehensive tests for plugin installation and Node.js version validation.

packages/gatsby-cli · high confidence

Minimal starter now includes a custom 404 page

The gatsby-starter-minimal now provides a dedicated 404 page (src/pages/404.js) that displays a 'Page not found' message with a link back to the home page. In development mode, it additionally suggests creating a new page in src/pages/ to resolve the error. This change ensures users have a proper fallback experience for missing routes out of the box, complementing the existing home page (src/pages/index.js) which serves as the entry point.

starters/gatsby-starter-minimal · high confidence

Netlify adapter adds image/file CDN support and fixes handler generation

The Netlify adapter now supports Netlify Image CDN and file CDN when the \imageCDN\ option is enabled, introducing new URL generators for images and files and an edge function handler to proxy allowed remote URLs. It also fixes handler generation on Windows by ensuring forward slashes in require paths and improves route manifest processing to correctly honor \force\ and \conditions\ properties on redirects while removing legacy plugin entries.

packages/gatsby-adapter-netlify · high confidence

New Contentful benchmark site for data-update testing

A new benchmark site has been added to the \benchmarks/source-contentful\ directory to test Gatsby's data-update capabilities with Contentful. This site sources articles (title, body, and cover image) from a Contentful space and includes scripts to set up the site, update random articles via webhooks, and fix broken images. It also provides two interchangeable layout components (\layout\_1.js\ and \layout\_2.js\) to simulate code changes across multiple pages during benchmarking.

benchmarks/source-contentful · high confidence

New Docker-based memory benchmark runner for Gatsby

The benchmarks/docker-runner directory now contains a complete, self-contained Docker environment for measuring Gatsby's memory usage. This includes a Node 14-based Docker image, scripts to manage the container lifecycle (start, stop, connect, stats), and test harnesses that generate synthetic nodes to stress-test both the \build\ and \develop\ commands. The runner supports configurable memory limits, node counts, and node sizes, and can optionally use jemalloc for memory allocation to help identify optimization opportunities in Gatsby's build process.

benchmarks/docker-runner · high confidence

New Emotion styling example for Gatsby

The 'using-emotion' example site now includes a demonstration of Emotion's styling capabilities, showcasing the use of the Global component for global resets, the styled API for component creation, and the css prop for inline styling within a Gatsby page.

examples/using-emotion · high confidence

New MD benchmark site with data-update webhooks

A new Gatsby-based benchmark for MD pages has been added to the \benchmarks/md\ directory. This site generates mock data during installation and supports building a configurable number of pages. It includes a \data-update.ts\ script that can modify article content and trigger external webhooks via the \BENCHMARK\_MD\_UPDATE\_WEBHOOKS\ environment variable, enabling automated data refresh scenarios for benchmarking.

benchmarks/md · high confidence

New Peril automation rules and validation tests

The Peril configuration now includes several new automation rules: issues and pull requests are automatically labeled with 'status: triage needed'; empty issue bodies trigger a comment requesting more information; issue titles are analyzed to auto-apply labels like 'type: question or discussion' or 'type: documentation'; pull requests opened against the read-only starter repository are automatically closed with a redirect comment; and pull requests with the 'bot: merge on green' label are automatically merged when checks pass. Additionally, a scheduled task sends Slack notifications for stale issues, and comprehensive tests have been added to validate YAML schemas for authors, creators, sites, and starters.

peril · high confidence

New Redux examples demonstrating interaction-based and page-based code splitting

Added two new Gatsby examples that showcase strategies for reducing bundle size by splitting Redux reducers. The \using-redux-w-interaction-code-splitting\ example implements a dynamic reducer registry, allowing heavy reducers and their associated data to be loaded on-demand only when a user performs a specific interaction (such as clicking a button), rather than at startup. The \using-redux-w-page-code-splitting\ example demonstrates a simpler approach where the Redux store and its reducers are configured and loaded specifically when navigating to pages that require them, keeping the initial bundle lean for pages that do not use Redux.

examples/using-redux-w-interaction-code-splitting, examples/using-redux-w-page-code-splitting · high confidence

New SQIP example demonstrating vectorized image previews

The \examples/using-sqip\ directory now contains a complete Gatsby example showcasing the \gatsby-transformer-sqip\ plugin. It includes a layout and polaroid-style components that render low-quality image previews (LQIP) using SVG-based primitives generated by SQIP. The example demonstrates how to inject the SQIP \dataURI\ as a base64 placeholder into Gatsby Image components to improve perceived load performance, along with documentation on configuration and usage patterns.

examples/using-sqip · high confidence

New Styletron example site

Added a new example site in the examples/using-styletron directory that demonstrates how to use Styletron with Gatsby. The example includes a basic page component using styled components for layout and typography, along with a link to the gatsby-plugin-styletron documentation.

examples/using-styletron · high confidence

New developer tooling and automation scripts for release and maintenance workflows

This change introduces a comprehensive suite of new scripts to the \scripts/\ directory to streamline release processes, package maintenance, and CI operations. Key additions include \backport.js\ and \create-release-notes.js\ for automating GitHub PRs and release documentation, a new \gatsby-changelog-generator/\ module for generating and updating package changelogs based on conventional commits, and \apply-patches.js\ for applying version-specific patches during major releases. Maintenance and publishing workflows are enhanced with \add-npm-owner/index.js\ and \check-publish-access/index.js\ for managing NPM access, \clear-package-dir.js\ for cleaning build artifacts, and \check-repo-fields.js\ for validating package metadata. Additionally, CI and testing infrastructure is improved with \assert-changed-files.sh\ for branch conflict detection, \e2e-test.sh\ for isolated end-to-end testing, and \check-versions.js\ for validating dependency versions, alongside utilities like \build-examples.sh\ and \check-lockfile.sh\.

scripts · high confidence

New example site demonstrating Emotion and PrismJS integration

The \examples/using-emotion-prismjs\ directory now contains a complete, runnable Gatsby example site that showcases syntax highlighting with PrismJS styled via Emotion. The site includes a blog index page, a blog post template, and a layout component that uses \@emotion/css\ for styling and \react-helmet\ for managing document head elements. It demonstrates how to apply custom PrismJS themes using Emotion's \injectGlobal\ and how to highlight specific code lines within markdown content.

examples/using-emotion-prismjs · high confidence

New gatsby-core-utils package with core utility functions and tests

The \gatsby-core-utils\ package has been introduced to centralize shared utilities used across Gatsby. This release adds comprehensive test coverage for core functions including \createContentDigest\, \cpuCoreCount\, \fetchRemoteFile\, \isCI\/\getCIName\, \joinPath\, \urlResolve\, \murmurhash\, and \mutex\. It also includes implementation files for CI detection (supporting Vercel, Heroku, and legacy ZEIT Now), CPU core counting with environment variable overrides, remote file fetching with caching and concurrency control, path joining, URL resolution, and content hashing.

packages/gatsby-core-utils · high confidence

New gatsby-plugin-benchmark-reporting package for internal benchmarking

A new \gatsby-plugin-benchmark-reporting\ package has been introduced to support internal benchmarking infrastructure. This plugin collects and reports environment data, metadata, and performance results during builds. By default, it logs results to the terminal, but when the \BENCHMARK\_REPORTING\_URL\ environment variable is set, it POSTs a JSON payload containing detailed metrics (such as timestamps, memory usage, file counts, and version information) to a specified endpoint. The package includes standard configuration files like \.babelrc\, \.gitignore\, and \.npmignore\ to ensure proper packaging and build behavior.

packages/gatsby-plugin-benchmark-reporting · high confidence

New gatsby-plugin-image codemod and CLI structure

The \gatsby-codemods\ package now includes a \gatsby-plugin-image\ codemod to help migrate from the legacy \gatsby-image\ package to the new \gatsby-plugin-image\ API. This codemod updates imports (e.g., \Img\ to \GatsbyImage\), transforms GraphQL queries (e.g., \fluid\/\fixed\ to \gatsbyImageData\), and handles component usage. The package also introduces a new CLI structure (\src/bin/cli.js\) that allows running codemods via \npx gatsby-codemods \<name\>\, and adds a \.babelrc\ configuration using \babel-preset-gatsby-package\.

packages/gatsby-codemods · high confidence

New remote image processing benchmark site

A new benchmark site has been added at benchmarks/image-processing/plugins/gatsby-source-remote-images to measure Gatsby's performance when sourcing and processing remote images. This plugin fetches a large dataset of JPG images from the Open Images Dataset, creates corresponding Gatsby nodes, and downloads the remote files using gatsby-source-filesystem's createRemoteFileNode function, providing a realistic workload for benchmarking image processing capabilities.

benchmarks/image-processing, benchmarks/image-processing/plugins/gatsby-source-remote-images · high confidence

New utility package for plugin validation, feature detection, and image CDN polyfills

The \gatsby-plugin-utils\ package is introduced to provide shared utilities for Gatsby plugins. It includes \validateOptionsSchema\ and \testPluginOptionsSchema\ for validating and testing plugin configuration options using Joi, \hasFeature\ for runtime feature detection (e.g., checking for \image-cdn\ support), and \isGatsbyNodeLifecycleSupported\ for checking API availability across Gatsby versions. Additionally, it provides a polyfill module (\polyfill-remote-file\) that implements Image CDN functionality, including resolvers for generating image URLs, handling resizing, and managing file downloads, allowing plugins to support the new Image CDN system in older Gatsby versions.

packages/gatsby-plugin-utils · high confidence

Reintroduces Gatsby v1-style persistent layout components

The gatsby-plugin-layout package now provides a drop-in replacement for the layout behavior removed in Gatsby v2. By implementing the wrapPageElement API for both browser and SSR environments, the plugin ensures that the specified layout component (defaulting to src/layouts/index.js) persists across page navigations without remounting. This allows users to maintain global state, handle page transitions, and preserve UI context that would otherwise be lost when the layout component is re-rendered on every route change.

packages/gatsby-plugin-layout · high confidence

Smartypants plugin now supports custom options

The gatsby-remark-smartypants plugin now accepts configuration options, allowing users to customize how smart quotes and dashes are rendered. By passing an options object (such as { dashes: "oldschool" }) to the plugin in gatsby-config.js, users can control the specific typographic style applied to their markdown content, rather than relying on default behavior.

packages/gatsby-remark-smartypants · high confidence

Snippet embedding now supports specific line ranges and named code blocks

The \gatsby-remark-embed-snippet\ plugin has been updated to allow embedding only specific portions of source files. Users can now target individual lines or ranges using the \\#L\ syntax (e.g., \embed:file.js\#L2-4\), and can extract named sections using \start-snippet\ and \end-snippet\ comments with a \{snippet: "name"}\ option. This enables more precise inclusion of code examples in documentation without embedding entire files.

packages/gatsby-remark-embed-snippet · high confidence

Structured plugin error reporting via setErrorMap

The integration test plugin now demonstrates the new reporter.setErrorMap API, allowing plugins to define custom error codes (1337, 12345) with dynamic text, levels, categories, and documentation URLs. When the PANIC\_IN\_PLUGIN environment variable is set, the plugin triggers these structured errors, verifying that the reporter correctly handles the new error map configuration and context passing.

integration-tests/structured-logging/plugins/structured-plugin-errors · high confidence

Styleguide example now features interactive code previews with syntax highlighting

The styleguide example has been updated to include a new ComponentPage template that renders interactive, live-editable code examples for each component. This change introduces a ComponentPreview component powered by react-live, which allows users to view and modify code snippets directly in the browser. To support this, a custom Prism syntax highlighting theme (Base16 Atelier Sulphurpool Light) and associated editor styles have been added, ensuring that the code blocks are visually distinct and readable. The example also includes a foundational Button component to demonstrate these new capabilities.

examples/styleguide · high confidence

Stylus plugin now uses CSS modules with named exports by default

The \gatsby-plugin-stylus\ has been updated to support CSS modules with ES module named exports. When importing a \.module.styl\ file, styles are now exported as named ES modules (e.g., \import { className } from './app.module.styl'\) instead of a default object, enabling better tree-shaking. This change is driven by the plugin's Webpack configuration, which now sets \modules: true\ and \namedExport: true\ for CSS modules, while allowing users to customize this behavior via the \cssLoaderOptions\ in the plugin configuration. The plugin also continues to support standard Stylus files, Stylus plugins, and PostCSS plugins.

packages/gatsby-plugin-stylus · high confidence

Support for TypeScript files in JavaScript frontmatter transformer

The gatsby-transformer-javascript-frontmatter plugin now parses frontmatter from TypeScript files (.ts and .tsx) in addition to standard JavaScript files (.js and .jsx). This is achieved by switching the Babel parser from Flow to TypeScript syntax when processing .ts/.tsx extensions, allowing developers to define frontmatter metadata in TypeScript source files.

packages/gatsby-transformer-javascript-frontmatter · high confidence

Support for responsive iframes in MDX content

The gatsby-remark-responsive-iframe plugin now wraps iframes and object tags in MDX files (JSX nodes) in a responsive elastic container with a fixed aspect ratio, in addition to standard Markdown. This ensures that embedded videos and other content scale proportionally and to the full width of their container, maintaining existing styles while removing explicit width and height attributes from the embedded element.

packages/gatsby-remark-responsive-iframe · high confidence

YAML transformer supports dynamic and fixed type names

The \gatsby-transformer-yaml\ plugin now allows users to customize the GraphQL node type name via the \typeName\ configuration option. Users can provide a static string to use a fixed type name for all YAML nodes, or supply a function that receives the node, the parsed object, and an \isArray\ flag to dynamically determine the type name based on the YAML content. This enables more flexible GraphQL schema design, such as grouping all YAML data under a single type or deriving types from data values.

packages/gatsby-transformer-yaml · high confidence

This entry introduces the \gatsby-remark-autolink-headers\ plugin, which adds GitHub-style hover links to markdown headers. Users can now customize the anchor behavior through options such as \elements\ to target specific header tags (e.g., \h1\, \h4\), \icon\ to provide a custom SVG or disable the icon entirely, \className\ for custom styling, \maintainCase\ to preserve original header casing in IDs, \removeAccents\ to strip accents from IDs, \enableCustomId\ to support \{\#custom-id}\ syntax, and \isIconAfterHeader\ to position the icon inline after the text. The plugin also includes built-in accessibility features, such as showing the anchor icon on focus, and handles client-side scrolling with \offsetY\ support via Gatsby's \shouldUpdateScroll\ API.

packages/gatsby-remark-autolink-headers · high confidence

gatsby-remark-katex now passes plugin options to KaTeX

The gatsby-remark-katex plugin now accepts configuration options (such as strict mode) via the plugin's options object in gatsby-config.js and forwards them directly to the KaTeX rendering engine. This allows users to customize KaTeX's behavior, such as handling of unsupported TeX commands, without modifying the plugin source code.

packages/gatsby-remark-katex · high confidence

Removals

Gatsby Recipes is deprecated and removed from the core package

The \gatsby-recipes\ package has been moved to \deprecated-packages\ and removed from the main \gatsby\ distribution as of version 4.5.0. Users who still require this "infrastructure as code" feature must install \gatsby-cli@4.4.0\ to access it. The package remains available in this deprecated location for reference, including its documentation, MDX recipe definitions, and build configuration, but it is no longer actively maintained or included in standard Gatsby installations.

deprecated-packages/gatsby-recipes · high confidence

Removal of the deprecated Gatsby Admin package

The \gatsby-admin\ package, an experimental visual interface for configuring Gatsby sites, has been removed from the repository. This change eliminates the \\\\_admin\ route and the associated administrative UI components, meaning users can no longer manage plugins, themes, or site metadata through this interface.

deprecated-packages/gatsby-admin · high confidence

Architecture

Relocation of deprecated Gatsby packages to isolated directories

The \gatsby-plugin-gatsby-cloud\, \gatsby-telemetry\, and \gatsby-transformer-javascript-static-exports\ packages have been moved into the \deprecated-packages/\ directory. This change isolates these legacy components from the main source tree, reflecting their deprecated status and preparing them for eventual removal without affecting the core Gatsby build or development workflows.

deprecated-packages/gatsby-plugin-gatsby-cloud, deprecated-packages/gatsby-telemetry, deprecated-packages/gatsby-transformer-javascript-static-exports · high confidence

Behavioural changes

Add wrapRootElement APIs to Apollo and Redux example plugins

The example plugins for Apollo Client and Redux now implement the \wrapRootElement\ API in both their browser and SSR entry points. This ensures that the Apollo client provider and Redux store provider are correctly injected into the React tree during both client-side rendering and server-side rendering, aligning these examples with the standard Gatsby plugin lifecycle for root element wrapping.

examples/using-multiple-providers/plugins/gatsby-plugin-apollo-client, examples/using-multiple-providers/plugins/gatsby-plugin-redux · high confidence

Adds global type declarations for Gatsby build context and CDN generators

A new global type definition file (global.d.ts) has been added to the types package, declaring the \CFLAGS\ constant (specifically GATSBY\MAJOR) and extending the NodeJS Global interface. This interface now includes a \\_GATSBY object containing build metadata (buildId, root) and optional paths for image and file CDN URL generator modules, alongside a polyfill for the remote file cache. This change provides TypeScript with the necessary type information for these global runtime variables used during the build process.

types · high confidence

Babel plugin for removing GraphQL queries is rewritten in TypeScript

The \babel-plugin-remove-graphql-queries\ package has been converted from JavaScript to TypeScript. This change includes adding a \tsconfig.json\ for configuration, a \.babelrc\ to use the \babel-preset-gatsby-package\ for building, and new \.gitignore\ and \.npmignore\ files to manage build artifacts. The core logic is now in \src/index.ts\, accompanied by a comprehensive test suite in \src/\_\tests\\_/index.ts\ that uses Jest snapshots to verify the plugin's behavior, such as transforming \useStaticQuery\ and handling \StaticQuery\ components.

packages/babel-plugin-remove-graphql-queries · high confidence

Client-only paths example now uses @reach/router with fade transitions

The client-only paths example has been updated to demonstrate routing via @reach/router instead of the previous implementation. The new layout includes a navigation bar with links to multiple pages, and page transitions are handled using react-transition-group to provide a fade effect when navigating between client-only routes.

examples/client-only-paths · high confidence

CoffeeScript plugin now uses Babel and coffee-loader for compilation

The \gatsby-plugin-coffeescript\ has been updated to compile \.coffee\ files by chaining \babel-loader\ with \coffee-loader\ in the Webpack configuration. This change addresses ES6 export compatibility issues by ensuring CoffeeScript code is processed through Babel, and includes updated tests to verify the new compilation pipeline.

packages/gatsby-plugin-coffeescript · high confidence

Default starter updated to use Gatsby Head API and modern component structure

The default starter has been completely rewritten to align with current Gatsby best practices. Pages now use the new Head API (exporting Head components) for metadata instead of the legacy Helmet approach, and data fetching relies on useStaticQuery rather than the deprecated StaticQuery. The UI has been modernized with CSS modules for component styling, a new layout component structure, and an updated header. Additionally, the starter now includes demonstration pages for TypeScript support, Server Side Rendering (using getServerData), and Deferred Static Generation.

starters/default · high confidence

Deprecation of gatsby-plugin-guess-js

The gatsby-plugin-guess-js package has been deprecated. The plugin's source code has been replaced with a no-op entry point (index.js), and the original implementation files (gatsby-node.js, gatsby-ssr.js, gatsby-browser.js) have been moved into a src directory. While the historical changelog and documentation remain in the package, the plugin no longer performs any functionality, such as prefetching resources based on Google Analytics data.

deprecated-packages/gatsby-plugin-graphql-config, deprecated-packages/gatsby-plugin-guess-js · high confidence

Deprecation of gatsby-plugin-react-helmet in favor of the Gatsby Head API

The \gatsby-plugin-react-helmet\ package now displays a deprecation notice in the \onPreInit\ lifecycle, informing users that Gatsby has built-in support for modifying the document head via the new Head API. While the plugin's \onRenderBody\ implementation remains to support existing sites (rendering head components, HTML attributes, and body attributes from React Helmet), users are encouraged to migrate to the native Head API for better performance and React compatibility.

packages/gatsby-plugin-react-helmet · high confidence

E2E tests now deploy to Netlify instead of local serve

The adapter end-to-end test suite has been updated to deploy applications to the Netlify platform rather than running them locally via \ntl serve\. This change introduces a new deployment script that handles authentication, creates a deploy alias, extracts the deploy ID, and runs tests against the live URL. It also includes logic to gracefully skip execution when the \NETLIFY\_AUTH\_TOKEN\ is missing, which is expected for forked pull requests, and ensures cleanup by deleting the deployed project after tests complete.

e2e-tests/adapters/scripts · high confidence

Excel transformer normalizes legacy option aliases and standardizes build configuration

The \gatsby-transformer-excel\ plugin now accepts the standard \raw\ and \defval\ options for the underlying \js-xlsx\ library, while maintaining backward compatibility by automatically aliasing the legacy \rawOutput\ and \defaultValue\ options. This ensures consistent data handling for type conflicts and default values. Additionally, the package now includes a \.babelrc\ file to use \babel-preset-gatsby-package\, standardizing the build process for the plugin.

packages/gatsby-transformer-excel · high confidence

Flow plugin now validates configuration and uses explicit Babel preset resolution

The gatsby-plugin-flow now includes a plugin options schema that rejects invalid configuration options (such as unknown fields) with warnings, ensuring users catch misconfigurations early. Additionally, the plugin explicitly resolves the @babel/preset-flow package using require.resolve when setting the Babel preset, which improves compatibility with strict module resolution environments like Plug'n'Play (PnP).

packages/gatsby-plugin-flow · high confidence

FullStory plugin now uses the Edge tracking endpoint

The gatsby-plugin-fullstory has been updated to load the FullStory tracking script from the new Edge endpoint (edge.fullstory.com) instead of the previous fullstory.com domain. This change is applied in the plugin's server-side rendering logic, which injects the tracking code into the page head only in production environments. The plugin also includes tests to verify that the script is correctly injected with the configured organization ID.

packages/gatsby-plugin-fullstory · high confidence

Gatsby Starter Blog updated to use the Head API and modern React patterns

The Gatsby Starter Blog has been updated to align with modern Gatsby practices. The starter now uses the \Head\ export for defining page metadata (replacing the legacy Helmet approach) and \useStaticQuery\ for data fetching. It also includes a new SEO component that automatically generates Open Graph and Twitter Card meta tags, and the Bio component now utilizes \StaticImage\ for optimized avatar rendering.

starters/blog · high confidence

Gatsby starters now use the 0BSD license and include Prettier configuration

The default and blog starters have switched their licensing from MIT to the BSD Zero Clause License (0BSD), simplifying the legal terms for users. Additionally, these starters now ship with Prettier configuration files (\.prettierrc\ and \.prettierignore\) to enforce consistent code formatting out of the box, and the blog starter's \gatsby-config.js\ has been updated to make the \theme\_color\ property optional within the manifest plugin settings.

starters · high confidence

Gatsbygram example site restructured with new components and layout

The Gatsbygram example site has been reorganized into a new component-based structure, introducing dedicated files for the Avatar, Post, PostDetail, and Modal UI elements, alongside a centralized Layout component and utility modules for typography and responsive presets. This change updates the visual presentation and interaction model of the example, including the implementation of a modal view for post details and refined responsive styling, while maintaining the core functionality of displaying a feed of posts.

examples/gatsbygram · high confidence

GraphiQL IDE upgraded to v2 with new plugins and Gatsby-specific features

The GraphiQL interface used at /\\\_graphql has been upgraded to GraphiQL v2, introducing the GraphiQL Explorer plugin for visual schema interaction and the GraphiQL Code Exporter plugin for generating ready-to-run code snippets (such as Page Queries and useStaticQuery). The IDE now supports Gatsby-specific capabilities including a 'Refresh Data Source' button in the toolbar, automatic loading of external fragments, and improved handling of implied fragments for autocompletion and validation. The underlying build system has also been updated to use Webpack 5.

packages/gatsby-graphiql-explorer · high confidence

Hacker News source plugin adopts Gatsby v2 schema customization API

The gatsby-source-hacker-news plugin has been updated to use the Gatsby v2 architecture, specifically replacing the deprecated node creation methods with the schema customization API. This change introduces explicit GraphQL type definitions for HNStory and HNComment nodes, including a @dateformat directive for time fields and a @childOf directive to establish the parent-child relationship between stories and comments. For users, this ensures compatibility with modern Gatsby versions and provides a more robust, declarative schema for querying Hacker News data.

packages/gatsby-source-hacker-news · high confidence

Introduce local npm registry for safer package development

The gatsby-dev-cli now supports a local Verdaccio npm registry (enabled via --force-install or automatically in Yarn workspaces) to publish and install Gatsby packages, replacing the previous file-copying mechanism for dependency resolution. This change ensures that package dependencies are correctly resolved and installed from the local registry, preventing issues with mismatched versions in workspaces and allowing developers to test changes that affect package dependencies without manually managing node\_modules.

packages/gatsby-dev-cli · high confidence

Isolate JSS style sheets per page during server-side rendering

The \gatsby-plugin-jss\ now maintains a separate \SheetsRegistry\ for each page path during server-side rendering. This change ensures that CSS styles generated for one page do not leak into or conflict with styles on other pages, providing cleaner and more predictable server-side rendered output.

packages/gatsby-plugin-jss · high confidence

JSON transformer now supports dynamic type naming and improved error reporting

The \gatsby-transformer-json\ plugin now allows the \typeName\ configuration option to accept a function, enabling dynamic GraphQL node types based on the JSON content or source file (e.g., using a field value like \object.funny\ to determine the type). Additionally, JSON parsing errors now include specific hints about the problematic file path or node ID to simplify debugging, and the plugin explicitly ignores non-File nodes with JSON media types to prevent unexpected behavior.

packages/gatsby-transformer-json · high confidence

MDX plugin restructured for ESM and modern tooling

The \gatsby-plugin-mdx\ package has been restructured to support ES Modules (ESM) and modern build standards. A new \.babelrc.js\ configuration enables ESM output via \babel-preset-gatsby-package\, and the main entry point (\gatsby-node.js\) now delegates to the compiled \dist/\ directory. The plugin also introduces a robust test suite covering core functionalities such as MDX compilation, frontmatter parsing, and layout loading, alongside updated documentation in the README to reflect ESM usage.

packages/gatsby-plugin-mdx · high confidence

Manifest plugin refactoring and test coverage

The \gatsby-plugin-manifest\ package has been refactored to improve build reliability and test coverage. The plugin now generates icons sequentially to prevent resource contention, ensures icon paths correctly respect the site's path prefix in hybrid mode, and creates output directories recursively to avoid build failures. Additionally, the plugin's test suite has been expanded to cover localization behavior, cache-busting modes, and icon generation logic.

packages/gatsby-plugin-manifest · high confidence

Markdown transformer plugin options schema validation

The \gatsby-transformer-remark\ plugin now enforces strict validation on its configuration options. Users must provide \footnotes\, \gfm\, and \jsFrontmatterEngine\ as booleans, and \plugins\ as an array; invalid types will now result in clear error messages during build time rather than silent failures or runtime issues.

packages/gatsby-transformer-remark · high confidence

Migrate E2E tests to Head API

The E2E test components in the path-prefix test suite have been updated to use Gatsby's Head API for SEO management. The layout component now utilizes the \Slice\ component to render the header, and the SEO component has been rewritten to use \useStaticQuery\ and the \Head\ API pattern (implied by the migration context and component structure) to inject meta tags, replacing previous implementations.

e2e-tests/path-prefix/src/components · medium confidence

Migrate gatsby-page-utils to TypeScript

The \gatsby-page-utils\ package has been migrated from JavaScript to TypeScript. This change introduces native TypeScript support for core utilities including \createPath\, \validatePath\, \ignorePath\, \watchDirectory\, and the new \applyTrailingSlashOption\ function, which handles trailing slash configuration for generated page paths. The migration includes updated build configuration via \.babelrc\ and \tsconfig.json\, and adds comprehensive test coverage for the path manipulation and validation logic.

packages/gatsby-page-utils · high confidence

Migrate screenshot queue from better-queue to fastq

The \gatsby-transformer-screenshot\ plugin has replaced the \better-queue\ library with \fastq\ for managing concurrent screenshot requests. This change updates the internal queue implementation to improve reliability and performance when processing multiple URLs, while maintaining the same concurrency limits and error-handling behavior for users.

packages/gatsby-transformer-screenshot · high confidence

NPM package search plugin now includes README content in GraphQL nodes

The \gatsby-source-npm-package-search\ plugin has been updated to fetch and expose README content for discovered packages. It now creates a linked \NPMPackageReadme\ node for each package, allowing users to query the markdown content via \childMarkdownRemark\. For packages where the search index does not provide a README, the plugin attempts to fetch the file from unpkg as a fallback, ensuring that documentation content is available in the GraphQL layer.

packages/gatsby-source-npm-package-search · high confidence

Plugin now strips 'plugins' option and enforces scoped name generation

The \gatsby-plugin-react-css-modules\ implementation has been updated to explicitly delete the \plugins\ property from the plugin options before passing them to \babel-plugin-react-css-modules\, ensuring that user-provided plugin arrays are not passed down. Additionally, the plugin now sets a default \generateScopedName\ of \\[name\]--\[local\]--\[hash:base64:5\]\ and configures \webpackHotModuleReloading\ based on the \NODE\_ENV\, while still allowing other options to be spread in.

packages/gatsby-plugin-react-css-modules · high confidence

Plugin now uses onCreateWebpackConfig to disable sourcemaps

The \gatsby-plugin-no-sourcemaps\ implementation has been updated to use the \onCreateWebpackConfig\ lifecycle API instead of the deprecated \modifyWebpackConfig\. This change ensures the plugin correctly disables JavaScript sourcemaps (by setting \devtool: false\) during the \build-javascript\ stage, aligning with current Gatsby plugin standards and fixing compatibility issues with newer Gatsby versions.

packages/gatsby-plugin-no-sourcemaps · high confidence

RSS feed plugin enforces required options and validates GraphQL queries

The \gatsby-plugin-feed\ now requires the \title\, \output\, \query\, and \serialize\ fields for each feed configuration, replacing previous warnings with strict validation. It also validates that the \query\ strings are syntactically correct GraphQL, throwing an error if they are not. This ensures that feed generation fails early with clear messages when configuration is incomplete or malformed, rather than producing silent errors or incomplete feeds.

packages/gatsby-plugin-feed · high confidence

Redesign of the Drupal example site with new layout and typography

The \examples/using-drupal\ site has been visually redesigned and restructured. A new \DefaultLayout\ component introduces a header with a search prompt and login link, a branded 'Umami Food Magazine' title, and a footer with copyright information. The home page (\index.js\) now features a responsive grid layout for promoted recipes using \gatsby-image\ and \Link\ components, replacing previous static structures. A dedicated \Recipes\ page lists all recipes with links generated via the \gatsbyPath\ field. Styling is centralized in new utility files: \typography.js\ configures the 'Josefin Sans' and 'Josefin Slab' fonts with responsive base font sizes, while \constants.js\ defines a pale/dark yellow and dark gray color palette. A reusable \Container\ component manages content width and padding across the site.

examples/using-drupal · high confidence

Refactor styled-components example to use separate global styles

The styled-components example now imports a dedicated GlobalStyle component from a separate file instead of defining global styles inline or in a shared typography module. This change improves code organization by isolating global CSS resets and background styling into their own module, making the example easier to maintain and understand for users learning how to integrate styled-components with Gatsby.

examples/using-styled-components · high confidence

Refreshed example site design and migration to gatsby-plugin-image

The using-gatsby-image example site has been redesigned and updated to demonstrate the modern gatsby-plugin-image API. The site now uses the GatsbyImage and StaticImage components instead of the legacy gatsby-image, showcasing features like blur-up, dominant color, traced SVG, and WebP placeholders. The visual style has been refreshed using Emotion for styling, and the navigation and layout components have been updated to reflect the new design system.

examples/using-gatsby-image · high confidence

Reintroduce local Babel configuration support for component parsing

The \gatsby-transformer-react-docgen\ plugin now uses a local \.babelrc\ file to apply the \babel-preset-gatsby-package\ preset, ensuring that the transformer respects the site's specific Babel configuration when parsing React components. This change restores the ability to correctly handle complex source files in monorepos or sites with custom Babel setups, addressing previous issues where the transformer might fail to parse components due to missing or incorrect transformation rules.

packages/gatsby-transformer-react-docgen · high confidence

Remove ARIA role alert from gatsby-announcer

The gatsby-announcer component no longer sets the role="alert" attribute. This change removes the explicit ARIA alert role, which may affect how screen readers announce status updates to users relying on assistive technologies.

packages/gatsby · high confidence

Repository infrastructure and developer tooling overhaul

The repository has been restructured with a comprehensive set of new configuration files to standardize development workflows and improve maintainability. A new ESLint configuration (\.eslintrc.js\) enforces code style, including TypeScript support and specific rules for React and Babel. Babel compilation is now managed via \.babelrc.js\ using the \babel-preset-gatsby-package\ preset. The monorepo build and release process is configured through \lerna.json\ (set to independent versioning) and \renovate.json5\ for automated dependency updates. Testing infrastructure is standardized with a new Jest setup (\jest.config.js\, \jest.environment.ts\, \.jestSetup.js\) that includes a custom environment to properly clean up LMDB files after test suites. Additional files like \.editorconfig\, \.prettierrc.js\, \.dockerignore\, and \.gitpod.yml\ ensure consistent formatting, IDE behavior, and local development environments across the team.

(repo-wide) · high confidence

Resilient Sharp wrapper with automatic rebuild on failure

The \gatsby-sharp\ package now provides a wrapper around the \sharp\ image processing library that automatically detects and fixes missing or incompatible binaries. If the initial import of \sharp\ fails, the package triggers an \npm rebuild sharp\ command (with a 60-second timeout) and retries the import, ensuring image processing continues to work even if native binaries are missing for the current architecture. This change also includes a new test suite to verify the fallback rebuild behavior and standardizes the build configuration with Babel and TypeScript settings.

packages/gatsby-sharp · high confidence

SQIP transformer adds caching and robust error handling for image previews

The \gatsby-transformer-sqip\ plugin now caches generated vectorized image previews to disk and in memory, significantly reducing build times for repeated builds. It also ensures that failed asset downloads or unsupported file types do not break the build by returning null early or handling errors gracefully, and it uses the correct cache location for intermediate files.

packages/gatsby-transformer-sqip · high confidence

Scroll restoration now respects URL hash as the source of truth

The scroll management logic in \gatsby-react-router-scroll\ has been updated to prioritize the URL hash over previously stored scroll positions. When navigating to a page, if a hash is present in the URL, the browser will scroll to the corresponding element; otherwise, it restores the last known scroll position. This change ensures that anchor links (e.g., \\#section\) work reliably, even when navigating back to a page that was previously scrolled, addressing issues where stored scroll positions would override explicit hash navigation.

packages/gatsby-react-router-scroll · high confidence

Sitemap plugin rewritten with configurable query and custom page resolution

The \gatsby-plugin-sitemap\ has been rewritten to support flexible sitemap generation. Users can now provide a custom GraphQL \query\ to fetch page data, along with custom \resolveSiteUrl\, \resolvePages\, \resolvePagePath\, \filterPages\, and \serialize\ functions to control how the sitemap is built. The plugin now generates a \sitemap-index.xml\ file and splits sitemaps into multiple files based on the \entryLimit\ (default 45,000). It also respects the \pathPrefix\ and \basePath\ when generating URLs and the \\<link\>\ tag in the site head.

packages/gatsby-plugin-sitemap · high confidence

Stabilize Parcel output paths relative to the current working directory

The \@gatsbyjs/parcel-namer-relative-to-cwd\ package now ensures that build output paths are deterministic by preserving the directory structure of entry files relative to the current working directory, rather than relying on Parcel's default behavior which can vary based on the set of entries provided. This change prevents non-deterministic output structures (e.g., \dist/b.html\ vs \dist/sub/b.html\) and guarantees that the hierarchy in the output directory matches the hierarchy of the source files relative to the project root.

packages/gatsby-parcel-namer-relative-to-cwd · high confidence

Standardized Less loader configuration via dedicated option objects

The plugin now uses explicit \loaderOptions\ and \lessOptions\ objects to configure the underlying Less loader, replacing the previous flat option structure. This change aligns with the API updates in \less-loader\ v6 and allows users to pass loader-specific settings (such as \appendData\) and Less-specific settings (such as \modifyVars\ and \strictMath\) in a structured way. The plugin also continues to support \cssLoaderOptions\ for overriding \css-loader\ defaults and \postCssPlugins\ for additional PostCSS processing, ensuring that Less compilation behaves consistently across development and build stages.

packages/gatsby-plugin-less · high confidence

Stripe eCommerce tutorial refactored to function components and Stripe.js v2

The Stripe eCommerce tutorial example has been updated to use React function components instead of class components, and migrated to Stripe.js v2 by replacing the legacy Stripe script with the \@stripe/stripe-js\ library and its \loadStripe\ helper. The checkout flow now uses the \stripe.redirectToCheckout\ API with explicit \successUrl\ and \cancelUrl\ parameters, and product pricing is fetched via Gatsby's \useStaticQuery\ hook to support multiple price options per product.

examples/ecommerce-tutorial-with-stripe · high confidence

Support for HTML, MDX, and video elements in gatsby-remark-copy-linked-files

The plugin now copies linked files referenced in HTML \<img\> tags, MDX JSX nodes, and \<video\> elements (including those with src attributes and poster attributes), in addition to standard Markdown links and images. It also respects the assetPrefix configuration when generating output URLs.

packages/gatsby-remark-copy-linked-files · high confidence

Support for React's automatic JSX runtime in gatsby-plugin-emotion

The gatsby-plugin-emotion now detects when Gatsby is configured to use the automatic JSX runtime (via \jsxRuntime: 'automatic'\ in gatsby-config.js) and switches from the legacy \@emotion/babel-preset-css-prop\ to the modern \@emotion/babel-plugin\. This ensures that Emotion styles are correctly processed for projects adopting React's new JSX transform, while maintaining backward compatibility for existing setups that continue to use the classic runtime.

packages/gatsby-plugin-emotion · high confidence

Switch to accessible-nprogress for improved accessibility

The \gatsby-plugin-nprogress\ now uses the \accessible-nprogress\ library instead of the original \nprogress\. This change updates the plugin's core implementation to inject styles and configure the progress bar via the new library, ensuring better accessibility support for users while maintaining the same configuration options (such as \color\ and \showSpinner\).

packages/gatsby-plugin-nprogress · high confidence

Twitter plugin now lazy-loads widgets only when embedded content is present

The \gatsby-plugin-twitter\ has been updated to improve page load performance by deferring the Twitter widget script until it is actually needed. The plugin now checks for the presence of Twitter embed elements (tweets, timelines, follow buttons, or share buttons) on route updates; the Twitter JavaScript is injected and the widgets are loaded only if such elements are detected. This change ensures that pages without Twitter content do not incur the overhead of loading the external Twitter script, while still correctly hydrating embedded tweets when they appear.

packages/gatsby-plugin-twitter · high confidence

TypeScript plugin now supports modern JavaScript syntax and validates configuration options

The gatsby-plugin-typescript now automatically enables Babel plugins for optional chaining, nullish coalescing, and numeric separators, allowing these modern syntax features to work in TypeScript files without extra configuration. Additionally, the plugin now enforces a validation schema for its options (such as \isTSX\, \jsxPragma\, and \allExtensions\), providing clear error messages if invalid values are passed in \gatsby-config.js\.

packages/gatsby-plugin-typescript · high confidence

Typographic styles now load first to prevent overwriting

The plugin now ensures that Typography.js styles are injected at the very top of the document head. Previously, if other stylesheets loaded before the typography reset, they could overwrite the intended base styles. This change reorders the head components during the build process so that the typography styles always take precedence, guaranteeing consistent visual output.

packages/gatsby-plugin-typography · high confidence

Update Contentful example to use gatsby-plugin-image and file system routes

The Contentful example site has been modernized to align with current Gatsby standards. The layout and page components now exclusively use \gatsby-plugin-image\ (via \GatsbyImage\) for rendering images, replacing older image handling methods. The site structure has migrated from the legacy \createPages\ API to File System Routes, and the layout component now utilizes the \gatsby\ \Link\ component for navigation. Additionally, the example demonstrates localization features by displaying products in both English and German.

examples/using-contentful · high confidence

Update Medium example to use Gatsby v5 and GraphQL API

The Medium example has been migrated to Gatsby v5, updating the page component to use the modern \graphql\ import from \gatsby\ and implementing a layout component. The index page now queries \allMediumPost\ with a configurable limit, displaying post titles, author names, and preview images fetched from the Medium CDN.

examples/using-medium · high confidence

Update Redux example to use modern React patterns

The Redux example in the examples/using-redux directory has been updated to use modern React patterns, including functional components with PropTypes and the connect HOC for state management. The layout component now includes a counter feature that demonstrates Redux integration, and the page structure has been simplified to use a shared layout component across all pages.

examples/using-redux · high confidence

The 'using-page-loading-indicator' example now imports and uses the Link component from Gatsby for navigation between pages, replacing any previous implementation. This ensures the example demonstrates the correct pattern for client-side routing within Gatsby sites.

examples/using-page-loading-indicator · high confidence

Update using-mongodb example to use Gatsby v2 APIs

The using-mongodb example has been updated to align with Gatsby v2 conventions. The site now uses the new \Link\ component from Gatsby for internal navigation instead of standard anchor tags, imports \graphql\ directly from the \gatsby\ package, and utilizes the simplified \Helmet\ API from \react-helmet\. The data layer queries the \mongodbCloudDocuments\ type, reflecting the current schema of the \gatsby-source-mongodb\ plugin.

examples/using-mongodb · high confidence

Update using-remark-copy-linked-files example to Gatsby v2

The \using-remark-copy-linked-files\ example has been updated to align with Gatsby v2 conventions. The layout component now uses the Gatsby \Link\ component for navigation instead of standard HTML anchors, and the page templates (\index.js\, \blog-post.js\) utilize the new GraphQL query structure required by v2. Additionally, the example includes a new \Bio\ component and updated typography utilities to support the new layout and styling requirements.

examples/using-remark-copy-linked-files · high confidence

Updated Asciidoc example to use Gatsby v2 components and data layer

The Asciidoc example site has been updated to align with Gatsby v2 conventions. The layout component now imports and uses the Gatsby \Link\ component for navigation, and the page templates utilize the new GraphQL data layer (via \graphql\ and \pageQuery\ exports) to fetch Asciidoc content, replacing previous patterns. This ensures the example correctly demonstrates modern Gatsby best practices for routing and data querying.

examples/using-asciidoc · high confidence

The \using-page-transitions\ example has been updated to use the \Link\ component from \gatsby\ instead of standard HTML anchor tags. This change ensures that navigation between pages (such as the cat, dog, and long-page demos) triggers client-side transitions handled by the \react-transition-group\ wrapper, providing a smoother user experience without full page reloads.

examples/using-page-transitions · high confidence

Upgrade to PostCSS 8 and adopt postcss-loader v7 configuration

The \gatsby-plugin-postcss\ has been upgraded to support PostCSS 8, which requires migrating configuration from the legacy \plugins\ array to the \postcssOptions.plugins\ structure within the \postcss-loader\ options. This change aligns the plugin with \postcss-loader\ v7 and ensures that PostCSS configuration is correctly loaded via \postcss.config.js\ or plugin options. Users may need to update their \gatsby-config.js\ to use the new \postcssOptions\ structure if they previously passed plugins directly, and should ensure their PostCSS plugins are compatible with PostCSS 8.

packages/gatsby-plugin-postcss · high confidence

WordPress source plugin rewritten in TypeScript with new architecture documentation

The \gatsby-source-wordpress\ plugin has been completely rewritten in TypeScript, replacing the previous JavaScript implementation. This change introduces a new build configuration via \.babelrc.js\ to handle the TypeScript source files and includes a comprehensive \ARCHITECTURE.md\ document that details the plugin's internal structure, including its Redux-based state management, remote schema ingestion, and node sourcing steps. The update also adds new configuration files for linting and formatting (\.eslintignore\, \.prettierignore\) and updates the test suite to verify that plugin options documentation is correctly generated from the new schema.

packages/gatsby-source-wordpress · high confidence

XML transformer now exposes child nodes via xmlChildren field

The gatsby-transformer-xml plugin has been updated to prevent conflicts with the xml-parser library's internal 'children' key by renaming it to 'xmlChildren' in the generated GraphQL nodes. This change ensures that XML data is correctly exposed for querying without breaking existing Gatsby node structures, allowing users to access nested XML elements via the new xmlChildren field in their GraphQL queries.

packages/gatsby-transformer-xml · high confidence

babel-preset-gatsby is rewritten in TypeScript with new configuration options and optimizations

The \babel-preset-gatsby\ package has been rewritten in TypeScript, introducing support for the React 17+ automatic JSX transform via new \reactRuntime\ and \reactImportSource\ options, and adding a new \optimize-hook-destructuring\ plugin that converts array destructuring of React hooks into object destructuring for better performance. The preset now uses \core-js\ version 3 for polyfills and includes updated test coverage with custom snapshot serializers to verify the new configuration behaviors.

packages/babel-preset-gatsby · high confidence

gatsby-image package moved to deprecated location

The \gatsby-image\ package has been relocated to the \deprecated-packages\ directory, signaling that it is no longer actively maintained. The package now includes a README explicitly stating that it is deprecated in favor of the \gatsby-plugin-image\, which offers better performance and a simpler API. The codebase retains its core functionality, including support for fixed and fluid images, art direction, and an Internet Explorer polyfill, but users are encouraged to migrate to the new plugin.

deprecated-packages/gatsby-image · high confidence

The gatsby-link package has been reorganized to improve code clarity and maintainability. The core Link component logic now relies on dedicated helper modules for path parsing (parse-path), local link detection (is-local-link), and path rewriting (rewrite-link-path), which handle prefixing, trailing slash options, and relative link resolution. Additionally, the package now includes comprehensive Jest snapshot and unit tests for the Link component and its helper functions, ensuring robust behavior for active states, path prefixes, and external link warnings.

packages/gatsby-link · high confidence

gatsby-plugin-create-client-paths is deprecated and disabled

The \gatsby-plugin-create-client-paths\ plugin has been deprecated and is now effectively disabled. The main entry point (\index.js\) has been replaced with a no-op, meaning the plugin no longer performs any actions during the build. Users relying on this plugin for client-only routes should migrate to the File System Route API, as detailed in the updated README.

deprecated-packages/gatsby-plugin-create-client-paths · high confidence

gatsby-plugin-netlify-cms moved to deprecated-packages

The \gatsby-plugin-netlify-cms\ package has been relocated to the \deprecated-packages\ directory. The package is now deprecated in favor of \gatsby-plugin-decap-cms\, as indicated by the README. The move includes the addition of standard package configuration files such as \.babelrc\, \.gitignore\, and \.npmignore\, and the source code remains intact within the new location.

deprecated-packages/gatsby-plugin-glamor, deprecated-packages/gatsby-plugin-netlify-cms · high confidence

gatsby-plugin-remove-trailing-slashes moved to deprecated-packages and made non-functional

The \gatsby-plugin-remove-trailing-slashes\ package has been relocated to the \deprecated-packages\ directory. The plugin's main entry point (\index.js\) is now a no-op, effectively disabling its previous behavior of stripping trailing slashes from paths. Additionally, the plugin now emits a deprecation warning during initialization, directing users to Gatsby's built-in \trailingSlash\ configuration option instead.

deprecated-packages/gatsby-plugin-remove-trailing-slashes · high confidence

gatsby-remark-images: tracedSVG placeholder removed, schema validation added, and build tooling standardized

The \tracedSVG\ option for generating SVG placeholders is no longer supported; the plugin now falls back to the base64 blur-up effect, and using \tracedSVG\ triggers a deprecation warning. A \pluginOptionsSchema\ has been added to \gatsby-node.js\ to validate configuration options (such as \showCaptions\ accepting arrays or \wrapperStyle\ accepting functions), and comprehensive Jest tests have been added to verify this schema and the runtime behavior of \onRouteUpdate\ (specifically the \backgroundColor\ box-shadow application). Additionally, the package now uses \babel-preset-gatsby-package\ via a new \.babelrc\ and standardizes its build/test file structure with new \.gitignore\ and \.npmignore\ files.

packages/gatsby-remark-images · high confidence

gatsby-source-graphql plugin rewritten with batching and custom fetch support

The gatsby-source-graphql plugin has been rewritten to support query batching via a new DataLoader-based link, allowing multiple GraphQL requests to be merged into a single network call for improved performance. It now includes a custom fetch wrapper that throws errors for HTTP status codes 400 and above, and allows users to provide a custom fetch function or Apollo Link for advanced network configuration. The plugin also introduces a \transformSchema\ option for custom schema manipulation and uses Gatsby's embedded GraphQL package instead of a local dependency.

packages/gatsby-source-graphql · high confidence

gatsby-source-shopify plugin rewritten for Shopify API 2025-01

The \gatsby-source-shopify\ plugin has been completely rewritten to support the Shopify Admin API version 2025-01 (up from 2024-04). This major update introduces a new data sourcing architecture using Shopify's bulk operations API, which improves build performance and reliability for large stores. The plugin now exposes a comprehensive GraphQL schema including products, collections, orders, locations, and metafields, with support for custom sales channels and configurable image handling (CDN vs. downloaded). Existing configurations may require updates to align with the new API version and schema structure.

packages/gatsby-source-shopify · high confidence

Fixes

Add plugin options schema validation to local integration test plugin

The local plugin used in the structured-logging integration tests now defines a \pluginOptionsSchema\ in \gatsby-node.js\ using Joi. This schema enforces that the \required\ option is a mandatory boolean and allows an optional \optionalString\ parameter, ensuring that the plugin's configuration is validated against these rules during the build process.

integration-tests/structured-logging/plugins/local-plugin · high confidence

Test coverage

Add 404 and DSG test pages to LMDB regeneration integration test; Add Contentful E2E test pages for content and media rendering; Add Contentful E2E test suite; Add Contentful end-to-end test suite; Add E2E test components for Gatsby Head API, Slices, and Script performance; Add E2E test pages for collection routing with Head API support; Add Gatsby pipeline integration test site; Add TSX support for gatsby-browser and gatsby-ssr entry points; Add YAML loader test page for Gatsby development runtime; Add build configuration and test coverage for gatsby-transformer-documentationjs; Add development runtime E2E test components; Add e2e test fixtures for query-on-demand loading behavior; Add e2e test fixtures for wrapRootElement and Script integration; Add e2e test for page recreation on node mutations; Add e2e test page for materialized gatsbyPath in collection routing; Add e2e test theme for Gatsby theme extension and hot reload scenarios; Add e2e tests for .babelrc support in dev and prod runtimes; Add end-to-end tests for path-prefix and asset-prefix functionality; Add end-to-end tests for theme shadowing and local themes; Add integration tests for build and SSR error handling; Add path-prefix E2E test pages using Head API and Gatsby Image; Add production runtime E2E test pages for Slices, 500 errors, and Script component strategies; Add script to serve assets separately for path-prefix e2e tests; Add visual regression test suite for Gatsby image components; Added E2E test components for StaticQuery and useStaticQuery patterns; Added Jest unit tests for the using-jest example; Added MDX e2e test helper scripts for file history and updates; Added Netlify adapter end-to-end tests; Added SSR test pages for dynamic and static paths; Added TypeScript e2e test plugin to verify pluginOptionsSchema handling; Added TypeScript test fixtures for local plugin compilation; Added e2e test fixtures for query data cache scenarios; Added e2e test pages for CSS preprocessors and modules; Added e2e test suite for Gatsby theme development runtime; Added e2e test templates for Slices API and static sibling rendering; Added e2e tests for StaticImage unmount handling; Added e2e tests for static query handling with special characters in file paths; Added end-to-end tests for gatsby-plugin-mdx; Added error-handling test pages for Fast Refresh E2E tests; Added integration test fixtures for long-term caching of JS bundles; Added integration test fixtures for webpack plugin configuration; Added integration tests for cache resilience with source and transformer plugins; Added integration tests for key-value cache persistence and invalidation; Added local theme plugin for end-to-end testing; Added main-thread occupation hook for idle strategy testing; Added regression test for Gatsby query extraction bug; Added snapshot tests for plugin-add handler; Added test fixtures for CommonJS and ESM remark plugins; Added test fixtures for ESM plugin support; Added test fixtures for Yarn workspace shadowing; Added test fixtures for worker plugin lifecycle and job handling; Added test plugin with GraphQL mutations for featured image management; Added tests for CoreJSResolver and static query mapping utilities; Added utility scripts for e2e test instrumentation and data handling; E2E tests added for the Gatsby Head function export API; Expanded MDX end-to-end test coverage for edge cases and security; Expanded integration tests for Gatsby API functions; MDX test suite updated for built-in slugs and disabled JS frontmatter; Medium source plugin adds test coverage and standardizes build configuration; New E2E test suite for Gatsby Adapters; New E2E test suite for the trailingSlash configuration option; New MDX end-to-end test suite for Gatsby; New e2e test plugin for verifying remark sub-cache functionality; New integration test suites for build artifacts and cache resilience; New production runtime e2e test suite with Cypress and env-var security checks; Standardized build configuration and test infrastructure for gatsby-source-lever; TOML transformer adds build configuration and test coverage; gatsy-source-filesystem: Initial project scaffolding and test suite.

Dependencies

Routine dependency updates across starters and examples

This release updates dependencies in the Gatsby starters and example sites to keep them aligned with the latest stable versions of the Gatsby packages and their own internal requirements. These changes ensure that new projects and reference implementations benefit from current bug fixes and compatibility improvements without altering the core framework behavior.

(dependencies) · high confidence

Updated bundled Yarn to version 1.21.0

The project's bundled Yarn binary has been upgraded from the previous version to 1.21.0. This ensures that the local package manager used for dependency resolution and installation is updated to the latest stable release in the 1.x series, bringing any associated bug fixes or performance improvements provided by Yarn itself.

.yarn · high confidence

Housekeeping

Placeholder update scripts added for markdown benchmarks

Stub scripts have been added to the markdown\_id and markdown\_slug benchmark directories. These files currently contain no-ops and serve as placeholders for future data update logic, ensuring the directory structure is ready for implementation without altering current benchmark behavior.

_benchmarks/markdown\_id/scripts, benchmarks/markdown\slug/scripts · 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

Score

  • CAI 31 → 49 (+18.7)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 53 → 66 (+13.2)
  • Architecture 47 → 60 (+12.8)
  • Maturity 74 → 73 (-1.6)
  • Readiness 14 → 43 (+29.5)
  • Security 39 → 48 (+9.2)
  • Accessibility 58 (new)

Resolved (165)

  • (anonymous) (cognitive 33) (packages/gatsby-source-wordpress/generate-plugin-options-docs.js)
  • (anonymous) (cyclomatic 29) (packages/gatsby-source-wordpress/generate-plugin-options-docs.js)
  • Boundary-crossing change coupling: babel-helpers.ts ↔ image-data.ts (packages/gatsby-plugin-image/src/babel-helpers.ts)
  • Boundary-crossing change coupling: gatsby-node.js ↔ html.ts (integration-tests/artifacts/gatsby-node.js)
  • Boundary-crossing change coupling: gatsby-node.js ↔ types.ts (integration-tests/artifacts/gatsby-node.js)
  • Boundary-crossing change coupling: index.js ↔ html.ts (integration-tests/artifacts/tests/index.js)
  • Boundary-crossing change coupling: test-helpers.js ↔ gatsby-node.ts (integration-tests/functions/test-helpers.js)
  • Change coupling: fetch.js ↔ fetch.js (packages/gatsby-source-contentful/src/tests/fetch.js)
  • Change coupling: gatsby-node.js ↔ gatsby-node.js (packages/gatsby-plugin-preact/src/tests/gatsby-node.js)
  • Change coupling: gatsby-node.js ↔ gatsby-node.js (packages/gatsby-remark-images/src/tests/gatsby-node.js)
  • Change coupling: gatsby-node.js ↔ gatsby-node.js (packages/gatsby-source-graphql/src/tests/gatsby-node.js)
  • Change coupling: handle-flags.ts ↔ handle-flags.ts (packages/gatsby/src/utils/tests/handle-flags.ts)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • …and 145 more

New (1380)

  • (anonymous) (cognitive 26) (packages/gatsby/cache-dir/app.js)
  • (anonymous) (cognitive 41) (packages/gatsby/cache-dir/production-app.js)
  • (anonymous) (cyclomatic 17) (packages/gatsby/cache-dir/app.js)
  • (anonymous) (cyclomatic 34) (packages/gatsby/cache-dir/production-app.js)
  • Banned license: @wordpress/block-library
  • CLI.render (cognitive 16) (packages/gatsby-cli/src/reporter/loggers/ink/cli.tsx)
  • CacheFolderResolver.constructor (cognitive 16) (packages/gatsby/src/utils/webpack/plugins/cache-folder-resolver.ts)
  • Concentrated knowledge decay
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (yarn.lock)
  • Critical CVE: [GHSA redacted] (starters/blog/package-lock.json)
  • Critical CVE: [GHSA redacted] (starters/gatsby-starter-minimal-ts/package-lock.json)
  • …and 1360 more

Changes since last survey

  • 8 commits — 3 feature/other, 5 fixes

By area

  • e2e-tests/adapters — 3 commits
  • packages/gatsby — 2 commits
  • .circleci/config.yml — 1 commit
  • integration-tests/gatsby-source-wordpress — 1 commit
  • packages/gatsby-dev-cli — 1 commit

Notable commits

  • fix: fix(gatsby): make lambda adapter helper dependencyless (#39689)
  • fix: fix(gatsby-dev-cli): rewrite optionalDependencies when publishing locally (#39682)
  • fix: fix(gatsby-transformer-remark): pin sanitize-html to last patch version not requiring node@22 (#39649)
  • fix: fix: ssr/dsg compatibility for node@24 lambda (#39653)
  • fix: fix: use node:module#createRequire directly (#39688)
  • change: ci: keep only the workspace lint actually needs (#39683)
  • change: ci: skip apt Valid-Until check in gatsby-source-wordpress test image (#39678)
  • change: test(adapter-e2e): add some Netlify specific cdn caching e2e tests (#39693)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

gatsbyjs/gatsby 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 25 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 8999a2ed4dd8b40bab6571f7d23c7d196ebdb83e — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-dd72cc24c749.