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.
2.1.0: useStaticQuery
2019-02-13
The 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
2019-03-19
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.
2.3.0: Telemetry
2019-03-26
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
2019-05-02
A widely requested feature, assetPrefix built by Dustin Schau allows users to host their site’s JavaScript and CSS assets on a separate url, a common pattern in enterprise apps.
2.5.0: Schema Inference Controls
2019-05-16
This release by Mikhail Novikov added controls to opt out of schema inference using GraphQL directives @dontInfer
. We also added resolver extensions including @link
and @fileByRelativePath
2.6.0: Ink for Gatsby CLI
2019-05-21
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
2019-05-23
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
2019-05-31
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
2019-06-11
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
2019-06-20
Support for Node 6 was dropped in this minor release.
2.11.0: Babel Transpilation for Dependencies
2019-06-27
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.
2.13.1: Themes
2019-07-02
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
2019-08-26
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
2019-08-30
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
2019-10-14
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
2019-10-21
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
2019-11-19
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.
2020
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!
Accessible routing
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.
Build performance
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.
Jobs API
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. 😉
What’s next?
You might’ve noticed a trend in our work last year. Lots of it focussed 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.
This includes
- 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.
❤️