diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7789778..f156022 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+## 2.0.0
+
+### Breaking changes
+
+* Dropped the dependency on `package_resolver`.
+  * All `PackageResolver` apis now take a `Map<String, Uri>` of package name
+    to the base uri for resolving `package:` uris for that package.
+  * Named arguments have been renamed from `resolver` to `packageMap`.
+
 ## 1.0.4
 
 * Set max SDK version to `<3.0.0`, and adjust other dependencies.
diff --git a/lib/shelf_packages_handler.dart b/lib/shelf_packages_handler.dart
index 677db97..694dcb5 100644
--- a/lib/shelf_packages_handler.dart
+++ b/lib/shelf_packages_handler.dart
@@ -5,32 +5,22 @@
 library shelf_packages_handler;
 
 import 'package:shelf/shelf.dart';
-import 'package:shelf_static/shelf_static.dart';
-import 'package:package_resolver/package_resolver.dart';
-import 'package:path/path.dart' as p;
 
-import 'src/async_handler.dart';
 import 'src/dir_handler.dart';
 import 'src/package_config_handler.dart';
 
 /// A handler that serves the contents of a virtual packages directory.
 ///
 /// This effectively serves `package:${request.url}`. It locates packages using
-/// the package resolution logic defined by [resolver]. If [resolver] isn't
-/// passed, it defaults to the current isolate's package resolution logic.
+/// the mapping defined by [packageMap]. If [packageMap] isn't passed, it
+/// defaults to the current isolate's package resolution logic.
+///
+/// The [packageMap] maps package names to the base uri for resolving
+/// `package:` uris for that package.
 ///
 /// This can only serve assets from `file:` URIs.
-Handler packagesHandler({PackageResolver resolver}) {
-  resolver ??= PackageResolver.current;
-  return AsyncHandler(resolver.packageRoot.then((packageRoot) {
-    if (packageRoot != null) {
-      return createStaticHandler(p.fromUri(packageRoot),
-          serveFilesOutsidePath: true);
-    } else {
-      return PackageConfigHandler(resolver);
-    }
-  }));
-}
+Handler packagesHandler({Map<String, Uri> packageMap}) =>
+    PackageConfigHandler(packageMap: packageMap).handleRequest;
 
 /// A handler that serves virtual `packages/` directories wherever they're
 /// requested.
@@ -40,5 +30,5 @@
 ///
 /// This is useful for ensuring that `package:` imports work for all entrypoints
 /// in Dartium.
-Handler packagesDirHandler({PackageResolver resolver}) =>
-    DirHandler('packages', packagesHandler(resolver: resolver));
+Handler packagesDirHandler({Map<String, Uri> packageMap}) =>
+    DirHandler('packages', packagesHandler(packageMap: packageMap));
diff --git a/lib/src/async_handler.dart b/lib/src/async_handler.dart
deleted file mode 100644
index c221aea..0000000
--- a/lib/src/async_handler.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// 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 'dart:async';
-
-import 'package:async/async.dart';
-import 'package:shelf/shelf.dart';
-
-class AsyncHandler {
-  final ResultFuture<Handler> _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 Future.error(_future.result.asError.error);
-    }
-
-    return _future.result.asValue.value(request);
-  }
-}
diff --git a/lib/src/package_config_handler.dart b/lib/src/package_config_handler.dart
index 563e66c..d984021 100644
--- a/lib/src/package_config_handler.dart
+++ b/lib/src/package_config_handler.dart
@@ -3,42 +3,52 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:isolate';
 
-import 'package:package_resolver/package_resolver.dart';
 import 'package:path/path.dart' as p;
 import 'package:shelf/shelf.dart';
 import 'package:shelf_static/shelf_static.dart';
 
