diff --git a/project_dependency.drupal.inc b/project_dependency.drupal.inc
index 85a4f21..effc417 100644
--- a/project_dependency.drupal.inc
+++ b/project_dependency.drupal.inc
@@ -384,6 +384,15 @@ function project_dependency_info_batch_process_release(array $release) {
   // Note that DRUPAL_PHP_FUNCTION_PATTERN croaks in file_scan_directory()
   // "WD php: Warning: ereg(): REG_ERANGE in file_scan_directory()"
   // $function_pattern = DRUPAL_PHP_FUNCTION_PATTERN;
+  $files = file_scan_directory(
+    PROJECT_DEPENDENCY_SOURCECODE_DIRECTORY . '/' . $directory,
+    "/^composer.json\$/"
+  );
+  $composer_files = array();
+  foreach ($files as $file) {
+    $composer_files[] = $file->uri;
+  }
+
   $function_pattern = '[a-zA-Z][a-zA-Z0-9_]*';
   $version = project_dependency_core_api_from_term($tag);
   $info_file_pattern = $version >7 ? '.info.yml' : '.info';
@@ -436,6 +445,18 @@ function project_dependency_info_batch_process_release(array $release) {
     }
   }
 
+  foreach ($composer_files as $composer_file) {
+    $contents = file_get_contents($composer_file);
+    $composer = drupal_json_decode($contents);
+    if (preg_match('/^drupal-/', $composer['type'])) {
+      $name = explode('/', $composer['name']);
+      $project = $name[1];
+      if (isset($info[$project])) {
+        $info[$project]['composer'] = serialize($contents);
+      }
+    }
+  }
+
   $dependencies = array();
   foreach ($info as $module => $module_info) {
     $dependencies[$module] = $module_info['dependencies'];
diff --git a/project_dependency.install b/project_dependency.install
index f219756..e550c6c 100644
--- a/project_dependency.install
+++ b/project_dependency.install
@@ -55,6 +55,18 @@ function project_dependency_schema() {
         'type' => 'text',
         'size' => 'medium',
       ),
+      'package' => array(
+        'description' => 'The package for the component.',
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+      ),
+      'composer' => array(
+        'description' => 'The optional composer requirements.',
+        'type' => 'text',
+        'size' => 'medium',
+      ),
     ),
     'primary key' => array('component_id'),
     'indexes' => array(
@@ -129,3 +141,29 @@ function project_dependency_update_7000() {
     array('indexes' => array('component_dependency' => array('component_id', 'dependency')))
   );
 }
+
+/**
+ * Add package and composer fields in {project_dependency_component} table.
+ */
+function project_dependency_update_7100() {
+  $fields = array(
+    'package' => array(
+      'description' => 'The package for the component.',
+      'type' => 'varchar',
+      'length' => 255,
+      'not null' => TRUE,
+      'default' => '',
+    ),
+    'composer' => array(
+      'description' => 'The optional composer requirements.',
+      'type' => 'text',
+      'size' => 'medium',
+    ),
+  );
+
+  foreach ($fields as $key => $field)  {
+    if (!db_field_exists('project_dependency_component', $key)) {
+      db_add_field('project_dependency_component', $key, $field);
+    }
+  }
+}
diff --git a/project_dependency.module b/project_dependency.module
index 863f922..725c1fe 100644
--- a/project_dependency.module
+++ b/project_dependency.module
@@ -393,3 +393,100 @@ function project_dependency_get_external_release_dependencies($depending_release
   }
   return $release_dependencies;
 }
