diff --git a/.travis.yml b/.travis.yml
index 87adf20..ea1a353 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,14 +1,18 @@
 language: dart
-sudo: false
+
 dart:
+  - 2.0.0
   - dev
-  - stable
-  - 1.22.1
 
 dart_task:
   - test
-  - dartfmt
-  - dartanalyzer
+  - dartanalyzer: --fatal-infos --fatal-warnings .
+
+matrix:
+  include:
+    # Only validate formatting using the dev release
+    - dart: dev
+      dart_task: dartfmt
 
 # Only building master means that we don't run two builds for each pull request.
 branches:
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 2b0a49b..b26ea47 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -1,35 +1,99 @@
+include: package:pedantic/analysis_options.yaml
+analyzer:
+  strong-mode:
+    implicit-casts: false
+  errors:
+    dead_code: error
+    override_on_non_overriding_method: error
+    unused_element: error
+    unused_import: error
+    unused_local_variable: error
 linter:
   rules:
+    - always_declare_return_types
+    - annotate_overrides
+    - avoid_bool_literals_in_conditional_expressions
+    - avoid_classes_with_only_static_members
     - avoid_empty_else
+    - avoid_function_literals_in_foreach_calls
     - avoid_init_to_null
     - avoid_null_checks_in_equality_operators
+    - avoid_relative_lib_imports
+    - avoid_renaming_method_parameters
+    - avoid_return_types_on_setters
+    - avoid_returning_null
+    - avoid_returning_null_for_future
+    - avoid_returning_null_for_void
+    - avoid_returning_this
+    - avoid_shadowing_type_parameters
+    - avoid_single_cascade_in_expression_statements
+    - avoid_types_as_parameter_names
+    - avoid_unused_constructor_parameters
     - await_only_futures
     - camel_case_types
     - cancel_subscriptions
+    - cascade_invocations
+    - comment_references
     - constant_identifier_names
     - control_flow_in_finally
     - directives_ordering
     - empty_catches
     - empty_constructor_bodies
     - empty_statements
+    - file_names
     - hash_and_equals
     - implementation_imports
+    - invariant_booleans
     - iterable_contains_unrelated_type
+    - join_return_with_assignment
     - library_names
     - library_prefixes
     - list_remove_unrelated_type
+    - literal_only_boolean_expressions
+    - no_adjacent_strings_in_list
+    - no_duplicate_case_values
     - non_constant_identifier_names
+    - null_closures
+    - omit_local_variable_types
+    - only_throw_errors
     - overridden_fields
     - package_api_docs
     - package_names
     - package_prefixed_library_names
+    - prefer_adjacent_string_concatenation
+    - prefer_collection_literals
+    - prefer_conditional_assignment
+    - prefer_const_constructors
+    - prefer_contains
+    - prefer_equal_for_default_values
     - prefer_final_fields
+    #- prefer_final_locals
+    - prefer_generic_function_type_aliases
+    - prefer_initializing_formals
+    - prefer_interpolation_to_compose_strings
+    - prefer_is_empty
     - prefer_is_not_empty
+    - prefer_null_aware_operators
+    #- prefer_single_quotes
+    - prefer_typing_uninitialized_variables
+    - recursive_getters
     - slash_for_doc_comments
-    - super_goes_last
     - test_types_in_equals
     - throw_in_finally
     - type_init_formals
+    - unawaited_futures
+    - unnecessary_await_in_return
     - unnecessary_brace_in_string_interps
+    - unnecessary_const
+    - unnecessary_getters_setters
+    - unnecessary_lambdas
+    - unnecessary_new
+    - unnecessary_null_aware_assignments
+    - unnecessary_parenthesis
+    - unnecessary_statements
+    - unnecessary_this
     - unrelated_type_equality_checks
+    - use_function_type_syntax_for_parameters
+    - use_rethrow_when_possible
     - valid_regexps
