Creating an info file

A simple .info.yml file

In Drupal 8, the .info files from themes, modules and profiles are replaced by .info.yml files (read the change record). These files are parsed using the Symphony YAML Component.

name: Awesome Theme

Fairly simple. This is the name of the theme. It's the name that also appears on the Appearance page, where you can activate your theme.

description: 'An awesome D8 theme.'

A theme description. This description is also displayed on the Appearance page.

package: Custom

The package in which your theme lives. For the core themes, this package is of course core.

type: theme

Since the info.yml files are used for besides themes also used for modules and profiles, this line lets Drupal know if it's a theme, module or a profile.

version: 1.0

The version of the theme.

core: 8.x

The version of Drupal core the theme requires.

Using a base theme

base theme: classy

The line above gives you the power to extend from a base theme. This line can be found in both and, since these two core themes extend Classy.


To wrap things up, this is our .info.yml file so far:

name: Awesome Theme
description: 'An awesome D8 theme.'
base theme: classy
package: Custom
type: theme
version: 1.0
core: 8.x

Save this as {theme_name}.info.yml ( inside the created custom theme directory (eg. themes/custom/example/ Now navigate to admin/appearance and see your theme displayed. You can now even enable the theme. Hooray!

Adding a screenshot

When navigation to the appearance page, you might notice a no screenshot image for our theme. This is because no screenshot has been found (duh!). A screenshot is automatically detected and displayed if the filename is screenshot.png. If we add this file, we would see the screenshot on the appearance page.

Otherwise you can manually add a screenshot with the following line:

screenshot: otherfilename.png

If everything went well, you should be able to see the screenshot:

The screenshot of cause doesn't have to be a *.png. It can be an *.svg or even an animated *.gif

Conclusion: the filename for a screenshot does not have to be screenshot.png, as long as it is defined in the {theme}.info.yml file.

Adding stylesheets

In Drupal 8, both stylesheets and scripts should be added using libraries. Read more on how to create a library with css and javascript files in the libraries chapter.

Removing stylesheets

Alternatively, a stylesheet can also be removed.

# Remove a CSS file:​
  - core/assets/vendor/jquery.ui/themes/base/dialog.css

To remove a stylesheet, the full path to the css file should be used (instead of just a file name). This due to the fact that multiple css files can have the same name.

In cases where a Drupal core asset is being removed the full file path is needed. In cases where the file is part of a library that belongs to a module or theme, a token can be used.

When using a token, it needs to be quoted because @ is a reserved indicator in YAML.

# Removing a stylesheet from Bartik using the @ token.
  - '@bartik/css/style.css'


Regions can be defined using the regions tag. Here is an example where 3 regions are defined: a header, a content and a footer region:

# Regions
  header: 'Header'
  content: 'Content'
  footer: 'Footer'

A region that is required in all theme is the content region.

Regions hidden

The regions_hidden can be applied to any previous defined regions. Regions with this attribute will not show up on the block administration page. This means they can't have blocks assigned to them by ordinary mechanisms. Drupal uses this feature to protect the special 'page_top' and 'page_bottom' regions from adventurous themers. This can be used by module writers and theme writers to protect a given region from having unexpected content inserted into the output. The contains this tag, in order to hide the 'Sidebar First' region.

  - sidebar_first