<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0" xml:base="https://drupalize.me/">
  <channel>
    <title>8.9.x/9.4.x</title>
    <link>https://drupalize.me/</link>
    <description/>
    <language>en</language>
    
    <item>
  <title>Install a Contributed Module with No Drupal 9 Release</title>
  <link>https://drupalize.me/tutorial/install-contributed-module-no-drupal-9-release</link>
  <description>&lt;span&gt;Install a Contributed Module with No Drupal 9 Release&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2021-10-29T13:44:32-05:00" title="Friday, October 29, 2021 - 13:44" class="datetime"&gt;Fri, 10/29/2021 - 13:44&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2715&amp;amp;2=read" token="Atf3GFs3DFPU90MYuvU4FH_xCu2wItQzsHb0X1ZqfE0"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2715&amp;amp;2=queue" token="Duj_FN4a4mVLlQPenU-RTVKoww0TeiXEZqSn36mI254"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/210" hreflang="en"&gt;Site Building&lt;/a&gt;&lt;/span&gt;&lt;span class="divider"&gt;,&lt;/span&gt;      &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/207" hreflang="en"&gt;Module Development&lt;/a&gt;&lt;/span&gt;&lt;span class="divider"&gt;,&lt;/span&gt;      &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/216" hreflang="en"&gt;Backend and Infrastructure&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/1462" hreflang="en"&gt;8.9.x/9.4.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;As new major versions of Drupal are released, contributed modules need to be updated for compatibility. As of right now (October 2021) there are a lot of contributed modules with a Drupal 8 release and a patch in the queue to make them work with Drupal 9. However, there's no official Drupal 9 compatible release for the module, so the module can't be installed with Composer. This creates a circular problem where you can't &lt;code&gt;composer require&lt;/code&gt; the module if you don't patch it, but you can't patch it until after it's been downloaded by Composer.&lt;/p&gt;
&lt;p&gt;To help solve this common issue, Drupal.org provides a &lt;em&gt;lenient&lt;/em&gt; Composer endpoint that publishes all modules as compatible with Drupal 9 regardless of whether that's true or not. By using it, you can &lt;code&gt;composer require&lt;/code&gt; the module and then use &lt;code&gt;cweagans/composer-patches&lt;/code&gt; to apply any necessary patches.&lt;/p&gt;
&lt;p&gt;In this tutorial we'll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add the lenient Composer endpoint to our project's &lt;em&gt;composer.json&lt;/em&gt; file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;composer require&lt;/code&gt; a non-Drupal 9 compatible module&lt;/li&gt;
&lt;li&gt;Use Composer to download and apply a patch that makes the module Drupal 9 compatible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial you should be able to use contributed modules that require a patch to be compatible with Drupal 9.&lt;/p&gt;&lt;/div&gt;
      

            &lt;div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;As new major versions of Drupal are released, contributed modules need to be updated for compatibility. As of right now (October 2021) there are a lot of contributed modules with a Drupal 8 release and a patch in the queue to make them work with Drupal 9. However, there's no official Drupal 9 compatible release for the module, so the module can't be installed with Composer. This creates a circular problem where you can't &lt;code&gt;composer require&lt;/code&gt; the module if you don't patch it, but you can't patch it until after it's been downloaded by Composer.&lt;/p&gt;
