Welcome to a special edition of the Gatsby Gazette. This one will recap everything we did in 2019. Well, not everything. But everything major enough that we can fit into this post.
For our more frequent readers who might already know much of this, we’ll follow up with a walkthrough of our plans for 2020.
Before we dive in, thank you, dear reader. If you’ve been contributing code to Gatsby, helping improve our documentation, reporting bugs and issues or even simply using it, you’ve enabled so much of the progress we’ve made and will continue to make this year. Our superpower is you, the Gatsby community.
The 2019 Recap
Let’s get into it then.
1348 folks started contributing to Gatsby in 2019.
Together, we made 5657 commits to Gatsby in 2019. That’s a 29% increase from 2018 (4364) and a 153% increase from 2017 (2236).
We released Gatsby 467 times in 2019. 😱 (Run
npm view gatsby time to display the full list)
Out of these, 18 were minor releases adding significant functionality to Gatsby. Let’s talk each of those.
useStaticQuery hook was the first minor release in 2019. Sid Chatterjee built this just in time for the first stable release of React Hooks.
2.2.0: Schema Customization
This was a huge milestone in the development of Gatsby’s GraphQL data layer. Built by Mikhail Novikov and Stefan Probst, this enabled users to declare their own custom GraphQL schema. Before this, your site’s schema was exclusively inferred by Gatsby leading to a dependency on data and making it brittle. Read more about Schema Customization in the release blog post.
Gatsby 2.3.0 marked the release of telemetry in Gatsby. Built by Jarmo Isotalo, Telemetry is anonymous analytics data that we send back to Gatsby to better understand the way our users interact with Gatsby CLI. This makes common errors visible to the team and enables them to fix them even sooner.
2.4.0: Asset Prefix
A widely requested feature,
2.5.0: Schema Inference Controls
This release by Mikhail Novikov added controls to opt out of schema inference using GraphQL directives
@dontInfer. We also added resolver extensions including
2.6.0: Ink for Gatsby CLI
Ward Peeters refactored Gatsby CLI to use Ink in this release. Ink is a library that enables writing CLIs in React. This was a hugely foundational release and enabled big improvements in the CLI. More about this coming soon! 😉
2.7.0: Merge User and Plugin Defined Types
This was follow up work to the Schema Customization feature, enabling users to extend types already defined by plugins. Stefan Probst also enabled support for merging different GraphQL schema definition types including SDL, typeBuilder and graphql-js.
2.8.0: Sorting for Resolved Fields
Another release by Stefan Probst, this added support for sorting and filtering for resolved fields (ones that are not on the Node itself). This enables users to filter and sort on fields that link to other Nodes, for example
frontmatter.author.name when author comes from a linked Node.
2.9.0: Per Page Manifest
This release by Anthony Marcar was a fundamental change to the Gatsby runtime, changing how page data is stored and fetched. Not only did this enable building larger Gatsby sites than before (we’re talking in the order of thousands of pages) but also reduced the overhead of loading Gatsby pages from a linearly growing metric to constant. Read more about this in the Per Page Manifest release blog post.
2.10.0: Drop Node 6
Support for Node 6 was dropped in this minor release.
2.11.0: Babel Transpilation for Dependencies
This release by Ward Peeters and Sid Chatterjee enabled babel transpilation for dependencies and as a result, added automatic polyfilling for third party packages, support for Gatsby queries in packages from npm and set the stage for Themes.
2.12.0: Custom Field Extensions
Another Stefan classic, this releases enabled users to write their own custom field extensions for reusable functionality to field revolvers.
This was a big one! Chris Biscardi and the rest of the team released the stable Themes API which had been experimental for a while. Along with Themes, they also added a couple of new themes based starters to make it easier to build them.
2.14.0: Better Split Chunks Config
Inspired by Next.js, Ward Peeters added better split chunk config to Gatsby’s base webpack config, making your site chunks more efficient.
2.15.0: Node Materialisation
Another big one! Mikhail Novikov rewrote much of Gatsby’s Node model to support arbitrary data stores in the future. This was done to enable faster data stores in the future and larger Gatsby sites.
2.16.0: Structured Logging
Michał Piechowiak and Sid Chatterjee released their work on the Structured logging effort in this release. Most of this was a ground-up rewrite of the way Gatsby prints logs and activities, enabling alternative UIs for Gatsby including a Gatsby Desktop app in the future.
2.17.0: App Data
Alex Fenton (contributor extraordinaire) moved the webpack compilation hash in Gatsby over to a separate file. This was a step forward for Anthony’s effort in 2.9.0, making site uploads incremental and reducing the number of changed files per build.
2.18.0: Schema Rebuilding
Vladimir Razuvaev (who recently joined the Gatsby team) killed it in his first month (😱) and added support for automatic Schema rebuilding in the Gatsby CLI. This previously required users to restart the Gatsby CLI when changing the schema of their Gatsby sites.
There’s a lot more that’s not included here including error message upgrades, several performance improvements, React prerelease tests, an in progress TS migration and more.
We started off this year on a solid note with the release of Gatsby Builds, the fastest way to build your Gatsby sites in the cloud. In OSS land, we’ve done plenty already as well.
Internationalizing Gatsby Docs
Nat Alison resumed her effort of helping internationalize the Gatsby documentation. We want Gatsby to be the most accessible way to build for the web. If you’re interested in contributing translations in a language of your choice, go check out the translation contribution guidelines!
Madalyn Parker released Accessible Client Side Routing in Gatsby in 2.19.8. These improvements enable people relying on screen readers to successfully navigate sites built with Gatsby.
Peter van der Zee has been working hard on making Gatsby faster. He’s already done some improvements which have made a big impact on speeding up Gatsby builds for large sites. On some sites, we’ve seen hour long builds dropping down to under 5 minutes.
Ward Peeters built the new Gatsby Jobs API which enables Gatsby to better distribute CPU intensive work like image processing and HTML generation to workers on local machines and the Cloud.
New RFC Process
Dustin Schau proposed a new RFC process late last year. The main difference is that we’ll be creating a new, top-level
rfcs folder within the gatsbyjs/gatsby monorepo and deprecate the old gatsbyjs/rfcs repo.
The main goal is to improve visibility and encourage more community engagement. Read more about the new RFC process in its RFC. 😉
You might’ve noticed a trend in our work last year. Lots of it focused on foundational improvements to Gatsby unlocking even bigger DX wins and new features that were just not possible before.
This year, we’re going to build on those improvements with a focus on improving the Gatsby Developer Experience.
- making the CLI faster and cleaner
- adding tools for consuming themes easily
- making switching data sources for your site even easier
- better error messaging
- scaling to hundreds of thousands of pages
We’re really looking forward to making Gatsby even better than it is! Thank you for reading and until next time.