diff --git a/src/bin/installer.rs b/src/bin/installer.rs
index 129fe476baf0b5c8ce08678f76a281d6a1c280a4..64fa50782b6087276122a006db7e18451fdb89dd 100644
--- a/src/bin/installer.rs
+++ b/src/bin/installer.rs
@@ -15,6 +15,7 @@ fn main() {
 
     let mut configs = vec![];
     let mut cookbook = None;
+    let mut list_packages = false;
     for arg in env::args().skip(1) {
         if arg.starts_with("--cookbook=") {
             let path = arg.splitn(2, "--cookbook=").nth(1).unwrap().to_string();
@@ -27,6 +28,11 @@ fn main() {
             continue;
         }
 
+        if arg == "--list-packages" {
+            list_packages = true;
+            continue;
+        }
+
         match File::open(&arg) {
             Ok(mut config_file) => {
                 let mut config_data = String::new();
@@ -72,7 +78,11 @@ fn main() {
     }
 
     for config in configs {
-        if let Err(err) = redox_installer::install(config, cookbook.as_ref().map(String::as_ref)) {
+        if list_packages {
+            for (packagename, _package) in &config.packages {
+                println!("{}", packagename);
+            }
+        } else if let Err(err) = redox_installer::install(config, cookbook.as_ref().map(String::as_ref)) {
             writeln!(stderr, "installer: failed to install: {}", err).unwrap();
             process::exit(1);
         }