&lt;p&gt;To help solve this common issue, Drupal.org provides a &lt;em&gt;lenient&lt;/em&gt; Composer endpoint that publishes all modules as compatible with Drupal 9 regardless of whether that's true or not. By using it, you can &lt;code&gt;composer require&lt;/code&gt; the module and then use &lt;code&gt;cweagans/composer-patches&lt;/code&gt; to apply any necessary patches.&lt;/p&gt;
&lt;p&gt;In this tutorial we'll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add the lenient Composer endpoint to our project's &lt;em&gt;composer.json&lt;/em&gt; file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;composer require&lt;/code&gt; a non-Drupal 9 compatible module&lt;/li&gt;
&lt;li&gt;Use Composer to download and apply a patch that makes the module Drupal 9 compatible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial you should be able to use contributed modules that require a patch to be compatible with Drupal 9.&lt;/p&gt;
&lt;h2&gt;Goal&lt;/h2&gt;
&lt;p&gt;Use &lt;code&gt;composer require&lt;/code&gt; to install a module that's not currently Drupal 9 compatible and then apply a patch so that it is.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/use-composer-your-drupal-project"&gt;Use Composer with Your Drupal Project&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The "Patching core and contributed packages" section of &lt;a href="https://drupalize.me/tutorial/composer-configuration-drupal"&gt;Composer Configuration for Drupal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;This requires Composer &amp;gt;= version 2 to work&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What is the &lt;em&gt;lenient&lt;/em&gt; Composer endpoint?&lt;/h2&gt;
&lt;p&gt;Drupal.org publishes a second composer repository endpoint at https://packages.drupal.org/lenient. This endpoint advertises any module that DOES NOT have a &lt;code&gt;core_version_requirement&lt;/code&gt; entry in the module's &lt;em&gt;.info.yml&lt;/em&gt; file as being compatible with &lt;strong&gt;any&lt;/strong&gt; version of Drupal. If a module already has a &lt;code&gt;core_version_requirement&lt;/code&gt; entry in its &lt;em&gt;.info.yml&lt;/em&gt; file then the endpoint doesn't publish the package.&lt;/p&gt;
&lt;h2&gt;Caveats&lt;/h2&gt;
&lt;p&gt;This requires Composer version 2 to work. Only Composer version 2 supports the priority repository feature that is being exploited to allow this to work. Composer 2 allows scanning through a list of repositories for a package starting with the first repository in the list and continuing through the list until it finds one with the requested package. Because the lenient endpoint only publishes modules that do not have a Drupal 9 release, as soon as the module is updated for Drupal 9 compatibility it'll be removed from the lenient endpoint and your project will use the official version.&lt;/p&gt;
&lt;p&gt;Composer will output a warning message every time you use it while this lenient repository is present. Ideally, this is used as a stop-gap measure and all your projects have a full Drupal 9 release in the future.&lt;/p&gt;
&lt;h2&gt;Why add a lenient endpoint?&lt;/h2&gt;
&lt;p&gt;As of this writing (October 2021) Drupal 9 has been released, and &lt;a href="https://www.drupal.org/psa-2021-2021-06-29"&gt;Drupal 8 will reach end of life in November 2021&lt;/a&gt;. At that point, Drupal 8 sites will no longer receive security updates. In order to remain secure, all Drupal 8 sites should update to Drupal 9.&lt;/p&gt;
&lt;p&gt;For many sites, this is difficult because the contributed modules they rely on do not yet have a Drupal 9 compatible release -- making updating difficult or impossible. Furthermore, in &lt;strong&gt;many&lt;/strong&gt; cases the fixes required to make the Drupal 8 module compatible with Drupal 9 can be automated (there's already a bot that will generate patches when possible), or there is an existing patch in the issue queue that just hasn't been applied by the project's maintainers yet. But, without the lenient facade developers can't use Composer to apply these patches, in effect leaving them stranded on Drupal 8.&lt;/p&gt;
&lt;h2&gt;Use the lenient Composer facade&lt;/h2&gt;
&lt;p&gt;Ready to add the lenient Composer facade to your project and start making use of it?&lt;/p&gt;
&lt;div class="tutorial--steps"&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Edit your &lt;em&gt;composer.json&lt;/em&gt; file&lt;/h3&gt;
&lt;p&gt;Edit the existing &lt;em&gt;composer.json&lt;/em&gt; file in the root of your project and update it so the &lt;code&gt;"repositories"&lt;/code&gt; section looks like the following:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-json"&gt;"repositories": {
    "lenient": {
        "type": "composer",
        "url": "https://packages.drupal.org/lenient"
    },
    "0": {
        "type": "composer",
        "url": "https://packages.drupal.org/8"
    }
},
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It's important that https://packages.drupal.org/lenient is listed before https://packages.drupal.org/8 so that the repository priority feature works.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Composer require the Drupal 8 module&lt;/h3&gt;
&lt;p&gt;Now, you should be able to use &lt;code&gt;composer&lt;/code&gt; to download the Drupal 8 compatible version of the module.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;composer require drupal/consumers
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: The &lt;code&gt;drupal/consumers&lt;/code&gt; module is only used as an example and may already have a Drupal 9 compatible release.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Apply the Drupal 9 compatibility patch&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;cweagans/composer-patches&lt;/code&gt; project can be used to apply patches automatically when running &lt;code&gt;composer install&lt;/code&gt; or &lt;code&gt;composer update&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;First, make sure the package is present: &lt;code&gt;composer require cweagans/composer-patches&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Then, edit the &lt;em&gt;composer.json&lt;/em&gt; file in the root of the Drupal project (the same one you edited above) and add a &lt;code&gt;"patches"&lt;/code&gt; section if it doesn't already exist.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-json"&gt;{
  "extra": {
    "patches": {
      "drupal/consumers": {
        "[#3116338] Drupal 9 Compatibility": "https://www.drupal.org/files/issues/2020-03-10/3116338-composer-3.patch"
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here, &lt;code&gt;"drupal/consumers"&lt;/code&gt; is a list of patches to apply. Each one is a key/value pair. The key is a human-readable name and we recommend including the issue number so you can find it again later. The value is the path to the &lt;em&gt;.patch&lt;/em&gt; file you want to apply.&lt;/p&gt;
&lt;p&gt;Repeat for each module that needs patching.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;At this point you should be able to use Composer to install modules for your Drupal 9 site, regardless of whether they advertise a Drupal 9 compatible release or not. However, &lt;strong&gt;this does not mean the modules work&lt;/strong&gt; and you'll still need to test them out and perform your due diligence before deploying your updated site.&lt;/p&gt;
&lt;h2&gt;Recap&lt;/h2&gt;
&lt;p&gt;In order to make it easier to update sites to Drupal 9 before the Drupal 8 end of life is reached and sites running Drupal 8 no longer receive critical security updates, you can use the &lt;em&gt;lenient&lt;/em&gt; Composer endpoint now on Drupal.org. The endpoint advertises a module as being compatible with Drupal 9 regardless of whether that's true or not. This endpoint allows Composer to require the module, download it, and apply any existing patches that make it actually Drupal 9 compatible. This is a stop-gap to help with upgrades, and both module users and maintainers should continue to work towards creating Drupal 9 compatible releases for the modules used by their projects.&lt;/p&gt;
&lt;h2&gt;Further your understanding&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;How does Composer's priority repository feature work?&lt;/li&gt;
&lt;li&gt;What are some caveats of this approach to upgrading modules?&lt;/li&gt;
&lt;li&gt;What can you do to help ensure the modules you are using get a stable Drupal 9 release?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Additional resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/develop/using-composer/using-drupals-lenient-composer-endpoint"&gt;Using Drupal's Lenient Composer Endpoint&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;li&gt;See the &lt;a href="https://www.drupal.org/project/project_composer/issues/3227031"&gt;Add a major-version-agnostic façade endpoint for stranded d8 projects&lt;/a&gt; issue for more details about how/why this was done. (Drupal.org)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2023-02-22T12:31:56-06:00" title="Wednesday, February 22, 2023 - 12:31" class="datetime"&gt;February 22, 2023&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Fri, 29 Oct 2021 18:44:32 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">2715 at https://drupalize.me</guid>
    </item>
<item>
  <title>Upgrade to Drupal 9</title>
  <link>https://drupalize.me/tutorial/upgrade-drupal-9</link>
  <description>&lt;span&gt;Upgrade to Drupal 9&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2020-06-01T18:28:10-05:00" title="Monday, June 1, 2020 - 18:28" class="datetime"&gt;Mon, 06/01/2020 - 18:28&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2719&amp;amp;2=read" token="bTQ0vbSMVtLzvQgfusNJWT7jvBonU946NezKQM9po9M"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2719&amp;amp;2=queue" token="wQyf1Vs6wEpXOSSpyM6vcWI44UQ60ef85d7sOy_4dhQ"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/216" hreflang="en"&gt;Backend and Infrastructure&lt;/a&gt;&lt;/span&gt;&lt;span class="divider"&gt;,&lt;/span&gt;      &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/211" hreflang="en"&gt;Site Administration&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/1462" hreflang="en"&gt;8.9.x/9.4.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;There’s no one-size-fits-all path to upgrade from Drupal 8 to Drupal 9, but there is a set of common tasks that everyone will need to complete.&lt;/p&gt;
&lt;p&gt;In this tutorial we’ll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explain the differences between Drupal 8 and Drupal 9 that affect the upgrade path.&lt;/li&gt;
&lt;li&gt;Walk through the high-level steps required to upgrade from Drupal 8 to Drupal 9.&lt;/li&gt;
&lt;li&gt;Provide resources to help you create an upgrade checklist and start checking items off the list.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial you should be able to explain the major differences between Drupal 8 and 9, audit your existing Drupal 8 projects for Drupal 9 readiness, estimate the level of effort involved, and start the process of upgrading.&lt;/p&gt;&lt;/div&gt;
      

            &lt;div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;There’s no one-size-fits-all path to upgrade from Drupal 8 to Drupal 9, but there is a set of common tasks that everyone will need to complete.&lt;/p&gt;
&lt;p&gt;In this tutorial we’ll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explain the differences between Drupal 8 and Drupal 9 that affect the upgrade path.&lt;/li&gt;
&lt;li&gt;Walk through the high-level steps required to upgrade from Drupal 8 to Drupal 9.&lt;/li&gt;
&lt;li&gt;Provide resources to help you create an upgrade checklist and start checking items off the list.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial you should be able to explain the major differences between Drupal 8 and 9, audit your existing Drupal 8 projects for Drupal 9 readiness, estimate the level of effort involved, and start the process of upgrading.&lt;/p&gt;
&lt;h2&gt;Goal&lt;/h2&gt;
&lt;p&gt;Create a Drupal 9 upgrade checklist, and understand what’s required to complete the items on the list.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/what-deprecated-code"&gt;What Is Deprecated Code?&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Differences between Drupal 8 and Drupal 9&lt;/h2&gt;
&lt;p&gt;From a technical perspective Drupal 9.0.0 is Drupal 8.9.0 with all the &lt;a href="https://drupalize.me/tutorial/what-deprecated-code"&gt;deprecated code&lt;/a&gt; removed. There are no significant schema changes, or feature additions, that would require a complex upgrade. As long as all the code in your project is using the current APIs the transition from Drupal 8.9.0 to Drupal 9.0.0 shouldn’t be any more complex than the move from 8.8.x to 8.9.0.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;article class="media media--type-tutorial-image media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
              &lt;div class="field__item"&gt;    &lt;img loading="eager" srcset="https://drupalize.me/sites/default/files/styles/max_400w/public/tutorials/images/drupal9-api-graphic.png?itok=60d0-9NY 400w, https://drupalize.me/sites/default/files/styles/max_640w/public/tutorials/images/drupal9-api-graphic.png?itok=10Cp5sfR 640w, https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/drupal9-api-graphic.png?itok=8wyg_hrg 800w, https://drupalize.me/sites/default/files/styles/max_1280w/public/tutorials/images/drupal9-api-graphic.png?itok=92kccHMM 1280w, https://drupalize.me/sites/default/files/styles/max_1600w/public/tutorials/images/drupal9-api-graphic.png?itok=axy5B2Hu 1305w" sizes="(min-width: 500px) 400px
(min-width: 700px) 640px
(min-width: 1080px) 800px
800px" width="800" height="514" src="https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/drupal9-api-graphic.png?itok=8wyg_hrg"&gt;


&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;p&gt;&lt;em&gt;Credit:&lt;/em&gt; &lt;a href="https://slides.com/gaborhojtsy/state-of-drupal9#/4/6"&gt;Gábor Hojtsy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Drupal 9 also includes major version updates to many of Drupal core’s dependencies, including Symfony and Twig. If you’ve got code in your project that relies on an older version of these dependencies that code will need to be updated, too. This is less likely to impact you directly, but it’s good to be aware of this change.&lt;/p&gt;
&lt;p&gt;Also, in Drupal 9, the &lt;em&gt;Place Blocks&lt;/em&gt; and &lt;em&gt;SimpleTest&lt;/em&gt; modules have been removed and replaced with &lt;em&gt;Layout Builder&lt;/em&gt; and &lt;em&gt;PHPUnit&lt;/em&gt;, respectively.&lt;/p&gt;
&lt;p&gt;Since Drupal 9 is Drupal 8.9 with the deprecated code removed, a module that's not using any deprecated APIs, and has added the required content to its info file to declare that it's compatible with Drupal 9, should work with either major version. If you've used Drupal for a while this is new, and not how upgrades have worked in the past. But, it's so much better.&lt;/p&gt;
&lt;h2&gt;When should I upgrade to Drupal 9?&lt;/h2&gt;
&lt;p&gt;Short answer: when your code is ready.&lt;/p&gt;
&lt;p&gt;The primary consideration should be whether the contributed modules you rely on, and your own custom modules, are Drupal 9 compatible. Once they are, there is no reason to not upgrade.&lt;/p&gt;
&lt;p&gt;If you're using Drupal 8 you have until November 2021 to complete your upgrade. At that point, Drupal 8.9.x will be unsupported and Drupal 8 will have reached its end of life, which is also Symfony 3's end of life. &lt;a href="https://www.drupal.org/psa-2023-06-07"&gt;Drupal 7 community support will be provided until January 5, 2025&lt;/a&gt;. Read more about &lt;a href="https://www.drupal.org/docs/understanding-drupal/drupal-9-release-date-and-what-it-means"&gt;Drupal 9's release date and what it means&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We like this article as a guide to figuring out when to upgrade: &lt;a href="https://www.lullabot.com/articles/when-upgrade-drupal-8-drupal-9"&gt;When to Upgrade from Drupal 8 to Drupal 9&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Drupal 9 upgrade checklist&lt;/h2&gt;
&lt;p&gt;Make sure you can check off all the items in the list before you upgrade to Drupal 9.0.0:&lt;/p&gt;
&lt;div class="tutorial--steps"&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Update to Drupal 8.8.x or 8.9.x&lt;/h3&gt;
&lt;p&gt;Before you upgrade to Drupal 9 you need to be on the latest version of Drupal 8.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://drupalize.me/tutorial/update-drupals-minor-version"&gt;Learn how to perform a minor version update&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Update all your contributed projects&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;You should update all your contributed modules and themes to Drupal 9 compatible versions while you're still on Drupal 8.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It's a good idea to update all your contributed modules and themes to their latest versions as well. Before you can upgrade Drupal core to version 9, you'll need to ensure that all of your contributed projects are &lt;strong&gt;already Drupal 9 compatible&lt;/strong&gt;. In most cases this will mean updating to the latest version. In some cases this may require additional work if the module isn't already Drupal 9 ready.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/user-guide/security-update-module"&gt;13.6 Updating a Module&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/user-guide/security-update-theme"&gt;13.7 Updating a Theme&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Look at the project's page on Drupal.org for more details about compatibility:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;article class="media media--type-tutorial-image media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
              &lt;div class="field__item"&gt;    &lt;img loading="eager" srcset="https://drupalize.me/sites/default/files/styles/max_400w/public/tutorials/images/drupal9-project-info-example.png?itok=gqAi6jrh 400w, https://drupalize.me/sites/default/files/styles/max_640w/public/tutorials/images/drupal9-project-info-example.png?itok=4n79xmQ7 640w, https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/drupal9-project-info-example.png?itok=I9d1nr-9 663w" sizes="(min-width: 500px) 400px
(min-width: 700px) 640px
(min-width: 1080px) 800px
800px" width="663" height="420" src="https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/drupal9-project-info-example.png?itok=I9d1nr-9"&gt;


&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;p&gt;Acquia has created &lt;a href="https://dev.acquia.com/drupal9/deprecation_status"&gt;a useful tool for checking compatibility&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These are good for getting an estimate of what's going to be involved for your project.&lt;/p&gt;
&lt;p&gt;When you're ready to start working on the Drupal 9 readiness of the modules installed on your site, use the &lt;a href="https://www.drupal.org/project/upgrade_status"&gt;Upgrade Status&lt;/a&gt; on your current site to generate a report. And help fix some common issues. &lt;a href="https://drupalize.me/blog/start-drupal-9-readiness-do-list-using-upgrade-status"&gt;Learn more about using Upgrade Status&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If a module isn't Drupal 9 compatible you've got a few options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update it yourself. This similar to updating custom code. See below.&lt;/li&gt;
&lt;li&gt;Wait for a future release of an updated Drupal 9-compatible version.&lt;/li&gt;
&lt;li&gt;Hire someone to do the updates for you.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We recommend starting with your custom code. And once that's done, come back to your contributed modules and figure out which ones are the most critical for your project and see what you can do to help update them for Drupal 9. In many cases there's likely a patch already available and waiting for community members to test it out.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Update your custom code&lt;/h3&gt;
&lt;p&gt;If your project has custom modules or themes, it's your responsibility to ensure that that code is compatible with Drupal 9.&lt;/p&gt;
&lt;p&gt;You can use &lt;a href="https://www.drupal.org/project/upgrade_status"&gt;Upgrade Status&lt;/a&gt; to scan these projects as well. And then you'll need to remove all use of deprecated APIs. &lt;a href="https://drupalize.me/tutorial/what-deprecated-code"&gt;Learn more about what deprecated code is and how to deal with it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Even if you're not planning to upgrade to Drupal 9 now you should start doing this. It'll save time in the future, and since Drupal 9 is backward-compatible with Drupal 8.9 it shouldn't affect your existing site.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Verify your hosting meets the new requirements&lt;/h3&gt;
&lt;p&gt;The &lt;a href="https://www.drupal.org/docs/9/how-drupal-9-is-made-and-what-is-included/environment-requirements-of-drupal-9"&gt;hosting environment requirements for Drupal 9&lt;/a&gt; have changed. You'll want to make sure your web server, PHP, and MySQL/MariaDB are all running compatible versions.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;Upgrade Drupal core&lt;/h2&gt;
&lt;p&gt;These instructions assume you that your Drupal 8 project is using Composer to manage dependencies, and that you either started from the &lt;code&gt;drupal/recommended-project&lt;/code&gt; Composer template or you've updated your &lt;em&gt;composer.json&lt;/em&gt; to use the &lt;code&gt;drupal/recommended-project&lt;/code&gt;'s approach to scaffolding. If you're unsure look for an entries like &lt;code&gt;"drupal/core-recommended": "^8.8"&lt;/code&gt;, and &lt;code&gt;"drupal/core-composer-scaffold": "^8.8"&lt;/code&gt; in your &lt;em&gt;composer.json&lt;/em&gt; file. This is a good indication that you're using the current recommend approach.&lt;/p&gt;
&lt;p&gt;You can learn more about making these changes in &lt;a href="https://drupalize.me/tutorial/update-drupal-versions-prior-88x-using-composer"&gt;Update Drupal from Versions Prior to 8.8.x using Composer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Using the &lt;code&gt;--no-update&lt;/code&gt; flag updates the &lt;em&gt;composer.json&lt;/em&gt; entries, without attempting to resolve and download any files. This allows us to batch updates to projects and avoid a "chicken-or-egg first"-type of issues with shared dependencies. Alternatively, you can edit the version constraints in &lt;em&gt;composer.json&lt;/em&gt; manually.&lt;/p&gt;
&lt;p&gt;If you have the &lt;code&gt;drupal/core-dev&lt;/code&gt; dependencies installed you'll need to update those:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;composer require drupal/core-dev:~9.0.0@dev --dev --no-update --update-with-dependencies
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then update the &lt;code&gt;drupal/core-recommended&lt;/code&gt; and &lt;code&gt;drupal/core-composer-scaffold&lt;/code&gt; projects:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;composer require drupal/core-recommended:~9.0.0@dev drupal/core-composer-scaffold:~9.0.0@dev --no-update --update-with-dependencies
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then tell Composer to try and resolve and download all the new code:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;composer update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If this is successful, you'll see a line like the following in the output:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;  - Updating drupal/core-dev (8.8.7 =&amp;gt; 9.0.0)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you get any errors you'll need to troubleshoot what's causing the issue. We've tried to provide guidance on some common ones below.&lt;/p&gt;
&lt;h2&gt;Troubleshooting a Drupal 9 upgrade&lt;/h2&gt;
&lt;h3&gt;Problem: Permission denied updating files in &lt;em&gt;sites/default/&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;In some cases you may need to modify the permissions on the &lt;em&gt;sites/default/&lt;/em&gt; directory, and files within it, so that they can be modified.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Set them to something more permissive:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;chmod 777 web/sites/default
find web/sites/default -name "*settings.php" -exec chmod 777 {} \;
find web/sites/default -name "*services.yml" -exec chmod 777 {} \;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Important!:&lt;/strong&gt; Remember to set permissions back after completing the update:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;chmod 755 web/sites/default
find web/sites/default -name "*settings.php" -exec chmod 644 {} \;
find web/sites/default -name "*services.yml" -exec chmod 644 {} \;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Problem: Composer can't install packages&lt;/h3&gt;
&lt;p&gt;If running &lt;code&gt;composer update&lt;/code&gt; results in message saying, "Your requirements could not be resolved to an installable set of packages.", there's a good chance that one or more of your contributed modules isn't Drupal 9 compatible. (Or at least the current release version of the project isn't.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Look for lines like this in the output:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;- drupal/recurly 1.5.0 requires drupal/core ~8.0 -&amp;gt; satisfiable by drupal/core[8.8.6, 8.0.0, 8.0.0-beta10, ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This indicates that the &lt;code&gt;drupal/recurly&lt;/code&gt; project requires Drupal 8.x, but we're asking for Drupal 9.x, therefore resulting in an incompatible set of dependencies.&lt;/p&gt;
&lt;p&gt;If there's a &lt;code&gt;-dev&lt;/code&gt; version of the module that you know is compatible with Drupal 9 you could try installing that.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-sh"&gt;composer require drupal/recurly:1.x-dev --no-update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If there's a patch in the issue queue see the next tip.&lt;/p&gt;
&lt;h3&gt;Problem: Contributed module only has a patch&lt;/h3&gt;
&lt;p&gt;Often times modules without a Drupal 9 compatible release will have a patch in the issue queue that makes the module work with Drupal 9, but hasn't been committed by the project maintainers yet.&lt;/p&gt;
&lt;p&gt;This can result in a sort of race condition, where Composer can't download the required module because it's not presenting as Drupal 9 compatible, so you need to apply a patch, but Composer can't apply the patch if it can't resolve the dependency tree first.&lt;/p&gt;
&lt;p&gt;There is now an officially supported way to handle this using Composer. See &lt;a href="https://drupalize.me/tutorial/install-contributed-module-no-drupal-9-release"&gt;Install a Contributed Module with No Drupal 9 Release&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Recap&lt;/h2&gt;
&lt;p&gt;In this tutorial we looked at what's involved in making the transition from Drupal 8 to Drupal 9. This included going over the differences between the two, auditing your custom and contributed modules for compatibility, learning how to make things Drupal 9 compatible while still using Drupal 8. And then finally upgrading Drupal core once everything else is ready, and some troubleshooting tips for common problems.&lt;/p&gt;
&lt;h2&gt;Further your understanding&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Most of the Composer commands above can be replicated by directly editing your &lt;em&gt;composer.json&lt;/em&gt; file, and then running &lt;code&gt;composer update&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If you're using Drupal 7, upgrading to Drupal 9 still requires a major migration. See our &lt;a href="https://drupalize.me/guide/learn-migrate-drupal"&gt;Learn to Migrate to Drupal guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Additional resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/drupal9"&gt;Guide to Drupal 9&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/upgrading-drupal/upgrading-from-drupal-8-to-drupal-9-or-higher"&gt;Upgrading from Drupal 8 to Drupal 9 (or higher)&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.lullabot.com/articles/preparing-your-drupal-8-site-drupal-9"&gt;Preparing Your Drupal 8 Site for Drupal 9&lt;/a&gt; (Lullabot.com)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/use-composer-your-drupal-project"&gt;Use Composer with Your Drupal Project&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/troubleshoot-common-composer-issues"&gt;Troubleshoot Common Composer Issues&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-10-30T19:20:22-05:00" title="Wednesday, October 30, 2024 - 19:20" class="datetime"&gt;October 30, 2024&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Mon, 01 Jun 2020 23:28:10 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">2719 at https://drupalize.me</guid>
    </item>
<item>
  <title>Update Drupal from Versions Prior to 8.8.x using Composer</title>
  <link>https://drupalize.me/tutorial/update-drupal-versions-prior-88x-using-composer</link>
  <description>&lt;span&gt;Update Drupal from Versions Prior to 8.8.x using Composer&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2020-02-05T16:02:46-06:00" title="Wednesday, February 5, 2020 - 16:02" class="datetime"&gt;Wed, 02/05/2020 - 16:02&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2716&amp;amp;2=read" token="PlU2WSysn3YBcx9c9E68aZy7EhlI6s7BC1vg_xmMMmQ"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2716&amp;amp;2=queue" token="qw_S-dNpjQyHVYXbahEnNa85ygikDP9sUlbPii2oWDc"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/211" hreflang="en"&gt;Site Administration&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/1462" hreflang="en"&gt;8.9.x/9.4.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Drupal 8.8.0 introduced a bunch of new features intended to make it easier over the long-term to maintain a Drupal project using Composer. In doing so it establishes some new best practices, and moves into Drupal core solutions that were previously maintained by the community. This is all good news. But, it means if you're using Composer to update from Drupal 8.7.x or lower to 8.8.0 or higher you'll need to do a bit of additional work to untangle everything.&lt;/p&gt;
&lt;p&gt;This tutorial is especially useful if you started your Drupal project using the &lt;code&gt;drupal-composer/drupal-project&lt;/code&gt; template and would like to convert to use the new templates (i.e. &lt;code&gt;drupal/recommended-project&lt;/code&gt; or &lt;code&gt;drupal/legacy-project&lt;/code&gt;) included with Drupal 8.8.x core.&lt;/p&gt;
&lt;p&gt;In this tutorial we'll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convert our project to use the new &lt;code&gt;drupal/core-recommended&lt;/code&gt;, and &lt;code&gt;drupal/core-dev&lt;/code&gt; Composer packages&lt;/li&gt;
&lt;li&gt;Explain which commonly used Composer packages are deprecated, and which new ones replace them&lt;/li&gt;
&lt;li&gt;Learn how to use the &lt;code&gt;drupal/core-composer-scaffold&lt;/code&gt; Composer plugin&lt;/li&gt;
&lt;li&gt;Cover tips for troubleshooting updates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Furthermore, in order to &lt;a href="https://drupalize.me/tutorial/upgrade-drupal-9"&gt;Upgrade to Drupal 9&lt;/a&gt; from Drupal 8, you will first need to update your Drupal 8 site to at least version 8.8, as the &lt;a href="https://www.drupal.org/node/3098327"&gt;upgrade paths for Drupal 8 site from before Drupal 8.8.0 have been removed from Drupal 9&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By the end of this tutorial you should be able to update your Drupal projects using Drupal core 8.7.x or lower to Drupal core 8.8.0 or higher using Composer. And be ready for an upgrade to Drupal 9.&lt;/p&gt;&lt;/div&gt;
      

            &lt;div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;Drupal 8.8.0 introduced a bunch of new features intended to make it easier over the long-term to maintain a Drupal project using Composer. In doing so it establishes some new best practices, and moves into Drupal core solutions that were previously maintained by the community. This is all good news. But, it means if you're using Composer to update from Drupal 8.7.x or lower to 8.8.0 or higher you'll need to do a bit of additional work to untangle everything.&lt;/p&gt;
&lt;p&gt;This tutorial is especially useful if you started your Drupal project using the &lt;code&gt;drupal-composer/drupal-project&lt;/code&gt; template and would like to convert to use the new templates (i.e. &lt;code&gt;drupal/recommended-project&lt;/code&gt; or &lt;code&gt;drupal/legacy-project&lt;/code&gt;) included with Drupal 8.8.x core.&lt;/p&gt;
&lt;p&gt;In this tutorial we'll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convert our project to use the new &lt;code&gt;drupal/core-recommended&lt;/code&gt;, and &lt;code&gt;drupal/core-dev&lt;/code&gt; Composer packages&lt;/li&gt;
&lt;li&gt;Explain which commonly used Composer packages are deprecated, and which new ones replace them&lt;/li&gt;
&lt;li&gt;Learn how to use the &lt;code&gt;drupal/core-composer-scaffold&lt;/code&gt; Composer plugin&lt;/li&gt;
&lt;li&gt;Cover tips for troubleshooting updates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Furthermore, in order to &lt;a href="https://drupalize.me/tutorial/upgrade-drupal-9"&gt;Upgrade to Drupal 9&lt;/a&gt; from Drupal 8, you will first need to update your Drupal 8 site to at least version 8.8, as the &lt;a href="https://www.drupal.org/node/3098327"&gt;upgrade paths for Drupal 8 site from before Drupal 8.8.0 have been removed from Drupal 9&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By the end of this tutorial you should be able to update your Drupal projects using Drupal core 8.7.x or lower to Drupal core 8.8.0 or higher using Composer. And be ready for an upgrade to Drupal 9.&lt;/p&gt;
&lt;h2&gt;Goal&lt;/h2&gt;
&lt;p&gt;Update from an older version of Drupal core to Drupal 8.8.0 or later using Composer.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If you're following this tutorial, we assume you're already using Composer to manage your Drupal site dependencies. But if you're looking for a general introduction to Composer, we recommend &lt;a href="https://drupalize.me/videos/wonderful-world-composer"&gt;The Wonderful World of Composer&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Before you get started&lt;/h2&gt;
&lt;p&gt;You probably won't need to do all of these steps, and some of them may not be exactly right for your use-case, but we'll do our best to explain what's changing and why so that hopefully you can get it all working.&lt;/p&gt;
&lt;p&gt;We recommend reading through this whole tutorial first and determining which elements apply to you before proceeding with updating.&lt;/p&gt;
&lt;p&gt;Prior to Drupal 8.8.0 many sites used the &lt;a href="https://github.com/drupal-composer/drupal-project"&gt;drupal-composer/drupal-project&lt;/a&gt; as the basis for their projects. If you did, there are some additional steps you'll need to take to update to Drupal 8.8.0 or higher.&lt;/p&gt;
&lt;h2&gt;Why do I need to do this?&lt;/h2&gt;
&lt;p&gt;Previously, the recommended way to install Drupal with Composer was the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;composer create-project drupal-composer/drupal-project:8.x-dev some-dir --no-interaction
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can still use &lt;code&gt;drupal-composer/drupal-project&lt;/code&gt; for &lt;strong&gt;starting a new project&lt;/strong&gt;. It's already been updated with to reflect these changes. &lt;a href="https://drupalize.me/tutorial/use-composer-your-drupal-project"&gt;Learn more about installing Drupal with Composer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What the command above does is download all the files in &lt;a href="https://github.com/drupal-composer/drupal-project"&gt;the drupal-composer/drupal-project repository&lt;/a&gt; and then run &lt;code&gt;composer install&lt;/code&gt;. You've now got a starting point for your project, but there is no link to the original template. From here on out all of those files are your responsibility. The idea is to provide some scaffolding for common configuration that most any Drupal project would want. And to save you a few keystrokes every time you start a new project.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;drupal-composer/drupal-project&lt;/code&gt; template made use of some packages that are now deprecated in favor of new ones that are provided by Drupal core. And as part of updating to Drupal 8.8.0+ you'll want to switch from using these now deprecated packages to the new recommended ones.&lt;/p&gt;
&lt;p&gt;Since your project is no longer connected to the upstream template, you'll need to make these changes yourself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Running many of the commands included below can impact the code that's installed for your project, and can have unintended consequences. It's a good idea to make a backup before trying any of these. And to test on a development environment first.&lt;/p&gt;
&lt;h2&gt;Use the drupal/core-recommended meta package&lt;/h2&gt;
&lt;p&gt;When installing Drupal core with Composer you should require &lt;code&gt;drupal/core-recommended&lt;/code&gt; instead of &lt;code&gt;drupal/core&lt;/code&gt;. &lt;em&gt;Recommended&lt;/em&gt; in this case means that this specific version of Drupal core and these specific versions of its dependencies have passed all the automated tests and are deemed suitable for release.&lt;/p&gt;
&lt;p&gt;It's possible, though rare, that if you use different versions of one of Drupal core's dependencies than the one that was tested for the release that there might be bugs. By using &lt;code&gt;drupal/core-recommended&lt;/code&gt; you can prevent dependency versions from drifting upwards, and ensure that you always get the same dependencies that were used in the release. You can be more confident when deploying your application knowing that the combination of core and dependencies is verified to work.&lt;/p&gt;
&lt;p&gt;Prior to Drupal 8.8.0 the &lt;code&gt;drupal/core-recommended&lt;/code&gt; package did not exist and many Drupal sites used the &lt;code&gt;webflo/drupal-core-strict&lt;/code&gt; meta package which locked dependencies to exact versions. For example, it might use &lt;code&gt;drupal/core: "8.8.1"&lt;/code&gt; instead of &lt;code&gt;drupal/core: "^8.8"&lt;/code&gt;. The former would only ever resolve to 8.8.1 while the later might resolve to 8.8.1 or 8.8.0.&lt;/p&gt;
&lt;p&gt;As of Drupal 8.8.0 using the &lt;code&gt;drupal/core-recommended&lt;/code&gt; meta package provides this dependency locking and &lt;code&gt;webflow/drupal-core-strict&lt;/code&gt; is no longer necessary.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveat:&lt;/strong&gt; It's possible (though rare) that a contributed module might explicitly require a different version of a Symfony component than the one that is pinned in your current version of &lt;code&gt;drupal/core-recommended&lt;/code&gt;. If that's the case you can still use &lt;code&gt;drupal/core&lt;/code&gt; which has a more lenient set of dependency version constraints.&lt;/p&gt;
&lt;p&gt;Our rule of thumb: if it works for your set of required contributed modules and other Composer packages, use &lt;code&gt;drupal/core-recommended&lt;/code&gt; and enjoy the extra confidence. But if it doesn't, use &lt;code&gt;drupal/core&lt;/code&gt;. That's why the package is named &lt;em&gt;recommended&lt;/em&gt; and not &lt;em&gt;required&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Switch to &lt;code&gt;drupal/core-recommended&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;If your existing &lt;em&gt;composer.json&lt;/em&gt; contains a record for &lt;code&gt;drupal/core&lt;/code&gt; replace it with &lt;code&gt;drupal/core-recommended: "^8.8"&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The following commands will convert from &lt;code&gt;drupal/core&lt;/code&gt; to &lt;code&gt;drupal/core-recommended&lt;/code&gt;. These commands will modify your &lt;em&gt;composer.json&lt;/em&gt; file, but not remove, or download, any code because of the &lt;code&gt;--no-update&lt;/code&gt; flag:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;composer remove drupal/core --no-update
composer require composer/installers:^1.7 --no-update
composer require drupal/core-recommended:^8.8 --no-update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can also edit the &lt;em&gt;composer.json&lt;/em&gt; file manually instead of using the command above.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important caveat:&lt;/strong&gt; If Drupal is installed in the root directory of your project, and not in a subdirectory like &lt;em&gt;web/&lt;/em&gt; (is the Drupal &lt;em&gt;core/&lt;/em&gt; directory in the root of your project?) you should refer to the &lt;a href="https://github.com/drupal/legacy-project"&gt;drupal/legacy-project template&lt;/a&gt; instead. The latter assumes the current best practice of using a &lt;em&gt;web/&lt;/em&gt; subdirectory.&lt;/p&gt;
&lt;p&gt;To use the &lt;code&gt;drupal/legacy-project&lt;/code&gt; template, you will also need to require &lt;code&gt;drupal/core-vendor-hardening: "^8.8"&lt;/code&gt;. So the Composer commands to update your requirements to match the &lt;code&gt;drupal/legacy-project&lt;/code&gt; template would be:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;composer remove drupal/core --no-update
composer require composer/installers:^1.7 --no-update
composer require drupal/core-recommended:^8.8 --no-update
composer require drupal/core-vendor-hardening: ^8.8 --no-update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you're migrating from &lt;code&gt;webflo/drupal-core-strict&lt;/code&gt;, to &lt;code&gt;drupal/core-recommended&lt;/code&gt; you need to remove your project's dependency on the legacy package. You can do so with the following &lt;code&gt;composer&lt;/code&gt; command:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;composer remove webflo/drupal-core-strict --no-update
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Use the drupal/core-dev meta package&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;drupal/core-dev&lt;/code&gt; package contains all the optional development specific core dependencies. For example, the code required to run automated tests. This package can either be left out, or added to the &lt;code&gt;"require-dev"&lt;/code&gt; section of your &lt;em&gt;composer.json&lt;/em&gt; file as they're only needed for development.&lt;/p&gt;
&lt;p&gt;This package replaces &lt;code&gt;webflo/drupal-core-require-dev&lt;/code&gt; if you were previously using that you can remove it with:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;composer remove webflo/drupal-core-require-dev --dev --no-update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then add the new one:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;composer require drupal/core-dev:^8.8 --no-update
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Dealing with scaffolding&lt;/h2&gt;
&lt;p&gt;There are certain files in every Drupal install that are required for the project to work, but don't necessarily always have to live in the same place. Files like &lt;em&gt;index.php&lt;/em&gt; and &lt;em&gt;.htaccess&lt;/em&gt; for example. And optional example files like &lt;em&gt;.editorconfig&lt;/em&gt;, &lt;em&gt;.gitignore&lt;/em&gt;, &lt;em&gt;sites/example.settings.local.php&lt;/em&gt; that are included with the project to serve as an example, but might need to be placed in a different location depending on the specific structure of your codebase. These are known as &lt;em&gt;scaffold&lt;/em&gt; files.&lt;/p&gt;
&lt;p&gt;And you need to teach Composer where to put them.&lt;/p&gt;
&lt;p&gt;This is accomplished using the &lt;code&gt;drupal/core-composer-scaffold&lt;/code&gt; Composer plugin. Which, replaces the &lt;code&gt;drupal-composer/drupal-scaffold&lt;/code&gt; package if you were using it.&lt;/p&gt;
&lt;p&gt;If you were using &lt;code&gt;drupal-composer/drupal-scaffold&lt;/code&gt;, first remove the requirement:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;composer remove drupal-composer/drupal-scaffold --no-update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add the new core scaffolding plugin:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;composer require drupal/core-composer-scaffold:^8.8 --no-update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then configure it by editing your &lt;em&gt;composer.json&lt;/em&gt; file to include the necessary configuration in the &lt;code&gt;"extra"&lt;/code&gt; section:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-json"&gt;"extra": {
  "drupal-scaffold": {
      "locations": {
          "web-root": "web/"
      }
  },
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;web-root&lt;/code&gt; key allows you configure which directory contains the Drupal core installation. And will result in for example &lt;em&gt;web/index.php&lt;/em&gt; and &lt;em&gt;web/.htaccess&lt;/em&gt;. If you use a different sub-directory like &lt;em&gt;docroot/&lt;/em&gt; you can change that here.&lt;/p&gt;
&lt;p&gt;Sometimes you might want to make changes to scaffold files, and use your modified version instead of the default. This is accomplished by copying the file you want to change into its normal location. Committing the changed version. And then configuring the plugin to stop replacing that particular file.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.drupal.org/docs/develop/using-composer/using-drupals-composer-scaffold"&gt;Learn more about additional configuration options for drupal/core-composer-scaffold&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Run &lt;code&gt;composer update&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;After making all the necessary changes to your &lt;em&gt;composer.json&lt;/em&gt; file you'll run &lt;code&gt;composer update&lt;/code&gt; to get all the correct files and most importantly update your &lt;em&gt;composer.lock&lt;/em&gt; file.&lt;/p&gt;
&lt;p&gt;If you want to update only the required files and not also update things like contributed modules at the same time use &lt;code&gt;composer update --lock&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Update settings.php&lt;/h2&gt;
&lt;p&gt;As of Drupal 8.8.0 the configuration sync directory is now defined as &lt;code&gt;$settings['config_sync_directory']&lt;/code&gt; instead of &lt;code&gt;$config_directories&lt;/code&gt;. (&lt;a href="https://www.drupal.org/node/3018145"&gt;Change record&lt;/a&gt;). This setting is used to tell Drupal where the configuration files for your site are stored on disk. And needs to be updated if it's used.&lt;/p&gt;
&lt;p&gt;Open your &lt;em&gt;settings.php&lt;/em&gt; file and change:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-php"&gt;$config_directories['sync'] = 'my/config/dir';
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-php"&gt;$settings['config_sync_directory'] = 'my/config/dir';
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You may also need to update the configuration for the temporary files directory. Also in &lt;em&gt;settings.php&lt;/em&gt;, change:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-php"&gt;$config['system.file']['path']['temporary'] = 'my/temp/dir';
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-php"&gt;$settings['file_temp_path'] = 'my/temp/dir';
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Run database updates&lt;/h2&gt;
&lt;p&gt;At this point you should have the code for your project up-to-date, and you'll need to run the database updates. This process is the same regardless of what version you're updating from. See &lt;a href="https://drupalize.me/tutorial/update-drupals-minor-version"&gt;Update Drupal's Minor Version&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2&gt;Troubleshooting&lt;/h2&gt;
&lt;p&gt;The update process will likely vary a bit for everyone as a lot depends on changes that you made to your Drupal installation after the initial setup. Below are some useful tips if you're running into issues.&lt;/p&gt;
&lt;p&gt;Compare your &lt;em&gt;composer.json&lt;/em&gt; to the one from the new &lt;code&gt;drupal/recommended-project&lt;/code&gt; template which can be found here https://github.com/drupal/recommended-project/blob/8.8.x/composer.json.&lt;/p&gt;
&lt;p&gt;If running &lt;code&gt;composer install&lt;/code&gt;, or &lt;code&gt;composer update&lt;/code&gt; is resulting in an uninstallable set of dependencies you can try the nuclear option:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;rm composer.lock
rm -r vendor/
composer install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This can result in unintended updates. For example contributed modules that you installed will all be updated to the latest version allowed by &lt;em&gt;composer.json&lt;/em&gt; which may differ from the version currently installed via &lt;em&gt;composer.lock&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;You can also use &lt;code&gt;composer prohibits drupal/core:8.8.0&lt;/code&gt; to learn more about what is preventing the update from resolving to a useable set of dependencies.&lt;/p&gt;
&lt;p&gt;If you're experiencing permissions issues &lt;a href="https://www.drupal.org/docs/develop/using-composer/starting-a-site-using-drupal-composer-project-templates#s-troubleshooting-permission-issues-prevent-running-composer"&gt;see this tip in the documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Recap&lt;/h2&gt;
&lt;p&gt;In order to update to Drupal core 8.8.x from previous versions you might need to replace some new deprecated Composer packages with the new community supported ones. This especially if you started out using the &lt;code&gt;drupal-composer/drupal-project&lt;/code&gt; Composer template. Doing so requires updating your &lt;em&gt;composer.json&lt;/em&gt; file with some new dependencies and new configuration. Then testing it all to make sure it still results in a usable set of dependencies.&lt;/p&gt;
&lt;h2&gt;Further your understanding&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Does your project have customizations to scaffold files like &lt;em&gt;.htaccess&lt;/em&gt; or &lt;em&gt;robots.txt&lt;/em&gt;? Take some time to &lt;a href="https://www.drupal.org/docs/develop/using-composer/using-drupals-composer-scaffold"&gt;read about using the scaffold plugins configuration&lt;/a&gt; to make it easier to maintain these changes going forward.&lt;/li&gt;
&lt;li&gt;While you're at it it's not a bad idea to update and test the contributed modules your site uses.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/upgrade-drupal-9"&gt;Upgrade to Drupal 9&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Additional resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/node/3098327"&gt;Change record: Upgrade paths for Drupal 8 site from before Drupal 8.8.0 have been removed from Drupal 9&lt;/a&gt; (drupal.org/list-changes)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/docs/updating-drupal/updating-drupal-core-via-composer"&gt;Update Core via Composer&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.palantir.net/blog/guide-drupal-8-8-update"&gt;Guide to the Drupal 8.8 Update&lt;/a&gt; (palantir.net)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.previousnext.com.au/blog/updating-drupal-880-beta-composer"&gt;Updating to Drupal 8.8.0 Beta with Composer&lt;/a&gt; (previousnext.com)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2022-03-30T16:40:55-05:00" title="Wednesday, March 30, 2022 - 16:40" class="datetime"&gt;March 30, 2022&lt;/time&gt;
&lt;/div&gt;
      </description>
  <pubDate>Wed, 05 Feb 2020 22:02:46 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">2716 at https://drupalize.me</guid>
    </item>
<item>
  <title>Run Drupal in Docker</title>
  <link>https://drupalize.me/tutorial/run-drupal-docker</link>
  <description>&lt;span&gt;Run Drupal in Docker&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2018-01-10T08:00:00-06:00" title="Wednesday, January 10, 2018 - 08:00" class="datetime"&gt;Wed, 01/10/2018 - 08:00&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2534&amp;amp;2=read" token="Sb_AOBeQCL_qs7n8gD4jP-IsvN_Ax15_qUsg-Cpe1d8"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2534&amp;amp;2=queue" token="1XDtsTBnav-oLgs0LyMsT8Sujp6kdaHj0L2-vEPODlU"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/216" hreflang="en"&gt;Backend and Infrastructure&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/1462" hreflang="en"&gt;8.9.x/9.4.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Creating a container set to support Drupal development requires some specialized knowledge. Now that we understand containers, images, how to use Docker Compose (&lt;code&gt;docker-compose&lt;/code&gt;), and how to select images on Docker Hub, we're ready to build a container set to support Drupal development.&lt;/p&gt;
&lt;p&gt;In this tutorial, we'll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Select images of software that we'll need to run Drupal&lt;/li&gt;
&lt;li&gt;Create a new Compose file&lt;/li&gt;
&lt;li&gt;Configure bind volumes and environment variables to support the site&lt;/li&gt;
&lt;li&gt;Test the configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See &lt;a href="https://drupalize.me/tutorial/dockerize-existing-project"&gt;Dockerize an Existing Project&lt;/a&gt; if you already have Drupal installed.&lt;/p&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2023-07-28T18:26:40-05:00" title="Friday, July 28, 2023 - 18:26" class="datetime"&gt;July 28, 2023&lt;/time&gt;
&lt;/div&gt;
      
  
  &lt;div class="field field--name-field-tutorial-icon field--type-entity-reference field--label-above"&gt;
    &lt;div class="field__label"&gt;Custom tutorial icon&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;article class="media media--type-image media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
              &lt;div class="field__item"&gt;    &lt;img loading="eager" srcset="https://drupalize.me/sites/default/files/styles/max_400w/public/tutorial_icons/docker-icon-white_16.png?itok=rHINGYBL 400w, https://drupalize.me/sites/default/files/styles/max_800w/public/tutorial_icons/docker-icon-white_16.png?itok=JB_bLPpa 537w" sizes="(min-width: 500px) 400px
(min-width: 700px) 640px
(min-width: 1080px) 800px
800px" width="537" height="536" src="https://drupalize.me/sites/default/files/styles/max_800w/public/tutorial_icons/docker-icon-white_16.png?itok=JB_bLPpa"&gt;


&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;
&lt;/div&gt;
          &lt;/div&gt;
</description>
  <pubDate>Wed, 10 Jan 2018 14:00:00 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">2534 at https://drupalize.me</guid>
    </item>
<item>
  <title>Core Themes: Stark</title>
  <link>https://drupalize.me/tutorial/core-themes-stark</link>
  <description>&lt;span&gt;Core Themes: Stark&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2017-03-30T08:00:02-05:00" title="Thursday, March 30, 2017 - 08:00" class="datetime"&gt;Thu, 03/30/2017 - 08:00&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2874&amp;amp;2=read" token="Yo5D8hMdfgHGkCgE1C6rXbk_9V4RdHJ-CSKVVOFJMwE"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2874&amp;amp;2=queue" token="4aJXaFSQGP4QPV_sfA0F5D54PZuoLAPvEMIxtseFnN8"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/208" hreflang="en"&gt;Theming&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/1462" hreflang="en"&gt;8.9.x/9.4.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Stark is one of the themes bundled with Drupal. It is intentionally bare bones and its purpose is to help Drupal theme and module developers get to the heart of Drupal's system templates. In this tutorial, we'll explore Stark and its primary features and discuss the various reasons for utilizing the Stark theme.&lt;/p&gt;&lt;/div&gt;
      

            &lt;div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;Stark is one of the themes bundled with Drupal. It is intentionally bare bones and its purpose is to help Drupal theme and module developers get to the heart of Drupal's system templates. In this tutorial, we'll explore Stark and its primary features and discuss the various reasons for utilizing the Stark theme.&lt;/p&gt;
&lt;h2&gt;Goal&lt;/h2&gt;
&lt;p&gt;Recognize Stark theme and identify its primary features. Explain the use cases for Stark and what you can learn from it.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/what-theme"&gt;What Is a Theme?&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Watch Core Theme: Stark&lt;/h2&gt;
&lt;article class="media media--type-sprout-video media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-media-sproutvideo field--type-string field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Sprout Video&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;iframe src="https://videos.sproutvideo.com/embed/449fdfbe121ceac4cd/6b0fbde2392e99d7" frameborder="0" allowtransparency allowfullscreen referrerpolicy="no-referrer-when-downgrade" class="media-sproutvideo-embed sproutvideo-player" data-sprout-video-id="449fdfbe121ceac4cd" data-sprout-video-name="Core Theme: Stark"&gt;&lt;/iframe&gt;
&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;h2&gt;Why explore Stark?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Examine the default markup and behavior provided by the Drupal system.&lt;/li&gt;
&lt;li&gt;Troubleshoot Drupal core behavior and output.&lt;/li&gt;
&lt;li&gt;Troubleshoot and isolate problems from other modules or themes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;According to Stark's &lt;em&gt;README.txt&lt;/em&gt;, Stark is provided for demonstration purposes. As it applies no styling through CSS, what Stark demonstrates is Drupal's default markup, as defined in core system templates. Stark overrides nothing; it even sets the base theme to &lt;code&gt;false&lt;/code&gt; so that you can truly get down to the bare bones default markup of Drupal's system templates and see the result.&lt;/p&gt;
&lt;p&gt;Stark can help you learn and identify Drupal's system templates and markup. This demonstration theme will serve you best if you first &lt;a href="https://drupalize.me/tutorial/configure-your-environment-theme-development"&gt;set up your local environment for theme development&lt;/a&gt;. Once done, use browser tools to inspect elements or view source to see which of Drupal's system templates are in use for various elements. Part of truly mastering theming in Drupal is understanding what components you already have available to you, and this certainly includes Drupal's system templates.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;article class="media media--type-tutorial-image media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
              &lt;div class="field__item"&gt;    &lt;img loading="eager" srcset="https://drupalize.me/sites/default/files/styles/max_400w/public/tutorials/images/core_themes_stark_inspect.png?itok=6ASQoth6 400w, https://drupalize.me/sites/default/files/styles/max_640w/public/tutorials/images/core_themes_stark_inspect.png?itok=WeWX4pjl 640w, https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/core_themes_stark_inspect.png?itok=jYuqUPEd 800w, https://drupalize.me/sites/default/files/styles/max_1600w/public/tutorials/images/core_themes_stark_inspect.png?itok=YQpgm7v9 1050w" sizes="(min-width: 500px) 400px
(min-width: 700px) 640px
(min-width: 1080px) 800px
800px" width="800" height="593" src="https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/core_themes_stark_inspect.png?itok=jYuqUPEd"&gt;


&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;p&gt;For troubleshooting, switching to Stark temporarily can help you determine whether problematic CSS or JavaScript coming from a module or complex theme is to blame.&lt;/p&gt;
&lt;p&gt;Stark does include a few files that are there but don't actually do anything, except to show you that you could use them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stark's &lt;em&gt;css/layout.css&lt;/em&gt; exists, but is now blank (see &lt;a href="https://www.drupal.org/node/2349711"&gt;Issue #2349711&lt;/a&gt;). It's blank so that Stark is truly "stark" now and truly allows you to see Drupal's default output with a browser's default styling.&lt;/li&gt;
&lt;li&gt;To the same purpose and in the same issue, (&lt;a href="https://www.drupal.org/node/2349711"&gt;#2349711&lt;/a&gt;), Stark no longer removes &lt;em&gt;normalize.css&lt;/em&gt;, a file is added by core. By keeping it, or rather by doing nothing to remove it as it did before, Stark remains a theme that can be used to examine and troubleshoot Drupal core's default behavior, which includes the addition of &lt;em&gt;normalize.css&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Stark's &lt;em&gt;stark.libraries.yml&lt;/em&gt; exists to show you how to load a CSS library, and it does in fact add &lt;em&gt;css/layout.css&lt;/em&gt; to the head of the HTML pages that use Stark, it just doesn't do anything to the layout, because &lt;em&gt;layout.css&lt;/em&gt; is blank.&lt;/li&gt;
&lt;li&gt;Similarly, &lt;em&gt;stark.breakpoints.yml&lt;/em&gt; does include some good examples of breakpoints, but since they don't correspond to any actual media queries in a CSS file in the Stark theme, this file doesn't really represent any real breakpoints or media queries in Stark. (See &lt;a href="https://drupalize.me/tutorial/what-breakpoint-yaml-file"&gt;What Is a Breakpoint YAML File?&lt;/a&gt; to learn more about the purpose of a &lt;em&gt;THEME-OR-MODULE.breakpoints.yml&lt;/em&gt; file).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Recap&lt;/h2&gt;
&lt;p&gt;In this tutorial, we explored Stark, a core Drupal theme. We learned what the purpose of Stark is and why it can be useful to enable and use Stark, especially when you want to learn about Drupal's system template files or need to troubleshoot certain problems with your Drupal site.&lt;/p&gt;
&lt;h2&gt;Further your understanding&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Explain two use cases for utilizing Stark to a colleague.&lt;/li&gt;
&lt;li&gt;What is the core system template for the main menu?&lt;/li&gt;
&lt;li&gt;Describe a troubleshooting situation in which enabling Stark might be useful.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Additional resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/configure-your-environment-theme-development"&gt;Configure Your Local Environment for Theme Development&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2021-02-11T17:52:31-06:00" title="Thursday, February 11, 2021 - 17:52" class="datetime"&gt;February 11, 2021&lt;/time&gt;
&lt;/div&gt;
      
  
      &lt;div class="field field--name-field-tutorial-videos field--type-entity-reference field--label-hidden field__items"&gt;
              &lt;div class="field__item"&gt;&lt;article class="media media--type-sprout-video media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-media-sproutvideo field--type-string field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Sprout Video&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;iframe src="https://videos.sproutvideo.com/embed/449fdfbe121ceac4cd/6b0fbde2392e99d7" frameborder="0" allowtransparency allowfullscreen referrerpolicy="no-referrer-when-downgrade" class="media-sproutvideo-embed sproutvideo-player" data-sprout-video-id="449fdfbe121ceac4cd" data-sprout-video-name="Core Theme: Stark"&gt;&lt;/iframe&gt;
&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;
&lt;/div&gt;
          &lt;/div&gt;
  </description>
  <pubDate>Thu, 30 Mar 2017 13:00:02 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">2874 at https://drupalize.me</guid>
    </item>
<item>
  <title>Core Themes: Bartik</title>
  <link>https://drupalize.me/tutorial/core-themes-bartik</link>
  <description>&lt;span&gt;Core Themes: Bartik&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2017-03-30T08:00:02-05:00" title="Thursday, March 30, 2017 - 08:00" class="datetime"&gt;Thu, 03/30/2017 - 08:00&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2873&amp;amp;2=read" token="Kbt5DkaIkqKxoQV7wlSGw9vzwK9naCg3iLvaHONcunQ"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2873&amp;amp;2=queue" token="G_R6FdL8PlFQdhBwattEZLzWFfwJ_uD-P8Ci2UzoFRI"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/208" hreflang="en"&gt;Theming&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/1462" hreflang="en"&gt;8.9.x/9.4.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Bartik is a core theme in Drupal. As a default theme for Drupal, it serves as an instructive example of a well-developed responsive theme. In this tutorial, we'll tour and explore Bartik, identify its primary features, and explain the use case for the Bartik theme and what you can learn from it.&lt;/p&gt;&lt;/div&gt;
      

            &lt;div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;Bartik is a core theme in Drupal. As a default theme for Drupal, it serves as an instructive example of a well-developed responsive theme. In this tutorial, we'll tour and explore Bartik, identify its primary features, and explain the use case for the Bartik theme and what you can learn from it.&lt;/p&gt;
&lt;h2&gt;Goal&lt;/h2&gt;
&lt;p&gt;Recognize Bartik theme and identify its primary features. Explain the use cases for Bartik and what you can learn from it.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/what-theme"&gt;What Is a Theme?&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Watch Core Theme: Bartik&lt;/h2&gt;
&lt;article class="media media--type-sprout-video media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-media-sproutvideo field--type-string field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Sprout Video&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;iframe src="https://videos.sproutvideo.com/embed/119fdfbe121ceac598/9248436c3f39ba3c" frameborder="0" allowtransparency allowfullscreen referrerpolicy="no-referrer-when-downgrade" class="media-sproutvideo-embed sproutvideo-player" data-sprout-video-id="119fdfbe121ceac598" data-sprout-video-name="Core Theme: Bartik"&gt;&lt;/iframe&gt;
&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;h2&gt;Why explore Bartik?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;It's a good example of how to create a custom theme.&lt;/li&gt;
&lt;li&gt;See the principles of Drupal theming-in-action.&lt;/li&gt;
&lt;li&gt;It's Drupal's default theme and the first theme you'll see when you install Drupal.&lt;/li&gt;
&lt;li&gt;See how Drupal implements responsive features in a theme.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Explore the files of Bartik&lt;/h3&gt;
&lt;p&gt;To get familiar with Bartik and the principles of Drupal theming, fire up a text editor and start exploring the files inside the Bartik theme.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;article class="media media--type-tutorial-image media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
              &lt;div class="field__item"&gt;    &lt;img loading="eager" srcset="https://drupalize.me/sites/default/files/styles/max_400w/public/tutorials/images/core_themes_bartik_demo.jpg?itok=-IR_a9Wx 400w, https://drupalize.me/sites/default/files/styles/max_640w/public/tutorials/images/core_themes_bartik_demo.jpg?itok=SzdWUnMq 640w, https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/core_themes_bartik_demo.jpg?itok=0IHhxE0- 800w" sizes="(min-width: 500px) 400px
(min-width: 700px) 640px
(min-width: 1080px) 800px
800px" width="800" height="362" src="https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/core_themes_bartik_demo.jpg?itok=0IHhxE0-"&gt;


&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;div class="tutorial--steps"&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Navigate to &lt;em&gt;core/themes/bartik&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;This is the root directory for the Bartik theme.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;article class="media media--type-tutorial-image media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
              &lt;div class="field__item"&gt;    &lt;img loading="eager" srcset="https://drupalize.me/sites/default/files/styles/max_400w/public/tutorials/images/core_themes_bartik_files.png?itok=0ri2iA6O 400w, https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/core_themes_bartik_files.png?itok=iKP2MDCJ 471w" sizes="(min-width: 500px) 400px
(min-width: 700px) 640px
(min-width: 1080px) 800px
800px" width="471" height="388" src="https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/core_themes_bartik_files.png?itok=iKP2MDCJ"&gt;


&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Explore Bartik's info file&lt;/h3&gt;
&lt;p&gt;Open &lt;em&gt;bartik.info.yml&lt;/em&gt; in a text editor or IDE such as PhpStorm. Here you'll find examples of how a theme can &lt;a href="https://drupalize.me/tutorial/describe-your-theme-info-file"&gt;define meta information&lt;/a&gt;, &lt;a href="https://drupalize.me/tutorial/theme-inheritance-base-themes"&gt;indicate a base theme&lt;/a&gt;, &lt;a href="https://drupalize.me/tutorial/what-are-asset-libraries"&gt;attach libraries&lt;/a&gt;, specify stylesheets for CKEditor, and define &lt;a href="https://drupalize.me/tutorial/regions"&gt;regions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Explore Bartik's template files&lt;/h3&gt;
&lt;p&gt;Navigate to the &lt;em&gt;templates&lt;/em&gt; directory and explore Bartik's template files. You might want to start with &lt;em&gt;page.html.twig&lt;/em&gt; and notice how Bartik's regions, defined in &lt;em&gt;bartik.info.yml&lt;/em&gt;, are &lt;a href="https://drupalize.me/tutorial/arrays-and-objects-twig"&gt;output via the &lt;code&gt;page&lt;/code&gt; array using Twig&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Explore Bartik's CSS libraries&lt;/h3&gt;
&lt;p&gt;Take a look at &lt;em&gt;bartik.libraries.yml&lt;/em&gt; and notice how all of Bartik's CSS files in its &lt;em&gt;css&lt;/em&gt; directory are listed here under the &lt;code&gt;global-styling&lt;/code&gt; key. To learn about the concept of libraries in Drupal theming and how to define and attach libraries, check out the following tutorials:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/what-are-asset-libraries"&gt;What Are Libraries?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/define-asset-library"&gt;Define an Asset Library&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/attach-asset-library"&gt;Attach a Library&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Explore preprocess functions in bartik.theme&lt;/h3&gt;
&lt;p&gt;Open &lt;em&gt;bartik.theme&lt;/em&gt;. This is a PHP file (known in previous versions of Drupal as &lt;em&gt;template.php&lt;/em&gt;) containing PHP functions, mostly preprocess hooks. In Bartik's ".theme" file, you'll find functions that implement a variety of preprocess hooks, altering and adding variables to various template files. To learn more about preprocess functions, explore the following tutorials and use Bartik as an example to follow along:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/what-are-preprocess-functions"&gt;What Are Preprocess Functions?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/change-variables-preprocess-functions"&gt;Change Variables with Preprocess Functions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/add-variables-template-file"&gt;Add Variables to a Template File&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Explore Bartik's responsive features&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Open &lt;em&gt;bartik.breakpoints.yml&lt;/em&gt; and take note of the breakpoints defined in this YAML file.&lt;/li&gt;
&lt;li&gt;Navigate to the Extend page and enable the core Responsive Images module.&lt;/li&gt;
&lt;li&gt;Navigate to Configuration &amp;gt; Responsive Image styles&lt;/li&gt;
&lt;li&gt;Under Breakpoint group, select Bartik. Notice how the breakpoints defined in &lt;em&gt;bartik.breakpoints.yml&lt;/em&gt; correspond with those listed in the field sets now displayed under Breakpoint group.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To learn more about breakpoint configuration files, see this tutorial: &lt;a href="https://drupalize.me/tutorial/what-breakpoint-yaml-file"&gt;What Is a Breakpoint YAML File?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div class="tutorial--steps-step"&gt;
&lt;h3&gt;Explore Bartik's integration with Color module&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Navigate to Appearance &amp;gt; Settings &amp;gt; Bartik&lt;/li&gt;
&lt;li&gt;Notice that Bartik's settings include a color picker UI&lt;/li&gt;
&lt;li&gt;Try it out and change the background colors of the header&lt;/li&gt;
&lt;li&gt;In a code editor, navigate to &lt;em&gt;core/themes/bartik/color&lt;/em&gt; and explore the files inside: &lt;em&gt;color.inc&lt;/em&gt;, &lt;em&gt;preview.css&lt;/em&gt;, &lt;em&gt;preview.html&lt;/em&gt;, and &lt;em&gt;preview.js&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;See also the &lt;a href="https://www.drupal.org/documentation/modules/color"&gt;documentation for Color module on Drupal.org&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;article class="media media--type-tutorial-image media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-image field--type-image field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Image&lt;/div&gt;
              &lt;div class="field__item"&gt;    &lt;img loading="eager" srcset="https://drupalize.me/sites/default/files/styles/max_400w/public/tutorials/images/core_themes_bartik_color_settings.png?itok=ZAnboFyv 400w, https://drupalize.me/sites/default/files/styles/max_640w/public/tutorials/images/core_themes_bartik_color_settings.png?itok=uuDGMo42 640w, https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/core_themes_bartik_color_settings.png?itok=NFuQXYj2 679w" sizes="(min-width: 500px) 400px
(min-width: 700px) 640px
(min-width: 1080px) 800px
800px" width="679" height="781" src="https://drupalize.me/sites/default/files/styles/max_800w/public/tutorials/images/core_themes_bartik_color_settings.png?itok=NFuQXYj2"&gt;


&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;As you can see, there's a lot to learn just by exploring Bartik. Use our theming guide in conjunction with Bartik to explore many principles of Drupal theming in action, and then apply what you learn in your own custom theme.&lt;/p&gt;
&lt;p&gt;If you want to use Bartik's files and structure as a basis for your own theme, don't modify &lt;em&gt;core/themes/bartik&lt;/em&gt;, but instead copy &lt;em&gt;core/themes/bartik&lt;/em&gt; to &lt;em&gt;themes/&lt;/em&gt; and rename the directory and any filename containing the "bartik" with your new theme's machine name. See the tutorial &lt;a href="https://drupalize.me/tutorial/structure-theme"&gt;Structure of a Theme&lt;/a&gt; for more details on how to set up a custom theme. These same guidelines apply to any theme, including the next core theme we'll be exploring: &lt;a href="https://drupalize.me/tutorial/core-themes-stark"&gt;Stark&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Recap&lt;/h2&gt;
&lt;p&gt;In this tutorial, we explored Bartik, a core theme in Drupal. We learned about Bartik's unique features and what theming concepts you can learn from exploring Bartik's theme files.&lt;/p&gt;
&lt;h2&gt;Further your understanding&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Explain to a colleague two or three reasons why it can be useful and instructive to explore Bartik.&lt;/li&gt;
&lt;li&gt;Which Drupal module does Bartik depend on in its theme settings?&lt;/li&gt;
&lt;li&gt;What is the name of the file that defines Bartik's &lt;a href="https://drupalize.me/tutorial/regions"&gt;regions&lt;/a&gt;?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Additional resources&lt;/h2&gt;
&lt;p&gt;This sampling of resources will help you understand Bartik and learn the concepts and techniques of theming in Drupal. Explore other theming tutorials in the rest of our Drupal Theming Guide.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/drupal-base-themes-stable-and-classy"&gt;Drupal Base Themes: Stable and Classy&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/download-install-and-uninstall-themes"&gt;Install and Uninstall a Theme&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/structure-theme"&gt;Structure of a Theme&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/describe-your-theme-info-file"&gt;Describe Your Theme with an Info File&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/regions"&gt;Regions&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/theme-inheritance-base-themes"&gt;Theme Inheritance with Base Themes&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/what-breakpoint-yaml-file"&gt;Breakpoints in Drupal&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/twig-drupal"&gt;Twig in Drupal&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/what-are-asset-libraries"&gt;What Are Libraries?&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/documentation/modules/color"&gt;Documentation for Color module&lt;/a&gt; (Drupal.org)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2021-02-11T17:52:31-06:00" title="Thursday, February 11, 2021 - 17:52" class="datetime"&gt;February 11, 2021&lt;/time&gt;
&lt;/div&gt;
      
  
      &lt;div class="field field--name-field-tutorial-videos field--type-entity-reference field--label-hidden field__items"&gt;
              &lt;div class="field__item"&gt;&lt;article class="media media--type-sprout-video media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-media-sproutvideo field--type-string field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Sprout Video&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;iframe src="https://videos.sproutvideo.com/embed/119fdfbe121ceac598/9248436c3f39ba3c" frameborder="0" allowtransparency allowfullscreen referrerpolicy="no-referrer-when-downgrade" class="media-sproutvideo-embed sproutvideo-player" data-sprout-video-id="119fdfbe121ceac598" data-sprout-video-name="Core Theme: Bartik"&gt;&lt;/iframe&gt;
&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;
&lt;/div&gt;
          &lt;/div&gt;
  </description>
  <pubDate>Thu, 30 Mar 2017 13:00:02 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">2873 at https://drupalize.me</guid>
    </item>
<item>
  <title>Drupal Console</title>
  <link>https://drupalize.me/tutorial/drupal-console</link>
  <description>&lt;span&gt;Drupal Console&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2016-10-06T17:18:11-05:00" title="Thursday, October 6, 2016 - 17:18" class="datetime"&gt;Thu, 10/06/2016 - 17:18&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2922&amp;amp;2=read" token="4ZsFph2cXV34X6I8kOVoRd2cr8eld-GrN1q78sBJwU8"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2922&amp;amp;2=queue" token="58JCkpFkla1vFzcZH3YLIpCW48OR6ocq-8V1h8HCjt4"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/216" hreflang="en"&gt;Backend and Infrastructure&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/1462" hreflang="en"&gt;8.9.x/9.4.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;The &lt;a href="https://drupalconsole.com/"&gt;Drupal Console&lt;/a&gt; is a suite of tools run from a command line interface (CLI) to generate boilerplate code and interact with a Drupal installation.&lt;/p&gt;
&lt;p&gt;Note: This project is no longer actively maintained. See the &lt;a href="https://drupalize.me/topic/drush"&gt;Drush&lt;/a&gt; topic for alternative solutions.&lt;/p&gt;&lt;/div&gt;
      

            &lt;div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"&gt;&lt;p&gt;The &lt;a href="https://drupalconsole.com/"&gt;Drupal Console&lt;/a&gt; is a suite of tools run from a command line interface (CLI) to generate boilerplate code and interact with a Drupal installation.&lt;/p&gt;
&lt;p&gt;Note: This project is no longer actively maintained. See the &lt;a href="https://drupalize.me/topic/drush"&gt;Drush&lt;/a&gt; topic for alternative solutions.&lt;/p&gt;
&lt;h2&gt;Goal&lt;/h2&gt;
&lt;p&gt;Learn about the Drupal Console and what you can do with it.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/videos/moving-around-command-line?p=1149"&gt;Command Line Basics: Moving Around the Command Line&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/topic/composer"&gt;Composer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/series/user-guide/installation-chapter"&gt;Install Drupal&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installing Drupal Console&lt;/h2&gt;
&lt;p&gt;To get up and running with Drupal Console, follow the instructions in the project's official documentation: &lt;a href="https://drupalconsole.com/docs/en/getting/project"&gt;Getting the project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tip: If you're running into difficulty installing Drupal Console with an existing site (and dependencies are not resolving), try passing the &lt;code&gt;--no-update&lt;/code&gt; flag, which will disable automatic updates of dependencies.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;composer require drupal/console:~1.0 \
--prefer-dist \
--optimize-autoloader \
--sort-packages \
--no-update

composer update
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;What does Drupal Console do?&lt;/h2&gt;
&lt;p&gt;For a complete list of commands run &lt;code&gt;drupal list&lt;/code&gt;, or &lt;a href="https://drupalconsole.com/docs/en/commands/"&gt;view the documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Generate code&lt;/h3&gt;
&lt;p&gt;Drupal Console provides a number of commands for creating module scaffolding and boilerplate code. Generation commands will walk you through a set of interactive questions about what you want to generate. Then it will generate the required boilerplate to build the requested component. This can dramatically decrease the time it takes to write common components like plugins, services, or custom entity types.&lt;/p&gt;
&lt;p&gt;Note: When using Drupal Console to generate a module or theme, you will need to edit the info file and add the &lt;code&gt;core_version_requirement&lt;/code&gt; key. For details, see &lt;a href="https://drupalize.me/tutorial/overview-info-files-drupal-modules"&gt;Overview: Info Files for Drupal Modules&lt;/a&gt; and &lt;a href="https://drupalize.me/tutorial/describe-your-theme-info-file"&gt;Describe Your Theme with an Info File&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Try out various Drupal Console's code scaffolding commands in the following tutorials:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/create-settings-form-module"&gt;Create a Settings Form with a Module&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/define-new-plugin-type"&gt;Define a New Plugin Type&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/create-custom-content-entity"&gt;Create a Custom Content Entity&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/create-configuration-entity"&gt;Create a Configuration Entity&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Interact with your Drupal installation&lt;/h3&gt;
&lt;p&gt;Drupal Console allows you to interact with your Drupal installation, from rebuilding caches, to listing routes, services, and modules, and interacting with the configuration management.&lt;/p&gt;
&lt;p&gt;One of our favorite features is that Drupal Console will create lists of things like plugin types, events, and services available. Because it's being used in the context of your specific installation, that list will include options provided by any contributed modules not just Drupal core. This means the documentation provided by Drupal Console in the context of your site will be a bit more complete than what you might find online.&lt;/p&gt;
&lt;h3&gt;Learn to develop with Drupal&lt;/h3&gt;
&lt;p&gt;Drupal Console helps you learn to develop applications with Drupal. In addition to generating complex code, you can increase the verbosity of the code comments, to better understand the generated code and how to build on it, by using the &lt;code&gt;--learning&lt;/code&gt; option.&lt;/p&gt;
&lt;p&gt;You can also use Drupal Console to explore the inner workings of your current installation using the &lt;code&gt;debug:*&lt;/code&gt; commands.&lt;/p&gt;
&lt;h2&gt;Recap&lt;/h2&gt;
&lt;p&gt;In this tutorial, we learned about some things you can do in a Drupal project with the command-line interface tool, Drupal Console.&lt;/p&gt;
&lt;h2&gt;Further your understanding&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Browse through the &lt;a href="https://drupalconsole.com/docs/en/commands/"&gt;available commands&lt;/a&gt; and see if there's one that you could try out right now.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/tutorial/what-is-drush?p=3516"&gt;Learn about the latest version of Drush&lt;/a&gt;. While it doesn't provide all of the features of Drupal Console, there is a lot of overlap.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Additional resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Official project page &lt;a href="http://drupalconsole.com"&gt;http://drupalconsole.com&lt;/a&gt;, and &lt;a href="https://drupalconsole.com/docs"&gt;documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drupalize.me/series/learn-drush-drupal-shell"&gt;Learn Drush: The Drupal Shell&lt;/a&gt; (Drupalize.Me)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-07-12T16:59:25-05:00" title="Friday, July 12, 2024 - 16:59" class="datetime"&gt;July 12, 2024&lt;/time&gt;
&lt;/div&gt;
      

  &lt;div class="clearfix text-formatted field field--name-field-alternate-resources field--type-text-long field--label-above"&gt;
    &lt;h3 class="field__label"&gt;Alternate resources&lt;/h3&gt;
              &lt;div class="field__item"&gt;&lt;p&gt;Some (not all) features of Drupal Console are available in Drush. See &lt;a href="https://drupalize.me/tutorial/install-drush-using-composer?p=3516"&gt;Install Drush Using Composer&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
          &lt;/div&gt;
</description>
  <pubDate>Thu, 06 Oct 2016 22:18:11 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">2922 at https://drupalize.me</guid>
    </item>
<item>
  <title>Underscore.js in a Theme or Module</title>
  <link>https://drupalize.me/tutorial/underscorejs-theme-or-module</link>
  <description>&lt;span&gt;Underscore.js in a Theme or Module&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2016-03-30T08:00:00-05:00" title="Wednesday, March 30, 2016 - 08:00" class="datetime"&gt;Wed, 03/30/2016 - 08:00&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2913&amp;amp;2=read" token="Cp0uUCFFF8thdu9T19jKTGyzLL_Jy62rv6Zs6fz1cbM"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2913&amp;amp;2=queue" token="NXqWSRH28eI_iBZksBXmQYdDBOMhyly-S8bzw87n_jo"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/208" hreflang="en"&gt;Theming&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/1462" hreflang="en"&gt;8.9.x/9.4.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Underscore.js is a very small library which provides several utility functions and helpers to make working with JavaScript a little bit easier. In this tutorial we'll take a look at a part of the library, learn where the full library is documented, and see how we can make use of Underscore.js in a custom block on our Drupal site.&lt;/p&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2023-01-26T19:12:23-06:00" title="Thursday, January 26, 2023 - 19:12" class="datetime"&gt;January 26, 2023&lt;/time&gt;
&lt;/div&gt;
      

  &lt;div class="clearfix text-formatted field field--name-field-alternate-resources field--type-text-long field--label-above"&gt;
    &lt;h3 class="field__label"&gt;Alternate resources&lt;/h3&gt;
              &lt;div class="field__item"&gt;&lt;p&gt;See the related &lt;a href="https://www.drupal.org/node/3273118"&gt;change record&lt;/a&gt; for information on how to update your Underscore code with vanilla JS.&lt;/p&gt;&lt;/div&gt;
          &lt;/div&gt;
</description>
  <pubDate>Wed, 30 Mar 2016 13:00:00 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">2913 at https://drupalize.me</guid>
    </item>
<item>
  <title>Use a Base Theme</title>
  <link>https://drupalize.me/tutorial/use-base-theme</link>
  <description>&lt;span&gt;Use a Base Theme&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2016-02-24T08:00:00-06:00" title="Wednesday, February 24, 2016 - 08:00" class="datetime"&gt;Wed, 02/24/2016 - 08:00&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2914&amp;amp;2=read" token="G8FYwF3rJvwSREroAym5_BmhNb_d2yUVMYgDx7tXk_g"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2914&amp;amp;2=queue" token="ToUTQTc_Ky5VTgewj0qPouJNTSFRCnLhwix2Yn_GzSQ"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/208" hreflang="en"&gt;Theming&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/1462" hreflang="en"&gt;8.9.x/9.4.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Make your theme a subtheme of a &lt;em&gt;base&lt;/em&gt; theme, allowing it to inherit all the base theme's templates and other properties. When creating Drupal themes it is common to use the Classy theme provided with Drupal core as a base theme to jumpstart your development.&lt;/p&gt;
&lt;p&gt;In this tutorial we'll learn how to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use the &lt;code&gt;base theme&lt;/code&gt; key in our theme's &lt;em&gt;THEMENAME.info.yml&lt;/em&gt; file&lt;/li&gt;
&lt;li&gt;Make our Ice Cream theme inherit from the Classy theme, or any other theme&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial you should be able to tell Drupal that your theme is a child of another theme and should inherit all of the parent theme's features.&lt;/p&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2024-08-13T13:04:29-05:00" title="Tuesday, August 13, 2024 - 13:04" class="datetime"&gt;August 13, 2024&lt;/time&gt;
&lt;/div&gt;
      
  
      &lt;div class="field field--name-field-tutorial-videos field--type-entity-reference field--label-hidden field__items"&gt;
              &lt;div class="field__item"&gt;&lt;article class="media media--type-sprout-video media--view-mode-default"&gt;
  
      
  
  &lt;div class="field field--name-field-media-media-sproutvideo field--type-string field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Sprout Video&lt;/div&gt;
              &lt;div class="field__item"&gt;&lt;iframe src="https://videos.sproutvideo.com/embed/ea9fdfbe1318e3c663/f39bc4f85c077f15" frameborder="0" allowtransparency allowfullscreen referrerpolicy="no-referrer-when-downgrade" class="media-sproutvideo-embed sproutvideo-player" data-sprout-video-id="ea9fdfbe1318e3c663" data-sprout-video-name="Use a Base Theme"&gt;&lt;/iframe&gt;
&lt;/div&gt;
          &lt;/div&gt;

  &lt;/article&gt;
&lt;/div&gt;
          &lt;/div&gt;
  </description>
  <pubDate>Wed, 24 Feb 2016 14:00:00 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">2914 at https://drupalize.me</guid>
    </item>
<item>
  <title>Drupal Base Themes: Stable and Classy</title>
  <link>https://drupalize.me/tutorial/drupal-base-themes-stable-and-classy</link>
  <description>&lt;span&gt;Drupal Base Themes: Stable and Classy&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Admin&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;time datetime="2016-02-24T08:00:00-06:00" title="Wednesday, February 24, 2016 - 08:00" class="datetime"&gt;Wed, 02/24/2016 - 08:00&lt;/time&gt;
&lt;/span&gt;
&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2882&amp;amp;2=read" token="5oFszfrjr6DX7VH9sSxSnz1mMlnuZORD19g1RS5b6wI"&gt;&lt;/drupal-render-placeholder&gt;&lt;drupal-render-placeholder callback="flag.link_builder:build" arguments="0=node&amp;amp;1=2882&amp;amp;2=queue" token="ltqMpma-FCL5D-8RzuVSGmSm-immjcR6XVrRlW9C12o"&gt;&lt;/drupal-render-placeholder&gt;
&lt;div class="field field--name-taxonomy-categories field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Categories&lt;/div&gt;
  
    &lt;div class="field__items"&gt;
              &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/208" hreflang="en"&gt;Theming&lt;/a&gt;&lt;/span&gt;      &lt;/div&gt;
  &lt;/div&gt;

&lt;div class="field field--name-taxonomy-minor-version field--type-entity-reference field--label-visually_hidden"&gt;
    &lt;div class="field__label visually-hidden"&gt;Up-to-date with minor version&lt;/div&gt;
  
            &lt;span class="field__item"&gt;&lt;a href="https://drupalize.me/taxonomy/term/1462" hreflang="en"&gt;8.9.x/9.4.x&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt;


            &lt;div class="clearfix text-formatted field field--name-field-tutorial-summary field--type-text-long field--label-hidden field__item"&gt;&lt;p&gt;Drupal core comes with a few base themes: Stable, Stable 9, Classy, and Stark. Each one has a different intended use case. And all of them are useful as a reference for building your own themes.&lt;/p&gt;
&lt;p&gt;In this tutorial we'll:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn what each of the base themes included in Drupal core is intended to be used for&lt;/li&gt;
&lt;li&gt;Compare the output from the base themes with a focus on Stable and Classy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this tutorial you'll be able to explain the use case for each of the base themes included with Drupal core and make an informed decision about which, if any, to use when creating your own custom themes.&lt;/p&gt;&lt;/div&gt;
      
  
            &lt;div class="field field--name-field-last-reviewed-date field--type-timestamp field--label-hidden field__item"&gt;&lt;time datetime="2022-02-23T18:19:54-06:00" title="Wednesday, February 23, 2022 - 18:19" class="datetime"&gt;February 23, 2022&lt;/time&gt;
&lt;/div&gt;
      

  &lt;div class="clearfix text-formatted field field--name-field-alternate-resources field--type-text-long field--label-above"&gt;
    &lt;h3 class="field__label"&gt;Alternate resources&lt;/h3&gt;
              &lt;div class="field__item"&gt;&lt;p&gt;Stable and Classy have been removed from core. For new themes, see &lt;a href="https://drupalize.me/tutorial/start-new-theme-starterkit?p=3267"&gt;Start a New Theme with Starterkit&lt;/a&gt;. To update a theme's dependency on &lt;code&gt;stable&lt;/code&gt; or &lt;code&gt;classy&lt;/code&gt;, see the following change records on Drupal.org:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/node/3309392"&gt;Stable theme has been removed from core&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.drupal.org/node/3305674"&gt;Classy removed and replaced with Starterkit theme generator&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
          &lt;/div&gt;
</description>
  <pubDate>Wed, 24 Feb 2016 14:00:00 +0000</pubDate>
    <dc:creator>Admin</dc:creator>
    <guid isPermaLink="false">2882 at https://drupalize.me</guid>
    </item>

  </channel>
</rss>
