diff --git a/lib/dartdoc.dart b/lib/dartdoc.dart
index 822be91..8b49977 100644
--- a/lib/dartdoc.dart
+++ b/lib/dartdoc.dart
@@ -13,7 +13,6 @@
 import 'dart:io';
 
 import 'package:dartdoc/src/dartdoc_options.dart';
-import 'package:dartdoc/src/empty_generator.dart';
 import 'package:dartdoc/src/generator.dart';
 import 'package:dartdoc/src/html/html_generator.dart';
 import 'package:dartdoc/src/logging.dart';
@@ -69,9 +68,9 @@
     return new Dartdoc._(config, generators);
   }
 
-  /// An asynchronous factory method that builds an EmptyGenerator.
+  /// An asynchronous factory method that builds
   static Future<Dartdoc> withEmptyGenerator(DartdocOptionContext config) async {
-    List<Generator> generators = [await createEmptyGenerator(config)];
+    List<Generator> generators = await initEmptyGenerators(config);
     return new Dartdoc._(config, generators);
   }
 
diff --git a/lib/src/dartdoc_options.dart b/lib/src/dartdoc_options.dart
index 45cdf2d..23ed768 100644
--- a/lib/src/dartdoc_options.dart
+++ b/lib/src/dartdoc_options.dart
@@ -1422,8 +1422,6 @@
 
   bool isPackageExcluded(String name) =>
       excludePackages.any((pattern) => name == pattern);
-
-  String get format => optionSet['format'].valueAt(context);
 }
 
 /// Instantiate dartdoc's configuration file and options parser with the
@@ -1626,8 +1624,6 @@
             'exist. Executables for different platforms are specified by '
             'giving the platform name as a key, and a list of strings as the '
             'command.'),
-    // TODO(jdkoren): unhide when this feature is in working order.
-    new DartdocOptionArgOnly<String>('format', 'html', hide: true)
     // TODO(jcollins-g): refactor so there is a single static "create" for
     // each DartdocOptionContext that traverses the inheritance tree itself.
   ]
diff --git a/lib/src/empty_generator.dart b/lib/src/empty_generator.dart
index 12e8d34..476dd67 100644
--- a/lib/src/empty_generator.dart
+++ b/lib/src/empty_generator.dart
@@ -2,7 +2,6 @@
 
 import 'dart:async';
 
-import 'package:dartdoc/dartdoc.dart';
 import 'package:dartdoc/src/generator.dart';
 import 'package:dartdoc/src/model.dart';
 import 'package:dartdoc/src/model_utils.dart';
@@ -40,7 +39,3 @@
   @override
   Set<String> get writtenFiles => new Set();
 }
-
-Future<Generator> createEmptyGenerator(DartdocOptionContext config) async {
-  return EmptyGenerator();
-}
diff --git a/lib/src/generator.dart b/lib/src/generator.dart
index 217e95a..bd35988 100644
--- a/lib/src/generator.dart
+++ b/lib/src/generator.dart
@@ -7,10 +7,7 @@
 
 import 'dart:async' show Stream, Future;
 
-import 'package:dartdoc/dartdoc.dart';
-import 'package:dartdoc/src/empty_generator.dart';
 import 'package:dartdoc/src/model.dart' show PackageGraph;
-import 'package:dartdoc/src/html/html_generator.dart';
 
 /// An abstract class that defines a generator that generates documentation for
 /// a given package.
@@ -27,17 +24,3 @@
   /// Fetches all filenames written by this generator.
   Set<String> get writtenFiles;
 }
-
-/// Initialize and setup the generators.
-Future<List<Generator>> initGenerators(GeneratorContext config) async {
-  // TODO(jdkoren) this could support multiple generators.
-  var format = config.format;
-  switch (format) {
-    case 'html':
-      return [await createHtmlGenerator(config)];
-    case 'md':
-      return [await createEmptyGenerator(config)];
-    default:
-      throw DartdocFailure('Unsupported output format: ${format}');
-  }
-}
diff --git a/lib/src/html/html_generator.dart b/lib/src/html/html_generator.dart
index af2c8ee..89b6402 100644
--- a/lib/src/html/html_generator.dart
+++ b/lib/src/html/html_generator.dart
@@ -9,6 +9,7 @@
 import 'dart:isolate';
 
 import 'package:dartdoc/dartdoc.dart';
+import 'package:dartdoc/src/empty_generator.dart';
 import 'package:dartdoc/src/generator.dart';
 import 'package:dartdoc/src/html/html_generator_instance.dart';
 import 'package:dartdoc/src/html/template_data.dart';
@@ -131,8 +132,12 @@
       : this.toolVersion = toolVersion ?? 'unknown';
 }
 
+Future<List<Generator>> initEmptyGenerators(DartdocOptionContext config) async {
+  return [EmptyGenerator()];
+}
+
 /// Initialize and setup the generators.
-Future<HtmlGenerator> createHtmlGenerator(GeneratorContext config) async {
+Future<List<Generator>> initGenerators(GeneratorContext config) async {
   // TODO(jcollins-g): Rationalize based on GeneratorContext all the way down
   // through the generators.
   HtmlGeneratorOptions options = new HtmlGeneratorOptions(
@@ -142,12 +147,14 @@
       faviconPath: config.favicon,
       prettyIndexJson: config.prettyIndexJson);
 
-  return await HtmlGenerator.create(
-    options: options,
-    headers: config.header,
-    footers: config.footer,
-    footerTexts: config.footerTextPaths,
-  );
+  return [
+    await HtmlGenerator.create(
+      options: options,
+      headers: config.header,
+      footers: config.footer,
+      footerTexts: config.footerTextPaths,
+    )
+  ];
 }
 
 Uri _sdkFooterCopyrightUri;
diff --git a/test/dartdoc_test.dart b/test/dartdoc_test.dart
index 426de97..29779a0 100644
--- a/test/dartdoc_test.dart
+++ b/test/dartdoc_test.dart
@@ -364,14 +364,5 @@
           dart_bear.allClasses.map((cls) => cls.name).contains('Bear'), isTrue);
       expect(p.packageMap["Dart"].publicLibraries, hasLength(3));
     });
-
-    test('generate docs with unsupported format fails', () async {
-      try {
-        await buildDartdoc(['--format', 'bad'], testPackageOptions, tempDir);
-        fail('dartdoc should fail on unsupported format');
-      } catch (e) {
-        expect(e is DartdocFailure, isTrue);
-      }
-    });
   }, timeout: new Timeout.factor(8));
 }