-import 'async_handler.dart';
-
 /// A shelf handler that serves a virtual packages directory based on a package
 /// config.
 class PackageConfigHandler {
   /// The static handlers for serving entries in the package config, indexed by
   /// name.
-  final _packageHandlers = <String, Handler>{};
+  final _packageHandlers = <String, Future<Handler>>{};
 
-  /// The information specifying how to do package resolution.
-  final PackageResolver _resolver;
+  /// Optional, a map of package names to base uri for resolving `package:`
+  /// uris for that package.
+  final Map<String, Uri> _packageMap;
 
-  PackageConfigHandler(this._resolver);
+  PackageConfigHandler({Map<String, Uri> packageMap})
+      : _packageMap = packageMap;
 
   /// The callback for handling a single request.
-  FutureOr<Response> call(Request request) {
+  Future<Response> handleRequest(Request request) async {
     var segments = request.url.pathSegments;
-    return _handlerFor(segments.first)(request.change(path: segments.first));
+    var handler = await _handlerFor(segments.first);
+    return handler(request.change(path: segments.first));
   }
 
-  /// Creates a handler for [package] based on the package map in [_resolver].
-  Handler _handlerFor(String package) {
-    return _packageHandlers.putIfAbsent(package, () {
-      return AsyncHandler(_resolver.urlFor(package).then((url) {
-        var handler = url == null
-            ? (_) => Response.notFound('Package $package not found.')
-            : createStaticHandler(p.fromUri(url), serveFilesOutsidePath: true);
+  /// Creates a handler for [packageName] based on the package map in
+  /// [_packageMap] or the current isolate resolver.
+  Future<Handler> _handlerFor(String packageName) {
+    return _packageHandlers.putIfAbsent(packageName, () async {
+      Uri packageUri;
+      if (_packageMap != null) {
+        packageUri = _packageMap[packageName];
+      } else {
+        var fakeResolvedUri = await Isolate.resolvePackageUri(
+            Uri(scheme: 'package', path: '$packageName/'));
+        packageUri = fakeResolvedUri;
+      }
 
-        return handler;
-      }));
+      var handler = packageUri == null
+          ? (_) => Response.notFound('Package $packageName not found.')
+          : createStaticHandler(p.fromUri(packageUri),
+              serveFilesOutsidePath: true);
+
+      return handler;
     });
   }
 }
diff --git a/pubspec.yaml b/pubspec.yaml
index 35e86e1..f03e57d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,19 +1,20 @@
 name: shelf_packages_handler
-version: 1.0.5-dev
+version: 2.0.0
 
 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: '>=2.0.0 <3.0.0'
 
 dependencies:
-  async: '>=1.1.0 <3.0.0'
   path: ^1.0.0
-  shelf: '>=0.6.0 <0.8.0'
+  shelf: ^0.7.0
   shelf_static: ^0.2.0
-  package_resolver: ^1.0.0
 
 dev_dependencies:
   test: '>=1.0.0 <2.0.0'
+
+dependency_overrides:
+  # Required to get a pub solve
+  test: '>=1.0.0 <2.0.0'
diff --git a/test/packages_handler_test.dart b/test/packages_handler_test.dart
index 85938b6..3b0dea4 100644
--- a/test/packages_handler_test.dart
+++ b/test/packages_handler_test.dart
@@ -4,8 +4,6 @@
 
 import 'dart:io';
 
-import 'package:package_resolver/package_resolver.dart';
-import 'package:path/path.dart' as p;
 import 'package:shelf/shelf.dart';
 import 'package:shelf_packages_handler/shelf_packages_handler.dart';
 import 'package:test/test.dart';
@@ -38,36 +36,16 @@
           await response.readAsString(), contains('Handler packagesHandler'));
     });
 
-    group('with a package root', () {
-      PackageResolver resolver;
-      setUp(() => resolver = PackageResolver.root(p.toUri(dir)));
+    group('with a package map', () {
+      Handler handler;
 
-      test('looks up a real file', () async {
-        var handler = packagesHandler(resolver: resolver);
-        var request =
-            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'));
-      });
-
-      test('404s for a nonexistent file', () async {
-        var handler = packagesHandler(resolver: resolver);
-        var request =
-            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', () {
-      PackageResolver resolver;
       setUp(() {
-        resolver = PackageResolver.config({'foo': p.toUri('$dir/foo')});
+        handler = packagesHandler(packageMap: {
+          'foo': Uri.file('$dir/foo/'),
+        });
       });
 
       test('looks up a real file', () async {
-        var handler = packagesHandler(resolver: resolver);
         var request =
             Request('GET', Uri.parse('http://example.com/foo/foo.dart'));
         var response = await handler(request);
@@ -76,15 +54,15 @@
       });
 
       test('404s for a nonexistent package', () async {
-        var handler = packagesHandler(resolver: resolver);
         var request =
             Request('GET', Uri.parse('http://example.com/bar/foo.dart'));
         var response = await handler(request);
         expect(response.statusCode, equals(404));
+        expect(
+            await response.readAsString(), contains('Package bar not found'));
       });
 
       test('404s for a nonexistent file', () async {
-        var handler = packagesHandler(resolver: resolver);
         var request =
             Request('GET', Uri.parse('http://example.com/foo/bar.dart'));
         var response = await handler(request);