+
+/**
+ * Return the composer.json information for a module.
+ *
+ * @param int $release
+ *   Release node ID.
+ *
+ * @return array
+ *   Array with module names as keys and composer.json as value.
+ */
+function project_dependency_get_composer_json($release) {
+  $components = db_select('project_dependency_component', 'components')
+    ->condition('components.release_nid', $release)
+    ->fields('components', array('name', 'composer'))
+    ->execute();
+  $results = array();
+  foreach ($components as $component) {
+    $results[$component->name] = unserialize($component->composer);
+  }
+  return $results;
+}
+
+/**
+ * Return the dependencies from the composer.json for a module.
+ *
+ * @param int $release
+ *   Release node ID.
+ * @param bool $optional
+ *   Include the optional (test) dependencies.
+ *
+ * @return array
+ *   Array with module names as keys and dependencies as values.
+ */
+function project_dependency_get_composer_dependencies($release, $optional = FALSE) {
+  module_load_include('inc', 'project_dependency', 'project_dependency.drupal');
+  $components = db_select('project_dependency_component', 'components')
+    ->condition('components.release_nid', $release)
+    ->fields('components', array('component_id', 'name', 'composer'))
+    ->execute();
+  $dependencies = array();
+  foreach ($components as $component) {
+    $composer = drupal_json_decode(unserialize($component->composer));
+    if (isset($composer['require'])) {
+      $dependencies[$component->name]['require'] = $composer['require'];
+    }
+    else {
+      // Retrieve from info file.
+      $items = db_select('project_dependency_dependency', 'dependencies')
+        ->condition('dependencies.component_id', $component->component_id)
+        ->condition('dependencies.dependency_type', 0)
+        ->fields('dependencies', array('dependency'))
+        ->execute();
+      $dependencies[$component->name]['require'] = array();
+      foreach ($items as $item) {
+        $parsed = project_dependency_parse_dependency($item->dependency);
+        $require = 'drupal/' . $parsed['name'];
+        if (isset($parsed['original_version'])) {
+          $matches = array();
+          preg_match('/\((.*)\)/', $parsed['original_version'], $matches);
+          $version = ' ' . $matches[1];
+        }
+        else {
+          $version = '*';
+        }
+        $dependencies[$component->name]['require'][$require] = $version;
+      }
+    }
+    if ($optional) {
+      if (isset($composer['require-dev'])) {
+        $dependencies[$component->name]['require-dev'] = $composer['require-dev'];
+      }
+      else {
+        // Retrieve from info file.
+        $items = db_select('project_dependency_dependency', 'dependencies')
+          ->condition('dependencies.component_id', $component->component_id)
+          ->condition('dependencies.dependency_type', 1)
+          ->fields('dependencies', array('dependency'))
+          ->execute();
+        $dependencies[$component->name]['require-dev'] = array();
+        foreach ($items as $item) {
+          $parsed = project_dependency_parse_dependency($item->dependency);
+          $require = 'drupal/' . $parsed['name'];
+          if (isset($parsed['original_version'])) {
+            $matches = array();
+            preg_match('/\((.*)\)/', $parsed['original_version'], $matches);
+            $version = ' ' . $matches[1];
+          }
+          else {
+            $version = '*';
+          }
+          $dependencies[$component->name]['require-dev'][$require] = $version;
+        }
+      }
+    }
+  }
+  return $dependencies;
+}
diff --git a/project_dependency.package.inc b/project_dependency.package.inc
index 0e83a9e..b6f97dc 100644
--- a/project_dependency.package.inc
+++ b/project_dependency.package.inc
@@ -46,6 +46,7 @@ function project_dependency_info_package_clear($release_nid) {
 function project_dependency_info_package_list_store($release_nid, array $info) {
   $records = array();
   foreach ($info as $component => $component_info) {
+    $composer = (isset($component_info['composer'])) ? $component_info['composer'] : '';
     // These will always be insertions, because we've already deleted the old
     // ones.
     $project_dependency_component_info = array(
@@ -53,6 +54,8 @@ function project_dependency_info_package_list_store($release_nid, array $info) {
       'name' => $component_info['name'],
       'title' => $component_info['title'],
       'description' => $component_info['description'],
+      'package' => $component_info['package'],
+      'composer' => $composer,
     );
     $result = drupal_write_record('project_dependency_component', $project_dependency_component_info);
     $records[$component] = $project_dependency_component_info;
