Config Node Type Example is a basic example of defining a content type through configuration YAML files.

In this example we create two content types for Drupal 8, using only YAML files. Well, mostly only YAML files... One of our content types is locked, so the user can't delete it while the module is installed. For this we need a very tiny amount of support code.

You can observe these content types on the content type admin page.

The simplest way to author the per-type YAML files is to create the content types within Drupal and then take the YAML files from the configuration directory. Like this:

  • Install Drupal 8.
  • Create a new content type at /admin/structure/types/add. Let's call it 'Nifty Content Type'.
  • Export the configuration from admin/config/development/configuration. Specific steps depending on needs, and decisions made during Drupal 8 beta. You'll see a file called node.type.nifty_content_type.yml.
  • Copy or move that file to your module's config/install directory, along with associated field and form yml files.
  • Remove the uuid information from the configuration files.

You can see some of these YAML files in this module's config/install directory.

If you want to lock a content type created in this way, you'll have to implement hook_install() and hook_uninstall(). In hook_install(), you'll set the content type to be locked. In hook_uninstall() you'll set the content type to be unlocked.

Content types created in this way will remain available after the user has uninstalled the module. If you were to fail to set the content type as unlocked, the user would not be able to delete it.

This example is based on this change notification: https://drupal.org/node/2029519