diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6def8f3..a821d69 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.5.11
+
+* Added `--summary` option to `dart2js_info_diff` tool.
+
 ## 0.5.10
 
 * Set max SDK version to `<3.0.0`, and adjust other dependencies.
diff --git a/README.md b/README.md
index 796a4bc..cc9df90 100644
--- a/README.md
+++ b/README.md
@@ -134,7 +134,7 @@
 
 ```console
 $ pub global activate dart2js_info # only needed once
-$ dart2js_info_diff old.js.info.json new.js.info.json
+$ dart2js_info_diff old.js.info.json new.js.info.json [--summary]
 ```
 
 The tool gives a breakdown of the difference between the two info files.
diff --git a/bin/diff.dart b/bin/diff.dart
index eb73e4a..2bac65e 100644
--- a/bin/diff.dart
+++ b/bin/diff.dart
@@ -2,17 +2,28 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:dart2js_info/info.dart';
 import 'package:dart2js_info/src/diff.dart';
 import 'package:dart2js_info/src/util.dart';
 
 /// A command-line tool that computes the diff between two info files.
 main(List<String> args) async {
-  if (args.length != 2) {
-    print('usage: dart2js_info_diff old.info.json new.info.json');
+  if (args.length < 2 || args.length > 3) {
+    print('usage: dart2js_info_diff old.info.json new.info.json [--summary]');
     return;
   }
+
   var oldInfo = await infoFromFile(args[0]);
   var newInfo = await infoFromFile(args[1]);
+  var summary = false;
+  if (args.length == 3) {
+    if (args[2] == "--summary") {
+      summary = true;
+    } else {
+      print('Unrecognized argument: ${args[2]}');
+      return;
+    }
+  }
 
   var diffs = diff(oldInfo, newInfo);
 
@@ -45,6 +56,53 @@
     }
   }
 
+  if (summary) {
+    reportSummary(oldInfo, newInfo, adds, removals, sizeChanges, becameDeferred,
+        becameUndeferred);
+  } else {
+    reportFull(oldInfo, newInfo, adds, removals, sizeChanges, becameDeferred,
+        becameUndeferred);
+  }
+}
+
+void reportSummary(
+    AllInfo oldInfo,
+    AllInfo newInfo,
+    List<AddDiff> adds,
+    List<RemoveDiff> removals,
+    List<SizeDiff> sizeChanges,
+    List<DeferredStatusDiff> becameDeferred,
+    List<DeferredStatusDiff> becameUndeferred) {
+  var overallSizeDiff = newInfo.program.size - oldInfo.program.size;
+  print('total_size_difference $overallSizeDiff');
+
+  var noLongerDeferred = 0;
+  for (var diff in becameUndeferred) {
+    noLongerDeferred += diff.info.size;
+  }
+  print('no_longer_deferred $noLongerDeferred');
+
+  var totalAdded = 0;
+  for (var diff in adds) {
+    totalAdded += diff.info.size;
+  }
+  print('total_added $totalAdded');
+
+  var totalRemoved = 0;
+  for (var diff in removals) {
+    totalRemoved += diff.info.size;
+  }
+  print('total_removed $totalRemoved');
+}
+
+void reportFull(
+    AllInfo oldInfo,
+    AllInfo newInfo,
+    List<AddDiff> adds,
+    List<RemoveDiff> removals,
+    List<SizeDiff> sizeChanges,
+    List<DeferredStatusDiff> becameDeferred,
+    List<DeferredStatusDiff> becameUndeferred) {
   // TODO(het): Improve this output. Siggi has good suggestions in
   // https://github.com/dart-lang/dart2js_info/pull/19
   var overallSizeDiff = newInfo.program.size - oldInfo.program.size;
diff --git a/pubspec.yaml b/pubspec.yaml
index 8ab6f34..636e370 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: dart2js_info
-version: 0.5.10
+version: 0.5.11
 
 description: >
   Libraries and tools to process data produced when running dart2js with
