diff --git a/CHANGELOG.md b/CHANGELOG.md
index 495379a..b8ad12b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.5
+
+* Use conditional imports to avoid dart:io imports on the web.
+
 ## 1.0.4
 
 * Set max SDK version to `<3.0.0`, and adjust other dependencies.
diff --git a/lib/src/package_root_resolver.dart b/lib/src/package_root_resolver.dart
index c9a06ff..4774a34 100644
--- a/lib/src/package_root_resolver.dart
+++ b/lib/src/package_root_resolver.dart
@@ -2,8 +2,6 @@
 // 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:io';
-
 import 'package:path/path.dart' as p;
 
 import 'async_package_resolver.dart';
@@ -48,12 +46,6 @@
     return Uri.parse("package:$relative");
   }
 
-  String packagePath(String package) {
-    if (packageRoot.scheme != 'file') return null;
-
-    var libLink = p.join(p.fromUri(packageRoot), package);
-    if (!new Link(libLink).existsSync()) return null;
-
-    return p.dirname(new Link(libLink).resolveSymbolicLinksSync());
-  }
+  String packagePath(String package) =>
+      packagePathForRoot(package, packageRoot);
 }
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 3e27cb4..5e4b411 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -6,12 +6,16 @@
 // exist.
 import 'dart:async';
 import 'dart:convert';
-import 'dart:io';
 import 'dart:isolate';
 
 import 'package:http/http.dart' as http;
 import 'package:package_config/packages_file.dart' as packages_file;
 
+// ignore: uri_does_not_exist
+import 'utils_stub.dart'
+    // ignore: uri_does_not_exist
+    if (dart.library.io) 'utils_io.dart' as conditional;
+
 /// Loads the configuration map from [uri].
 ///
 /// This supports `http`, `file`, `data`, and `package` URIs. If [client] is
@@ -24,8 +28,7 @@
   if (resolved.scheme == 'http') {
     text = await (client == null ? http.read(resolved) : client.read(resolved));
   } else if (resolved.scheme == 'file') {
-    var path = resolved.toFilePath(windows: Platform.isWindows);
-    text = await new File(path).readAsString();
+    text = await conditional.readFileAsString(resolved);
   } else if (resolved.scheme == 'data') {
     text = resolved.data.contentAsString();
   } else if (resolved.scheme == 'package') {
@@ -78,3 +81,6 @@
   if (uri.pathSegments.last.isEmpty) return uri;
   return uri.replace(pathSegments: uri.pathSegments.toList()..add(""));
 }
+
+String packagePathForRoot(String package, Uri root) =>
+    conditional.packagePathForRoot(package, root);
diff --git a/lib/src/utils_io.dart b/lib/src/utils_io.dart
new file mode 100644
index 0000000..8959f4d
--- /dev/null
+++ b/lib/src/utils_io.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, 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 'dart:io';
+
+import 'package:path/path.dart' as p;
+
+Future<String> readFileAsString(Uri uri) async {
+  var path = uri.toFilePath(windows: Platform.isWindows);
+  return await new File(path).readAsString();
+}
+
+String packagePathForRoot(String package, Uri root) {
+  if (root.scheme != 'file') return null;
+
+  var libLink = p.join(p.fromUri(root), package);
+  if (!new Link(libLink).existsSync()) return null;
+
+  return p.dirname(new Link(libLink).resolveSymbolicLinksSync());
+}
diff --git a/lib/src/utils_stub.dart b/lib/src/utils_stub.dart
new file mode 100644
index 0000000..cefa097
--- /dev/null
+++ b/lib/src/utils_stub.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2018, 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';
+
+Future<String> readFileAsString(Uri uri) => throw UnsupportedError(
+    'Reading files is only supported where dart:io is available.');
+
+String packagePathForRoot(String package, Uri root) => throw UnsupportedError(
+    'Computing package paths from a root is only supported where dart:io is '
+    'available.');
diff --git a/pubspec.yaml b/pubspec.yaml
index ed21bf1..83ff8a5 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: package_resolver
-version: 1.0.4
+version: 1.0.5
 
 description: First-class package resolution strategy classes.
 author: Dart Team <misc@dartlang.org>