+    - void_checks
diff --git a/lib/shelf_packages_handler.dart b/lib/shelf_packages_handler.dart
index eda6203..f3b5d68 100644
--- a/lib/shelf_packages_handler.dart
+++ b/lib/shelf_packages_handler.dart
@@ -22,12 +22,12 @@
 /// This can only serve assets from `file:` URIs.
 Handler packagesHandler({PackageResolver resolver}) {
   resolver ??= PackageResolver.current;
-  return new AsyncHandler(resolver.packageRoot.then((packageRoot) {
+  return AsyncHandler(resolver.packageRoot.then((packageRoot) {
     if (packageRoot != null) {
       return createStaticHandler(p.fromUri(packageRoot),
           serveFilesOutsidePath: true);
     } else {
-      return new PackageConfigHandler(resolver);
+      return PackageConfigHandler(resolver);
     }
   }));
 }
@@ -41,4 +41,4 @@
 /// This is useful for ensuring that `package:` imports work for all entrypoints
 /// in Dartium.
 Handler packagesDirHandler({PackageResolver resolver}) =>
-    new DirHandler("packages", packagesHandler(resolver: resolver));
+    DirHandler("packages", packagesHandler(resolver: resolver));
diff --git a/lib/src/async_handler.dart b/lib/src/async_handler.dart
index 3445aca..c221aea 100644
--- a/lib/src/async_handler.dart
+++ b/lib/src/async_handler.dart
@@ -10,15 +10,16 @@
 class AsyncHandler {
   final ResultFuture<Handler> _future;
 
-  AsyncHandler(Future<Handler> future) : _future = new ResultFuture(future);
+  AsyncHandler(Future<Handler> future) : _future = ResultFuture(future);
 
   FutureOr<Response> call(Request request) {
     if (_future.result == null) {
       return _future.then((handler) => handler(request));
     }
 
-    if (_future.result.isError)
-      return new Future.error(_future.result.asError.error);
+    if (_future.result.isError) {
+      return Future.error(_future.result.asError.error);
+    }
 
     return _future.result.asValue.value(request);
   }
diff --git a/lib/src/dir_handler.dart b/lib/src/dir_handler.dart
index 47f86af..bd8bb8c 100644
--- a/lib/src/dir_handler.dart
+++ b/lib/src/dir_handler.dart
@@ -9,10 +9,12 @@
 import 'package:path/path.dart' as p;
 import 'package:shelf/shelf.dart';
 
+import 'package_config_handler.dart';
+
 /// A utility handler that mounts a sub-handler beneath a directory name,
 /// wherever that directory name appears in a URL.
 ///
-/// In practice, this is used to mount a [PackagesHandler] underneath
+/// In practice, this is used to mount a [PackageConfigHandler] underneath
 /// `packages/` directories.
 class DirHandler {
   /// The directory name to look for.
@@ -31,6 +33,6 @@
       return _inner(request.change(path: p.url.joinAll(segments.take(i + 1))));
     }
 
-    return new Response.notFound("Not found.");
+    return Response.notFound("Not found.");
   }
 }
diff --git a/lib/src/package_config_handler.dart b/lib/src/package_config_handler.dart
index 7994d48..7d192a0 100644
--- a/lib/src/package_config_handler.dart
+++ b/lib/src/package_config_handler.dart
@@ -16,10 +16,10 @@
 class PackageConfigHandler {
   /// The static handlers for serving entries in the package config, indexed by
   /// name.
-  final _packageHandlers = new Map<String, Handler>();
+  final _packageHandlers = <String, Handler>{};
 
   /// The information specifying how to do package resolution.
-  PackageResolver _resolver;
+  final PackageResolver _resolver;
 
   PackageConfigHandler(this._resolver);
 
@@ -29,12 +29,12 @@
     return _handlerFor(segments.first)(request.change(path: segments.first));
   }
 
-  /// Creates a handler for [package] based on the package map in [resolver].
+  /// Creates a handler for [package] based on the package map in [_resolver].
   Handler _handlerFor(String package) {
     return _packageHandlers.putIfAbsent(package, () {
-      return new AsyncHandler(_resolver.urlFor(package).then((url) {
+      return AsyncHandler(_resolver.urlFor(package).then((url) {
         var handler = url == null
-            ? (_) => new Response.notFound("Package $package not found.")
+            ? (_) => Response.notFound("Package $package not found.")
             : createStaticHandler(p.fromUri(url), serveFilesOutsidePath: true);
 
         return handler;
diff --git a/pubspec.yaml b/pubspec.yaml
index 7eae724..35e86e1 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,12 +1,12 @@
 name: shelf_packages_handler
-version: 1.0.4
+version: 1.0.5-dev
 
 description: A shelf handler for serving a `packages/` directory.
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/shelf_packages_handler
 
 environment:
-  sdk: '>=1.22.0 <3.0.0'
+  sdk: '>=2.0.0 <3.0.0'
 
 dependencies:
   async: '>=1.1.0 <3.0.0'
@@ -16,4 +16,4 @@
   package_resolver: ^1.0.0
 
 dev_dependencies:
-  test: '>=0.12.0 <2.0.0'
+  test: '>=1.0.0 <2.0.0'
diff --git a/test/packages_handler_test.dart b/test/packages_handler_test.dart
index 1ca031f..75043eb 100644
--- a/test/packages_handler_test.dart
+++ b/test/packages_handler_test.dart
@@ -11,24 +11,24 @@
 import 'package:test/test.dart';
 
 void main() {
-  var dir;
+  String dir;
   setUp(() {
     dir =
         Directory.systemTemp.createTempSync("shelf_packages_handler_test").path;
-    new Directory(dir).createSync();
-    new Directory("$dir/foo").createSync();
-    new File("$dir/foo/foo.dart")
+    Directory(dir).createSync();
+    Directory("$dir/foo").createSync();
+    File("$dir/foo/foo.dart")
         .writeAsStringSync("void main() => print('in foo');");
   });
 
   tearDown(() {
-    new Directory(dir).deleteSync(recursive: true);
+    Directory(dir).deleteSync(recursive: true);
   });
 
   group("packagesHandler", () {
     test("defaults to the current method of package resolution", () async {
       var handler = packagesHandler();
-      var request = new Request(
+      var request = Request(
           "GET",
           Uri.parse("http://example.com/shelf_packages_handler/"
               "shelf_packages_handler.dart"));
@@ -39,13 +39,13 @@
     });
 
     group("with a package root", () {
-      var resolver;
-      setUp(() => resolver = new PackageResolver.root(p.toUri(dir)));
+      PackageResolver resolver;
+      setUp(() => resolver = PackageResolver.root(p.toUri(dir)));
 
       test("looks up a real file", () async {
         var handler = packagesHandler(resolver: resolver);
         var request =
-            new Request("GET", Uri.parse("http://example.com/foo/foo.dart"));
+            Request("GET", Uri.parse("http://example.com/foo/foo.dart"));
         var response = await handler(request);
         expect(response.statusCode, equals(200));
         expect(await response.readAsString(), contains("in foo"));
@@ -54,22 +54,22 @@
       test("404s for a nonexistent file", () async {
         var handler = packagesHandler(resolver: resolver);
         var request =
-            new Request("GET", Uri.parse("http://example.com/foo/bar.dart"));
+            Request("GET", Uri.parse("http://example.com/foo/bar.dart"));
         var response = await handler(request);
         expect(response.statusCode, equals(404));
       });
     });
 
     group("with a package config", () {
-      var resolver;
+      PackageResolver resolver;
       setUp(() {
-        resolver = new PackageResolver.config({"foo": p.toUri("$dir/foo")});
+        resolver = PackageResolver.config({"foo": p.toUri("$dir/foo")});
       });
 
       test("looks up a real file", () async {
         var handler = packagesHandler(resolver: resolver);
         var request =
-            new Request("GET", Uri.parse("http://example.com/foo/foo.dart"));
+            Request("GET", Uri.parse("http://example.com/foo/foo.dart"));
         var response = await handler(request);
         expect(response.statusCode, equals(200));
         expect(await response.readAsString(), contains("in foo"));
@@ -78,7 +78,7 @@
       test("404s for a nonexistent package", () async {
         var handler = packagesHandler(resolver: resolver);
         var request =
-            new Request("GET", Uri.parse("http://example.com/bar/foo.dart"));
+            Request("GET", Uri.parse("http://example.com/bar/foo.dart"));
         var response = await handler(request);
         expect(response.statusCode, equals(404));
       });
@@ -86,7 +86,7 @@
       test("404s for a nonexistent file", () async {
         var handler = packagesHandler(resolver: resolver);
         var request =
-            new Request("GET", Uri.parse("http://example.com/foo/bar.dart"));
+            Request("GET", Uri.parse("http://example.com/foo/bar.dart"));
         var response = await handler(request);
         expect(response.statusCode, equals(404));
       });
@@ -96,7 +96,7 @@
   group("packagesDirHandler", () {
     test("supports a directory at the root of the URL", () async {
       var handler = packagesDirHandler();
-      var request = new Request(
+      var request = Request(
           "GET",
           Uri.parse("http://example.com/packages/shelf_packages_handler/"
               "shelf_packages_handler.dart"));
@@ -108,7 +108,7 @@
 
     test("supports a directory deep in the URL", () async {
       var handler = packagesDirHandler();
-      var request = new Request(
+      var request = Request(
           "GET",
           Uri.parse("http://example.com/foo/bar/very/deep/packages/"
               "shelf_packages_handler/shelf_packages_handler.dart"));
@@ -120,7 +120,7 @@
 
     test("404s for a URL without a packages directory", () async {
       var handler = packagesDirHandler();
-      var request = new Request(
+      var request = Request(
           "GET",
           Uri.parse("http://example.com/shelf_packages_handler/"
               "shelf_packages_handler.dart"));
@@ -130,7 +130,7 @@
 
     test("404s for a non-existent file within a packages directory", () async {
       var handler = packagesDirHandler();
-      var request = new Request(
+      var request = Request(
           "GET",
           Uri.parse("http://example.com/packages/shelf_packages_handler/"
               "non_existent.dart"));
