diff --git a/drush/config_sync.drush.inc b/drush/config_sync.drush.inc
new file mode 100644
index 0000000..b40cc5a
--- /dev/null
+++ b/drush/config_sync.drush.inc
@@ -0,0 +1,175 @@
+<?php
+
+/**
+ * @file
+ * Config_sync module drush integration.
+ */
+
+/**
+ * Implements hook_drush_command().
+ */
+function config_sync_drush_command() {
+  $items = array();
+
+  $items['config-sync-list-updates'] = array(
+    'description' => 'Display a list of all extensions with available configuration updates. If an extension name is provided as an argument, then all of the configuration updates for that extension will be listed.',
+    'examples' => array(
+      "drush config-sync-list-updates" => 'Display a list of all extensions with available configuration updates.',
+      "drush config-sync-list-updates 'example'" => "Display a list of all configuration updates available for the 'example' extension.",
+    ),
+    'arguments' => array(
+      'extension' => 'The extension to list. Optional; if specified, lists all configuration updates available for the extension. If no extension is specified, lists all of the extensions with available updates.',
+    ),
+    'options' => array(
+      'unsafe' => 'List updates considered to be unsafe. These are updates that could overwrite customizations on the site.',
+    ),
+    'outputformat' => array(
+      'default' => 'table',
+      'pipe-format' => 'list',
+      'field-labels' => array(
+        'type' => 'Type',
+        'machine_name' => 'Machine name',
+        'operation' => 'Operation',
+        'object' => 'Configuration object',
+      ),
+      'output-data-type' => 'format-table',
+    ),
+    'aliases' => array('cs-list'),
+  );
+
+  $items['config-sync-update'] = array(
+    'description' => 'Apply configuration updates. If a comma-separated list of extension names is passed as an argument, only those extensions will be updated.',
+    'examples' => array(
+      "drush config-sync-update" => 'Apply updates to all extensions.',
+      "drush config-sync-update 'example_one,example_two'" => "Update the example_one and example_two extensions.",
+      "drush config-sync-update --unsafe" => "Apply updates to all extensions, even to those considered as unsafe.",
+    ),
+    'arguments' => array(
+      'extensions' => 'Comma-separated list of names of the extensions to be updated.',
+    ),
+    'options' => array(
+      'unsafe' => 'Apply updates considered to be unsafe. These are updates that could overwrite customizations on the site.',
+    ),
+    'aliases' => array('cs-update'),
+  );
+
+  return $items;
+}
+
+/**
+ * Drush command callback for config-sync-list-updates.
+ *
+ * @param string $package_name
+ *   (optional) The package name.
+ *
+ * @return array|bool
+ */
+function drush_config_sync_list_updates($package_name = '') {
+  $safe_only = !drush_get_option('unsafe');
+  /** @var \Drupal\config_sync\ConfigSyncLister $manager */
+  $lister = \Drupal::service('config_sync.lister');
+  $packages = $lister->getFullChangelist($safe_only);
+
+  $result = array();
+
+  // If no package was specified, list all packages.
+  if (empty($package_name)) {
+    drush_hide_output_fields(array('object', 'operation'));
+    foreach ($packages as $type => $extensions) {
+
+      foreach ($extensions as $name => $configuration) {
+        $result[$name] = array(
+          'type' => $type,
+          'machine_name' => $name,
+        );
+      }
+    }
+    if (empty($result)) {
+      drush_log(dt('All configurations are synchronized.'), 'ok');
+    }
+    return $result;
+  }
+  // If a valid package was listed, list its configuration.
+  else {
+    drush_hide_output_fields(array('type', 'machine_name'));
+    foreach ($packages as $type => $extensions) {
+      if (isset($extensions[$package_name])) {
+        foreach ($extensions[$package_name] as $op => $configurations) {
+          foreach ($configurations as $configuration) {
+            $result[] = array(
+              'operation' => $op,
+              'object' => $configuration,
+            );
+          }
+
+        }
+        return $result;
+      }
+      else {
+        // If no matching package found, return an error.
+        drush_log(dt('Package "@package" not found.', array('@package' => $package_name)), 'warning');
+        return FALSE;
+      }
+    }
+
+    drush_log(dt('Extension "@package" not found or synchronized with active configuration.', array('@package' => $package_name)), 'ok');
+
+  }
+
+}
+
+/**
+ * Drush command callback for config-sync-update.
+ *
+ * @param string $package_name
+ *   (optional) The package name.
+ *
+ * @return array|bool
+ */
+function drush_config_sync_update($package_name = '') {
+  $safe_only = !drush_get_option('unsafe');
+  $skip_confirmation = drush_get_context('DRUSH_AFFIRMATIVE');
+  $manager = \Drupal::service('config_sync.manager');
+
+  if (empty($package_name)) {
+    $confirmation_message = 'Do you really want to revert all configurations?';
+    if ($skip_confirmation || drush_confirm(dt($confirmation_message))) {
+      $manager->updateAll($safe_only);
+      drush_log(dt('All configurations reverted.'), 'ok');
+    }
+    else {
+      drush_log(dt('Operation aborted.'), 'ok');
+    }
+  }
+
+  else {
+    $packages = explode(',', $package_name);
+    $lister = \Drupal::service('config_sync.lister');
+    $config_list = $lister->getFullChangelist($safe_only);
+    $count = 0;
+    foreach ($config_list as $type => $extensions) {
+      foreach ($extensions as $name => $changelist) {
+        if (in_array($name, $packages)) {
+          $dt_args['@name'] = $name;
+          $confirmation_message = 'Do you really want to revert @name?';
+          if ($skip_confirmation || drush_confirm(dt($confirmation_message, $dt_args))) {
+            $manager->updateExtension($type, $name, $changelist, $safe_only);
+            drush_log(dt('Configuration for @name reverted.', $dt_args), 'ok');
+            $count++;
+          }
+          else {
+            drush_log(dt('Operation aborted for @name.', $dt_args), 'ok');
+            return FALSE;
+          }
+
+        }
+      }
+    }
+
+    if ($count == 0) {
+      drush_log(dt('Extension not reverted, because not found or already synchronized.'), 'ok');
+    }
+
+  }
+
+}
