GatsbyJS recently introduced an experimental feature called Gatsby Themes. This article presents a point of view on the same. An implementation of the same to support this article is available on GitHub and the project is called gatsby-atomic-themes

We at HCL-ERS have been using GatsbyJS since the initial version 1.0 and our open source github organization site is written using the same technology and have been keenly following it ever since. GatsbyJS has come a long way since then, adding some amazing features and the Gatsby Themes feature in particular seems be really an exciting one. Here’s why

For smaller set of Gatsby projects we have a great Eco-system of starter projects and plugins which can be easily used to get a head start in building ReactJS and Gatsby applications. It has a very active community and you will come across solutions and plugins for most use cases.

While starters are great , they do become a bit a bottleneck once we start scaling to multiple applications , different application types that require different plugins. Off-course you can still keep moving forward , but the fact is that once you start your project , you really don’t go back to the starter any more. As a result over time there will be different applications that need to be maintained using different versions of Gatsby and its related plugins/ configurations. This is where Gatsby Themes helps out. Its about making the Gatsby Infrastructure also atomic in nature.

Lets take an example of an enterprise who would want to build multiple sites each having slightly different needs. For example: A content based site based on Wordpress or Drupal will require plugins for the respective data sources and templates specific to content rendering. An e-commerce site may also use a content management system but may require to connect to an external payment service or a cart service. However there are pieces which are common as well like image processing , security , analytics, SEO.

Either we can create separate starters or template projects for each or build them like themes.