diff --git a/apps.drush.inc b/apps.drush.inc
index 36281fb..afeea8b 100644
--- a/apps.drush.inc
+++ b/apps.drush.inc
@@ -37,6 +37,15 @@ function apps_drush_command() {
     'drupal dependencies' => array('apps'),
     'aliases' => array('ai'),
   );
+  $items['apps-manifest'] = array(
+    'description' => "Make manifest file for App.",
+    'arguments' => array(
+      'app' => 'An app to create manaifist file for',
+    ),
+    'drupal dependencies' => array('apps'),
+    'aliases' => array('am'),
+  );
+
   return $items;
 }
 
@@ -51,6 +60,8 @@ function apps_drush_help($section) {
       return dt("List all the available apps for your site.");
     case 'drush:apps-install':
       return dt("Install an App to your site.");
+    case 'drush:apps-manifest':
+      return dt("Create a manifest file.");
   }
 }
 
@@ -169,3 +180,150 @@ function drush_apps_install() {
   }
 }
 
+
+/**
+ * Install an app, or list.
+ */
+function drush_apps_manifest() {
+  $apps = func_get_args();
+
+  foreach ($apps as $app) {
+    if (module_exists($app)) {
+      $modules_data = system_rebuild_module_data();
+      $module_data = $modules_data[$app];
+      $manifest =  _apps_get_manifest($app);
+      if (!$manifest) {
+        $manifest = array();
+      }
+      $manifest['name'] = $module_data->info['name'];
+      $manifest['description'] = $module_data->info['description'];
+      $manifest['machine_name'] = $app;
+      $manifest['version'] = !empty($module_data->info['version']) ? $module_data->info['version'] : '1.x-' . time();
+      $manifest['downloadable'] = $app . ' ' . $manifest['version'];
+      $depedenencies = !empty($module_data->info['dependencies']) ? $module_data->info['dependencies'] : array();
+      if (!empty($depedenencies)) {
+
+        // Remove included with install profile.
+        $profile_info = drupal_parse_info_file("profiles/" . drupal_get_profile() . "/" . drupal_get_profile() . ".info");
+        if ($profile_info && !empty($profile_info['dependencies'])) {
+          $depedenencies = array_diff($depedenencies, $profile_info['dependencies']);
+          foreach ($profile_info['dependencies'] as $dependency) {
+            if ($app != $dependency && !empty($modules_data[$dependency]) && empty($modules_data[$dependency]->requires[$app])) {
+              $depedenencies = array_diff($depedenencies, array_keys($modules_data[$dependency]->requires));
+              if (!$depedenencies) {
+                break;
+              }
+            }
+          }
+        }
+        $manifest['dependencies'] = array();
+        foreach ($depedenencies as $dependency) {
+          $current_download_depedency_url = FALSE;
+          $dinfo = $modules_data[$dependency]->info;
+
+          // Remove the current entry in downloadables for this.
+          if (!empty($manifest['downloadables'])) {
+            foreach ($manifest['downloadables'] as $current_download_depedency => $info) {
+              if (strpos($current_download_depedency, $dependency . ' ') !== FALSE) {
+                $current_download_depedency_url = $manifest['downloadables'][$current_download_depedency];
+                unset($manifest['downloadables'][$current_download_depedency]);
+              }
+            }
+          }
+
+          // If this depedency has a manifest, fetch version and URL from it.
+          if ($depedency_manifest = _apps_get_manifest($dependency)) {
+            $manifest['dependencies'][$dependency] = $dependency . ' ' . $depedency_manifest['version'];
+            if (!empty($depedency_manifest['downloadables'])) {
+              foreach ($depedency_manifest['downloadables'] as $dmd => $dmd_url) {
+                if (strpos($dmd, $dependency . ' ') !== FALSE) {
+                  $manifest['downloadables'][$manifest['dependencies'][$dependency]] = $dmd_url;
+                  break;
+                }
+              }
+            }
+          }
+          elseif (!empty($dinfo['version']) && (!isset($dinfo['project']) || $dependency == $dinfo['project'])) {
+            // Probably a -dev version drush has autogenerated a version for.
+            if (strpos($dinfo['version'], '-dev')) {
+              $dinfo['version'] = substr($dinfo['version'], 0, 6) . 'x-dev';
+            }
+
+            $manifest['dependencies'][$dependency] = $dependency . ' ' . $dinfo['version'];
+            // Remove current downloadable.
+
+            $manifest['downloadables'][$manifest['dependencies'][$dependency]] = 'http://ftp.drupal.org/files/projects/' . $dependency . '-' . $dinfo['version'] . '.tar.gz';
+          }
+          // Restore previous downloadables information if could not determine above.
+          elseif ($current_download_depedency_url) {
+            $manifest['downloadables'][$current_download_depedency] = $current_download_depedency_url;
+          }
+        }
+      }
+
+      // Scan and add any images.
+      $images = file_scan_directory(drupal_get_path('module', $app) . '/app/', '/\.png$|\.jpg/', array('recursive' => FALSE, 'key' => 'filename'));
+      $manifest['screenshots'] = array();
+      foreach ($images as $image => $image_info) {
+        if (strpos($image, 'logo') !==  FALSE) {
+          $manifest['logo'] = $image;
+        }
+        else {
+         $manifest['screenshots'][] = $image;
+        }
+      }
+
+      if (!is_dir(drupal_get_path('module', $app) . '/app/')) {
+        drupal_mkdir(drupal_get_path('module', $app) . '/app/');
+      }
+
+      $text = apps_export_info($manifest);
+      if (!file_put_contents(drupal_get_path('module', $app) . '/app/manifest.app', $text)) {
+        drush_log(dt('Unable to create app @app file.', array('@app' => $app)), 'error');
+      }
+      else {
+        drush_print(dt("Created app manifest for @app:\n@text", array('@app' => $app, '@text' => $text)));
+      }
+
+    }
+    else {
+      drush_log(dt('Unable to find app @app', array('@app' => $app)), 'error');
+    }
+  }
+}
+
+function _apps_get_manifest($module) {
+  return drupal_parse_info_file(drupal_get_path('module', $module) . '/app/manifest.app');
+}
+
+
+/**
+ * Copied from features_export_info().
+ *
+ * @param $info
+ *   An array or single value to put in a module's .info file.
+ * @param $parents
+ *   Array of parent keys (internal use only).
+ *
+ * @return
+ *   A code string ready to be written to a module's .info file.
+ */
+function apps_export_info($info, $parents = array()) {
+  $output = '';
+  if (is_array($info)) {
+    foreach ($info as $k => $v) {
+      $child = $parents;
+      $child[] = $k;
+      $output .= apps_export_info($v, $child);
+    }
+  }
+  else if (!empty($info) && count($parents)) {
+    $line = array_shift($parents);
+    foreach ($parents as $key) {
+      $line .= is_numeric($key) ? "[]" : "[{$key}]";
+    }
+    $line .=  " = {$info}\n";
+    return $line;
+  }
+  return $output;
+}
\ No newline at end of file
