Drupal has been providing subtheming capabilities for over a decade. When you create a theme for Drupal 8 or 9, a best practice is to subtheme the core Classy theme, so you get common CSS classes and usual markup for a Drupal site. This means the Classy theme is used in the runtime as part of your theme. As a consequence, Classy has not been receiving updates since Drupal 8.0.0, because most changes are not possible while retaining backwards compatibility. We need to retain backwards compatibility because design requirements of themes depending on Classy could depend on markup and/or CSS provided by Classy.

To solve this problem, we are working on a new custom theme creation process and base theme with the goal of replacing Classy in Drupal 10. 

The new starterkit theme we are working on is not going to serve as a base theme to be subthemed, but rather a theme to be copied on a new theme's creation. It will allow front-end developers to get a copy as a starting point for their theme. Tooling is provided as part of the included Drupal command line interface for automating this:

php core/scripts/drupal generate-theme mytheme

We believe that this new process will serve front-end developers better because it will allow us to provide more frequent updates to the default markup and CSS shipped as part of Drupal core.

Subtheming as a concept will continue to exist even after this change. This is valuable in particular in cases where themes are inheriting design and ideas from the base theme. For example, a university could have a base theme that provides design concepts and basic layout to all of their departments. That base theme could be generated using the starterkit theme:

A model explaining differences between the runtime inheritance and starterkit approaches. The current approach which leverages runtime inheritance from Classy base theme means that a custom base themes are set to receive updates to markup and CSS from Drupal whenever Drupal is updated. With the starterkit approach, the custom base theme markup and CSS are generated using drupal generate-theme command. With this new approach the custom base theme is not not set for receiving updates to the markup and CSS from Drupal.

We believe starterkit theme will serve majority of our use case better, because most custom themes are based on bespoke designs that aren’t a good fit for subtheming an opinionated theme. Since fully custom themes customize many aspects of the theme, it is difficult for the base theme to ship improvements to the subtheme without risking regressions in the subthemes.

We would like to hear your thoughts on the new starterkit theme on this Drupal core issue to add a new starterkit theme. If you have questions about the new starterkit theme, feel free to get in touch with us in Drupal Slack (https://www.drupal.org/slack) #d10readiness and #frontend channels.

We are doing a live demo of the starterkit on the next Drupal 10 readiness meeting which is taking place on #d10readiness channel in Slack on 16th March, 19:00 UTC. 

Thank you to @Gábor Hojtsy for help writing and reviewing this blog post.