diff --git a/docs/content/patterns-definition.rst b/docs/content/patterns-definition.rst
index f3916c42b2fce5fae19b25896de36dca2e9208b4..64b692ee5454e91c993060f2a64d47bf3f97270f 100644
--- a/docs/content/patterns-definition.rst
+++ b/docs/content/patterns-definition.rst
@@ -43,6 +43,8 @@ and list them using the following format:
        - pattern_library_two:
           js:
             js/library_two.js: {}
+          dependencies:
+            - core/jquery
 
 Let's break this down:
 
diff --git a/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/media/media.ui_patterns.yml b/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/media/media.ui_patterns.yml
index 95014db56edf1953e0c77393cb93f544a49f7101..00af1a5bcd88fa779f49046699021bc8314db955 100644
--- a/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/media/media.ui_patterns.yml
+++ b/modules/ui_patterns_test/ui_patterns_test_theme/templates/patterns/media/media.ui_patterns.yml
@@ -36,3 +36,5 @@ media:
         js:
           js/media1.js: {}
           js/media2.js: {}
+        dependencies:
+          - core/drupal.tabledrag
diff --git a/src/Plugin/PatternBase.php b/src/Plugin/PatternBase.php
index 1dc9ba0886cfedbaa69c7dc387a751a8437652c0..c0ad451309c6234ad7b2b57351c388ca1fa16ef5 100644
--- a/src/Plugin/PatternBase.php
+++ b/src/Plugin/PatternBase.php
@@ -96,14 +96,14 @@ abstract class PatternBase extends PluginBase implements PatternInterface, Conta
   /**
    * Process libraries.
    *
-   * @param array $libraries
-   *    Libraries array.
+   * @param array|string $libraries
+   *    List of dependencies or "dependencies:" root property.
    * @param string $base_path
    *    Pattern base path.
    * @param string $parent
    *    Item parent set in previous recursive iteration, if any.
    */
-  protected function processLibraries(array &$libraries, $base_path, $parent = '') {
+  protected function processLibraries(&$libraries, $base_path, $parent = '') {
     $parents = ['js', 'base', 'layout', 'component', 'state', 'theme'];
     $_libraries = $libraries;
     foreach ($_libraries as $name => $values) {
@@ -113,7 +113,7 @@ abstract class PatternBase extends PluginBase implements PatternInterface, Conta
         $libraries[$base_path . DIRECTORY_SEPARATOR . $name] = $values;
         unset($libraries[$name]);
       }
-      elseif (!$is_asset) {
+      elseif (!$is_asset && ($parent != 'dependencies')) {
         $this->processLibraries($libraries[$name], $base_path, $name);
       }
     }
diff --git a/tests/features/overview.feature b/tests/features/overview.feature
index ca592b085235f118405530a27a428091fac58373..2c67b13782c7523dc05cfe2365e7b20014e4e0a1 100644
--- a/tests/features/overview.feature
+++ b/tests/features/overview.feature
@@ -69,6 +69,7 @@ Feature: Overview
     And the response should contain "/ui_patterns_test_theme/templates/patterns/media/css/media2.css"
     And the response should contain "/ui_patterns_test_theme/templates/patterns/media/js/media1.js"
     And the response should contain "/ui_patterns_test_theme/templates/patterns/media/js/media2.js"
+    And the response should contain "/misc/tabledrag.js"
 
   Scenario: Patterns overview page will show validation errors after clearing the cache.
     Given I am logged in as a user with the "access patterns page" permission