diff --git a/CHANGELOG.md b/CHANGELOG.md
index 86ffc1b..41bf243 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 0.20.0
+* include and exclude are now available in dartdoc_options.yaml as supported options
+  (#1700, #1674)
+* Support a new `{@animation}` directive in documentation comments to display
+  videos in a simple player.
+* Fix Dart 2.0 support (#1668) and expand test coverage to include --help.
+
 ## 0.19.1
 * Update `package:markdown` to `2.0.0`, which includes many improvements –
   especially to the parsing of links.
diff --git a/README.md b/README.md
index a62be49..82e39b4 100644
--- a/README.md
+++ b/README.md
@@ -155,6 +155,18 @@
 library my_library;
 ```
 
+### Animations
+
+You can specify links to videos inline that will be handled with a simple HTML5 player:
+
+```dart
+/// This widget is a dancing Linux penguin.
+///
+/// {@animation name 100 200 http://host.com/path/to/video.mp4}
+```
+
+'name' is user defined, and the numbers are the width and height of the animation in pixels.
+
 ### Macros
 
 You can specify "macros", i.e. reusable pieces of documentation. For that, first specify a template
diff --git a/lib/dartdoc.dart b/lib/dartdoc.dart
index 1861e48..a337cb2 100644
--- a/lib/dartdoc.dart
+++ b/lib/dartdoc.dart
@@ -37,7 +37,7 @@
 
 const String name = 'dartdoc';
 // Update when pubspec version changes.
-const String dartdocVersion = '0.19.1';
+const String dartdocVersion = '0.20.0';
 
 /// Helper class to initialize the default generators since they require
 /// GeneratorContext.
diff --git a/lib/src/dartdoc_options.dart b/lib/src/dartdoc_options.dart
index b4caa0f..4edc9eb 100644
--- a/lib/src/dartdoc_options.dart
+++ b/lib/src/dartdoc_options.dart
@@ -357,6 +357,7 @@
       {String abbr,
       bool mustExist = false,
       String help = '',
+      bool hide = false,
       bool isDir = false,
       bool isFile = false,
       bool negatable,
@@ -487,7 +488,7 @@
       {String abbr,
       bool mustExist = false,
       String help = '',
-      bool hide,
+      bool hide = false,
       bool isDir = false,
       bool isFile = false,
       bool negatable,
@@ -522,7 +523,7 @@
       {String abbr,
       bool mustExist = false,
       String help: '',
-      bool hide,
+      bool hide = false,
       bool isDir = false,
       bool isFile = false,
       bool negatable,
diff --git a/pubspec.lock b/pubspec.lock
index b64a988..d2d89f0 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -7,7 +7,7 @@
       name: analyzer
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.32.0"
+    version: "0.32.1"
   args:
     dependency: "direct main"
     description:
@@ -84,7 +84,7 @@
       name: front_end
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.1.0"
+    version: "0.1.1"
   glob:
     dependency: transitive
     description:
@@ -147,7 +147,7 @@
       name: kernel
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.3.0"
+    version: "0.3.1"
   logging:
     dependency: "direct main"
     description:
@@ -394,4 +394,4 @@
     source: hosted
     version: "2.1.13"
 sdks:
-  dart: ">=2.0.0-dev.54.0 <=2.0.0-dev.58.0"
+  dart: "2.0.0-dev.59.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 5f698fe..b8f610c 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,16 +1,16 @@
 name: dartdoc
 # Also update the `version` field in lib/dartdoc.dart.
-version: 0.19.1
+version: 0.20.0
 author: Dart Team <misc@dartlang.org>
 description: A documentation generator for Dart.
 homepage: https://github.com/dart-lang/dartdoc
 environment:
-  sdk: '>=2.0.0-dev.54.0 <3.0.0'
+  sdk: '>=2.0.0-dev.59.0 <3.0.0'
 dependencies:
-  analyzer: 0.32.0
-  args: '>=0.13.0 <2.0.0'
+  analyzer: 0.32.1
+  args: '>=1.4.1 <2.0.0'
   collection: ^1.2.0
-  front_end: ^0.1.0
+  front_end: ^0.1.1
   html: '>=0.12.1 <0.14.0'
   # We don't use http_parser directly; this dep exists to ensure that we get at
   # least version 3.0.3 to work around an issue with 3.0.2.
diff --git a/test/dartdoc_test.dart b/test/dartdoc_test.dart
index c9a7aa9..691cfc1 100644
--- a/test/dartdoc_test.dart
+++ b/test/dartdoc_test.dart
@@ -92,7 +92,7 @@
           startsWith(
               '<a href="https://pub.dartlang.org/documentation/tuple/1.0.1/tuple/Tuple2-class.html">Tuple2</a>'));
       RegExp stringLink = new RegExp(
-          'https://api.dartlang.org/(dev|stable|be)/${Platform.version.split(' ').first}/dart-core/String-class.html">String</a>');
+          'https://api.dartlang.org/(dev|stable|edge|be)/${Platform.version.split(' ').first}/dart-core/String-class.html">String</a>');
       expect(useSomethingInAnotherPackage.modelType.linkedName,
           contains(stringLink));
     });
diff --git a/testing/test_package_docs/index.html b/testing/test_package_docs/index.html
index 3dea99d..214ec7b 100644
--- a/testing/test_package_docs/index.html
+++ b/testing/test_package_docs/index.html
@@ -4,7 +4,7 @@
   <meta charset="utf-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1">
-  <meta name="generator" content="made with love by dartdoc 0.19.1">
+  <meta name="generator" content="made with love by dartdoc 0.20.0">
   <meta name="description" content="test_package API docs, for the Dart programming language.">
   <title>test_package - Dart API docs</title>
 
diff --git a/tool/grind.dart b/tool/grind.dart
index e700b4a..2b943f2 100644
--- a/tool/grind.dart
+++ b/tool/grind.dart
@@ -722,6 +722,12 @@
   await testFutures.wait();
 }
 
+List<File> get binFiles => new Directory('bin')
+    .listSync(recursive: true)
+    .where((e) => e is File && e.path.endsWith('.dart'))
+    .cast<File>()
+      ..toList();
+
 List<File> get testFiles => new Directory('test')
     .listSync(recursive: true)
     .where((e) => e is File && e.path.endsWith('test.dart'))
@@ -731,31 +737,49 @@
 testPreviewDart2() async {
   List<String> parameters = ['--preview-dart-2', '--enable-asserts'];
 
-  // sdk#32901 is really bad on Windows.
-  for (File dartFile in testFiles.where((f) =>
-      !f.path.endsWith('html_generator_test.dart') && !Platform.isWindows)) {
-    // absolute path to work around dart-lang/sdk#32901
+  for (File dartFile in testFiles) {
+    await testFutures.addFuture(
+        new SubprocessLauncher('dart2-${pathLib.basename(dartFile.path)}')
+            .runStreamed(
+                Platform.resolvedExecutable,
+                <String>[]
+                  ..addAll(parameters)
+                  ..add(dartFile.path)));
+  }
+
+  for (File dartFile in binFiles) {
     await testFutures.addFuture(new SubprocessLauncher(
-            'dart2-${pathLib.basename(dartFile.absolute.path)}')
+            'dart2-bin-${pathLib.basename(dartFile.path)}-help')
         .runStreamed(
             Platform.resolvedExecutable,
             <String>[]
               ..addAll(parameters)
-              ..add(dartFile.absolute.path)));
+              ..add(dartFile.path)
+              ..add('--help')));
   }
 }
 
 testDart1() async {
   List<String> parameters = ['--checked'];
   for (File dartFile in testFiles) {
-    // absolute path to work around dart-lang/sdk#32901
+    await testFutures.addFuture(
+        new SubprocessLauncher('dart1-${pathLib.basename(dartFile.path)}')
+            .runStreamed(
+                Platform.resolvedExecutable,
+                <String>[]
+                  ..addAll(parameters)
+                  ..add(dartFile.path)));
+  }
+
+  for (File dartFile in binFiles) {
     await testFutures.addFuture(new SubprocessLauncher(
-            'dart1-${pathLib.basename(dartFile.absolute.path)}')
+            'dart1-bin-${pathLib.basename(dartFile.path)}-help')
         .runStreamed(
             Platform.resolvedExecutable,
             <String>[]
               ..addAll(parameters)
-              ..add(dartFile.absolute.path)));
+              ..add(dartFile.path)
+              ..add('--help')));
   }
 }
 
