diff --git a/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php b/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php
index 5631483d45..7039f6e54e 100644
--- a/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php
+++ b/core/lib/Drupal/Core/Asset/LibraryDiscoveryParser.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Asset\Exception\LibraryDefinitionMissingLicenseException;
 use Drupal\Core\Extension\ExtensionPathResolver;
 use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Plugin\Discovery\FrontMatterDiscovery;
 use Drupal\Core\Serialization\Yaml;
 use Drupal\Core\StreamWrapper\StreamWrapperManagerInterface;
 use Drupal\Core\Theme\ThemeManagerInterface;
@@ -126,6 +127,13 @@ public function buildByExtension($extension) {
     $libraries = $this->parseLibraryInfo($extension, $path);
     $libraries = $this->applyLibrariesOverride($libraries, $extension);
 
+    // This is not valid place to locate this code. But it is test of approach.
+    $discovery = new FrontMatterDiscovery([$path], '/\.frontmatter\.html\.twig$/i', 'libraries', ['plugins', 'libraries']);
+    $definitions = $discovery->getDefinitions();
+    if (count($definitions) > 0) {
+      $libraries = array_merge($libraries, $definitions);
+    }
+
     foreach ($libraries as $id => &$library) {
       if (!isset($library['js']) && !isset($library['css']) && !isset($library['drupalSettings']) && !isset($library['dependencies'])) {
         throw new IncompleteLibraryDefinitionException(sprintf("Incomplete library definition for definition '%s' in extension '%s'", $id, $extension));
diff --git a/core/lib/Drupal/Core/Layout/LayoutPluginManager.php b/core/lib/Drupal/Core/Layout/LayoutPluginManager.php
index 2cd0c68957..e52f1c5d17 100644
--- a/core/lib/Drupal/Core/Layout/LayoutPluginManager.php
+++ b/core/lib/Drupal/Core/Layout/LayoutPluginManager.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Plugin\DefaultPluginManager;
 use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
 use Drupal\Core\Plugin\Discovery\ContainerDerivativeDiscoveryDecorator;
+use Drupal\Core\Plugin\Discovery\FrontMatterDiscoveryDecorator;
 use Drupal\Core\Plugin\Discovery\YamlDiscoveryDecorator;
 use Drupal\Core\Layout\Annotation\Layout;
 use Drupal\Core\Plugin\FilteredPluginManagerTrait;
@@ -71,6 +72,11 @@ protected function providerExists($provider) {
   protected function getDiscovery() {
     if (!$this->discovery) {
       $discovery = new AnnotatedClassDiscovery($this->subdir, $this->namespaces, $this->pluginDefinitionAnnotationName, $this->additionalAnnotationNamespaces);
+      $discovery = new FrontMatterDiscoveryDecorator($discovery, $this->themeHandler->getThemeDirectories(), '/\.frontmatter\.html\.twig$/i', 'layouts', ['plugins', 'layouts']);
+      $discovery
+        ->addTranslatableProperty('label')
+        ->addTranslatableProperty('description')
+        ->addTranslatableProperty('category');
       $discovery = new YamlDiscoveryDecorator($discovery, 'layouts', $this->moduleHandler->getModuleDirectories() + $this->themeHandler->getThemeDirectories());
       $discovery
         ->addTranslatableProperty('label')
diff --git a/core/themes/bartik/packages/components/molecules/bartik-block.css b/core/themes/bartik/packages/components/molecules/bartik-block.css
new file mode 100644
index 0000000000..83e69c4806
--- /dev/null
+++ b/core/themes/bartik/packages/components/molecules/bartik-block.css
@@ -0,0 +1,4 @@
+.m-bartik-block {
+  font-size: 2rem;
+  border: 1px solid green;
+}
diff --git a/core/themes/bartik/packages/components/molecules/bartik-block.frontmatter.html.twig b/core/themes/bartik/packages/components/molecules/bartik-block.frontmatter.html.twig
new file mode 100644
index 0000000000..58d8a9caf6
--- /dev/null
+++ b/core/themes/bartik/packages/components/molecules/bartik-block.frontmatter.html.twig
@@ -0,0 +1,44 @@
+---
+some_valuable_inner_variables:
+  foo: bar
+plugins:
+  layouts:
+    bartik_components_block_layout:
+      label: 'Bartik block'
+      # Path should be updated with some const like SELF
+      path: packages/components/molecules
+      # Template should be updated with some const like SELF
+      template: bartik-block.frontmatter
+      library: bartik/block-component-styling
+      category: 'Bartik components'
+      default_region: header
+      icon_map:
+        - [header]
+        - [content]
+      regions:
+        header:
+          label: Header
+        content:
+          label: Content
+  libraries:
+    block-component-styling:
+      version: VERSION
+      css:
+        base:
+          packages/components/molecules/bartik-block.css: {}
+---
+{%
+  set classes = [
+    'm-bartik-block',
+  ]
+%}
+{% if content %}
+  <div{{ attributes.addClass(classes) }}>
+    <div {{ region_attributes.content.addClass('layout__region', 'layout__region--header') }}>
+      {{ content.header }}
+    </div>
+    <div {{ region_attributes.content.addClass('layout__region', 'layout__region--content') }}>
+      {{ content.content }}
+    </div>
+  </div>
+{% endif %}
