diff --git a/CHANGELOG.md b/CHANGELOG.md
index 161ef5d..268adc9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+#### 3.0.0
+
+* Import `dart:io` unconditionally. More recent Dart SDK revisions allow
+  `dart:io` to be imported in a browser context, though if methods are actually
+  invoked, they will fail. This matches well with `package:file`, where users
+  can use the `memory` library and get in-memory implementations of the
+  `dart:io` interfaces.
+* Bump minimum Dart SDK to `1.24.0`
+
 #### 2.3.7
 
 * Fix Dart 2 error.
diff --git a/lib/src/backends/local.dart b/lib/src/backends/local.dart
index b5ef405..b67dd1f 100644
--- a/lib/src/backends/local.dart
+++ b/lib/src/backends/local.dart
@@ -12,8 +12,6 @@
 import 'package:file/file.dart';
 import 'package:path/path.dart' as p;
 
-import '../io/shim.dart' as shim;
-
 part 'local/local_directory.dart';
 part 'local/local_file.dart';
 part 'local/local_file_system.dart';
diff --git a/lib/src/backends/local/local_file_system.dart b/lib/src/backends/local/local_file_system.dart
index cca5364..b26d107 100644
--- a/lib/src/backends/local/local_file_system.dart
+++ b/lib/src/backends/local/local_file_system.dart
@@ -14,13 +14,13 @@
 
   @override
   Directory directory(dynamic path) =>
-      new _LocalDirectory(this, shim.newDirectory(getPath(path)));
+      new _LocalDirectory(this, new io.Directory(getPath(path)));
 
   @override
-  File file(dynamic path) => new _LocalFile(this, shim.newFile(getPath(path)));
+  File file(dynamic path) => new _LocalFile(this, new io.File(getPath(path)));
 
   @override
-  Link link(dynamic path) => new _LocalLink(this, shim.newLink(getPath(path)));
+  Link link(dynamic path) => new _LocalLink(this, new io.Link(getPath(path)));
 
   @override
   p.Context get path => new p.Context();
@@ -30,36 +30,36 @@
   /// platform-dependent, and may be set by an environment variable.
   @override
   Directory get systemTempDirectory =>
-      new _LocalDirectory(this, shim.systemTemp());
+      new _LocalDirectory(this, io.Directory.systemTemp);
 
   @override
-  Directory get currentDirectory => directory(shim.currentDirectory.path);
+  Directory get currentDirectory => directory(io.Directory.current.path);
 
   @override
-  set currentDirectory(dynamic path) => shim.currentDirectory = path;
+  set currentDirectory(dynamic path) => io.Directory.current = path;
 
   @override
-  Future<io.FileStat> stat(String path) => shim.stat(path);
+  Future<io.FileStat> stat(String path) => io.FileStat.stat(path);
 
   @override
-  io.FileStat statSync(String path) => shim.statSync(path);
+  io.FileStat statSync(String path) => io.FileStat.statSync(path);
 
   @override
   Future<bool> identical(String path1, String path2) =>
-      shim.identical(path1, path2);
+      io.FileSystemEntity.identical(path1, path2);
 
   @override
   bool identicalSync(String path1, String path2) =>
-      shim.identicalSync(path1, path2);
+      io.FileSystemEntity.identicalSync(path1, path2);
 
   @override
-  bool get isWatchSupported => shim.isWatchSupported;
+  bool get isWatchSupported => io.FileSystemEntity.isWatchSupported;
 
   @override
   Future<io.FileSystemEntityType> type(String path, {bool followLinks: true}) =>
-      shim.type(path, followLinks);
+      io.FileSystemEntity.type(path, followLinks: followLinks);
 
   @override
   io.FileSystemEntityType typeSync(String path, {bool followLinks: true}) =>
-      shim.typeSync(path, followLinks);
+      io.FileSystemEntity.typeSync(path, followLinks: followLinks);
 }
diff --git a/lib/src/io.dart b/lib/src/io.dart
index bd430a4..9d57e78 100644
--- a/lib/src/io.dart
+++ b/lib/src/io.dart
@@ -8,10 +8,7 @@
 /// the `file` package. The `file` package re-exports these interfaces (or in
 /// some cases, implementations of these interfaces by the same name), so this
 /// file need not be exposes publicly and exists for internal use only.
-///
-/// For VM users, this exports the actual `dart:io` interfaces; for browser
-/// contexts, this exports locally-defined versions of those same interfaces.
-export 'io/interface.dart' if (dart.library.io) 'dart:io'
+export 'dart:io'
     show
         Directory,
         File,
diff --git a/lib/src/io/interface.dart b/lib/src/io/interface.dart
deleted file mode 100644
index 78bb899..0000000
--- a/lib/src/io/interface.dart
+++ /dev/null
@@ -1,553 +0,0 @@
-// Copyright (c) 2017, 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:convert';
-
-// ignore: public_member_api_docs
-abstract class Directory implements FileSystemEntity {
-  // ignore: public_member_api_docs
-  Future<Directory> create({bool recursive: false});
-
-  // ignore: public_member_api_docs
-  void createSync({bool recursive: false});
-
-  // ignore: public_member_api_docs
-  Future<Directory> createTemp([String prefix]);
-
-  // ignore: public_member_api_docs
-  Directory createTempSync([String prefix]);
-
-  @override
-  Future<Directory> rename(String newPath);
-
-  @override
-  Directory renameSync(String newPath);
-
-  @override
-  Directory get absolute;
-
-  // ignore: public_member_api_docs
-  Stream<FileSystemEntity> list(
-      {bool recursive: false, bool followLinks: true});
-
-  // ignore: public_member_api_docs
-  List<FileSystemEntity> listSync(
-      {bool recursive: false, bool followLinks: true});
-}
-
-// ignore: public_member_api_docs
-abstract class File implements FileSystemEntity {
-  // ignore: public_member_api_docs
-  Future<File> create({bool recursive: false});
-
-  // ignore: public_member_api_docs
-  void createSync({bool recursive: false});
-
-  @override
-  Future<File> rename(String newPath);
-
-  @override
-  File renameSync(String newPath);
-
-  // ignore: public_member_api_docs
-  Future<File> copy(String newPath);
-
-  // ignore: public_member_api_docs
-  File copySync(String newPath);
-
-  // ignore: public_member_api_docs
-  Future<int> length();
-
-  // ignore: public_member_api_docs
-  int lengthSync();
-
-  @override
-  File get absolute;
-
-  // ignore: public_member_api_docs
-  Future<DateTime> lastAccessed();
-
-  // ignore: public_member_api_docs
-  DateTime lastAccessedSync();
-
-  // ignore: public_member_api_docs
-  Future<dynamic> setLastAccessed(DateTime time);
-
-  // ignore: public_member_api_docs
-  void setLastAccessedSync(DateTime time);
-
-  // ignore: public_member_api_docs
-  Future<DateTime> lastModified();
-
-  // ignore: public_member_api_docs
-  DateTime lastModifiedSync();
-
-  // ignore: public_member_api_docs
-  Future<dynamic> setLastModified(DateTime time);
-
-  // ignore: public_member_api_docs
-  void setLastModifiedSync(DateTime time);
-
-  // ignore: public_member_api_docs
-  Future<RandomAccessFile> open({FileMode mode: FileMode.READ});
-
-  // ignore: public_member_api_docs
-  RandomAccessFile openSync({FileMode mode: FileMode.READ});
-
-  // ignore: public_member_api_docs
-  Stream<List<int>> openRead([int start, int end]);
-
-  // ignore: public_member_api_docs
-  IOSink openWrite({FileMode mode: FileMode.WRITE, Encoding encoding: UTF8});
-
-  // ignore: public_member_api_docs
-  Future<List<int>> readAsBytes();
-
-  // ignore: public_member_api_docs
-  List<int> readAsBytesSync();
-
-  // ignore: public_member_api_docs
-  Future<String> readAsString({Encoding encoding: UTF8});
-
-  // ignore: public_member_api_docs
-  String readAsStringSync({Encoding encoding: UTF8});
-
-  // ignore: public_member_api_docs
-  Future<List<String>> readAsLines({Encoding encoding: UTF8});
-
-  // ignore: public_member_api_docs
-  List<String> readAsLinesSync({Encoding encoding: UTF8});
-
-  // ignore: public_member_api_docs
-  Future<File> writeAsBytes(List<int> bytes,
-      {FileMode mode: FileMode.WRITE, bool flush: false});
-
-  // ignore: public_member_api_docs
-  void writeAsBytesSync(List<int> bytes,
-      {FileMode mode: FileMode.WRITE, bool flush: false});
-
-  // ignore: public_member_api_docs
-  Future<File> writeAsString(String contents,
-      {FileMode mode: FileMode.WRITE,
-      Encoding encoding: UTF8,
-      bool flush: false});
-
-  // ignore: public_member_api_docs
-  void writeAsStringSync(String contents,
-      {FileMode mode: FileMode.WRITE,
-      Encoding encoding: UTF8,
-      bool flush: false});
-}
-
-// ignore: public_member_api_docs
-enum FileLock {
-  // ignore: constant_identifier_names, public_member_api_docs
-  SHARED,
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  EXCLUSIVE,
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  BLOCKING_SHARED,
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  BLOCKING_EXCLUSIVE,
-}
-
-// ignore: public_member_api_docs
-class FileMode {
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const FileMode READ = const FileMode._internal(0);
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const FileMode WRITE = const FileMode._internal(1);
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const FileMode APPEND = const FileMode._internal(2);
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const FileMode WRITE_ONLY = const FileMode._internal(3);
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const FileMode WRITE_ONLY_APPEND = const FileMode._internal(4);
-
-  final int _mode; // ignore: unused_field
-
-  const FileMode._internal(this._mode);
-}
-
-// ignore: public_member_api_docs
-abstract class FileStat {
-  // ignore: public_member_api_docs
-  DateTime get changed;
-
-  // ignore: public_member_api_docs
-  DateTime get modified;
-
-  // ignore: public_member_api_docs
-  DateTime get accessed;
-
-  // ignore: public_member_api_docs
-  FileSystemEntityType get type;
-
-  // ignore: public_member_api_docs
-  int get mode;
-
-  // ignore: public_member_api_docs
-  int get size;
-
-  // ignore: public_member_api_docs
-  String modeString();
-}
-
-// ignore: public_member_api_docs
-abstract class FileSystemEntity {
-  // ignore: public_member_api_docs
-  String get path;
-
-  // ignore: public_member_api_docs
-  Uri get uri;
-
-  // ignore: public_member_api_docs
-  Future<bool> exists();
-
-  // ignore: public_member_api_docs
-  bool existsSync();
-
-  // ignore: public_member_api_docs
-  Future<FileSystemEntity> rename(String newPath);
-
-  // ignore: public_member_api_docs
-  FileSystemEntity renameSync(String newPath);
-
-  // ignore: public_member_api_docs
-  Future<String> resolveSymbolicLinks();
-
-  // ignore: public_member_api_docs
-  String resolveSymbolicLinksSync();
-
-  // ignore: public_member_api_docs
-  Future<FileStat> stat();
-
-  // ignore: public_member_api_docs
-  FileStat statSync();
-
-  // ignore: public_member_api_docs
-  Future<FileSystemEntity> delete({bool recursive: false});
-
-  // ignore: public_member_api_docs
-  void deleteSync({bool recursive: false});
-
-  // ignore: public_member_api_docs
-  Stream<FileSystemEvent> watch(
-      {int events: FileSystemEvent.ALL, bool recursive: false});
-
-  // ignore: public_member_api_docs
-  bool get isAbsolute;
-
-  // ignore: public_member_api_docs
-  FileSystemEntity get absolute;
-
-  // ignore: public_member_api_docs
-  Directory get parent;
-}
-
-// ignore: public_member_api_docs
-class FileSystemEntityType {
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const FileSystemEntityType FILE =
-      const FileSystemEntityType._internal(0);
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const FileSystemEntityType DIRECTORY =
-      const FileSystemEntityType._internal(1);
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const FileSystemEntityType LINK =
-      const FileSystemEntityType._internal(2);
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const FileSystemEntityType NOT_FOUND =
-      const FileSystemEntityType._internal(3);
-
-  final int _type;
-  const FileSystemEntityType._internal(this._type);
-
-  // ignore: public_member_api_docs
-  @override
-  String toString() =>
-      const <String>['FILE', 'DIRECTORY', 'LINK', 'NOT_FOUND'][_type];
-}
-
-// ignore: public_member_api_docs
-abstract class FileSystemEvent {
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const int CREATE = 1 << 0;
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const int MODIFY = 1 << 1;
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const int DELETE = 1 << 2;
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const int MOVE = 1 << 3;
-
-  // ignore: constant_identifier_names, public_member_api_docs
-  static const int ALL = CREATE | MODIFY | DELETE | MOVE;
-
-  // ignore: public_member_api_docs
-  int get type;
-
-  // ignore: public_member_api_docs
-  String get path;
-
-  // ignore: public_member_api_docs
-  bool get isDirectory;
-}
-
-// ignore: public_member_api_docs
-class FileSystemException implements IOException {
-  // ignore: public_member_api_docs
-  const FileSystemException([this.message = "", this.path = "", this.osError]);
-
-  // ignore: public_member_api_docs
-  final String message;
-
-  // ignore: public_member_api_docs
-  final String path;
-
-  // ignore: public_member_api_docs
-  final OSError osError;
-
-  // ignore: public_member_api_docs
-  @override
-  String toString() {
-    StringBuffer sb = new StringBuffer();
-    sb.write("FileSystemException");
-    if (message.isNotEmpty) {
-      sb.write(": $message");
-      if (path != null) {
-        sb.write(", path = '$path'");
-      }
-      if (osError != null) {
-        sb.write(" ($osError)");
-      }
-    } else if (osError != null) {
-      sb.write(": $osError");
-      if (path != null) {
-        sb.write(", path = '$path'");
-      }
-    } else if (path != null) {
-      sb.write(": $path");
-    }
-    return sb.toString();
-  }
-}
-
-// ignore: public_member_api_docs
-abstract class IOException implements Exception {}
-
-// ignore: public_member_api_docs
-abstract class IOSink implements StreamSink<List<int>>, StringSink {
-  // ignore: public_member_api_docs
-  Encoding encoding;
-
-  // ignore: public_member_api_docs
-  @override
-  void add(List<int> data);
-
-  // ignore: public_member_api_docs
-  @override
-  void write(Object obj);
-
-  // ignore: public_member_api_docs
-  @override
-  void writeAll(Iterable<dynamic> objects, [String separator = ""]);
-
-  // ignore: public_member_api_docs
-  @override
-  void writeln([Object obj = ""]);
-
-  // ignore: public_member_api_docs
-  @override
-  void writeCharCode(int charCode);
-
-  // ignore: public_member_api_docs
-  @override
-  void addError(dynamic error, [StackTrace stackTrace]);
-
-  // ignore: public_member_api_docs
-  @override
-  Future<dynamic> addStream(Stream<List<int>> stream);
-
-  // ignore: public_member_api_docs
-  Future<dynamic> flush();
-
-  // ignore: public_member_api_docs
-  @override
-  Future<dynamic> close();
-
-  // ignore: public_member_api_docs
-  @override
-  Future<dynamic> get done;
-}
-
-// ignore: public_member_api_docs
-abstract class Link implements FileSystemEntity {
-  // ignore: public_member_api_docs
-  Future<Link> create(String target, {bool recursive: false});
-
-  // ignore: public_member_api_docs
-  void createSync(String target, {bool recursive: false});
-
-  // ignore: public_member_api_docs
-  void updateSync(String target);
-
-  // ignore: public_member_api_docs
-  Future<Link> update(String target);
-
-  // ignore: public_member_api_docs
-  @override
-  Future<Link> rename(String newPath);
-
-  // ignore: public_member_api_docs
-  @override
-  Link renameSync(String newPath);
-
-  // ignore: public_member_api_docs
-  @override
-  Link get absolute;
-
-  // ignore: public_member_api_docs
-  Future<String> target();
-
-  // ignore: public_member_api_docs
-  String targetSync();
-}
-
-// ignore: public_member_api_docs
-class OSError {
-  // ignore: public_member_api_docs
-  static const int noErrorCode = -1;
-
-  // ignore: public_member_api_docs
-  const OSError([this.message = "", this.errorCode = noErrorCode]);
-
-  // ignore: public_member_api_docs
-  final String message;
-
-  // ignore: public_member_api_docs
-  final int errorCode;
-
-  @override
-  String toString() {
-    StringBuffer sb = new StringBuffer();
-    sb.write("OS Error");
-    if (message.isNotEmpty) {
-      sb..write(": ")..write(message);
-      if (errorCode != noErrorCode) {
-        sb..write(", errno = ")..write(errorCode.toString());
-      }
-    } else if (errorCode != noErrorCode) {
-      sb..write(": errno = ")..write(errorCode.toString());
-    }
-    return sb.toString();
-  }
-}
-
-// ignore: public_member_api_docs
-abstract class RandomAccessFile {
-  // ignore: public_member_api_docs
-  Future<RandomAccessFile> close();
-
-  // ignore: public_member_api_docs
-  void closeSync();
-
-  // ignore: public_member_api_docs
-  Future<int> readByte();
-
-  // ignore: public_member_api_docs
-  int readByteSync();
-
-  // ignore: public_member_api_docs
-  Future<List<int>> read(int bytes);
-
-  // ignore: public_member_api_docs
-  List<int> readSync(int bytes);
-
-  // ignore: public_member_api_docs
-  Future<int> readInto(List<int> buffer, [int start = 0, int end]);
-
-  // ignore: public_member_api_docs
-  int readIntoSync(List<int> buffer, [int start = 0, int end]);
-
-  // ignore: public_member_api_docs
-  Future<RandomAccessFile> writeByte(int value);
-
-  // ignore: public_member_api_docs
-  int writeByteSync(int value);
-
-  // ignore: public_member_api_docs
-  Future<RandomAccessFile> writeFrom(List<int> buffer,
-      [int start = 0, int end]);
-
-  // ignore: public_member_api_docs
-  void writeFromSync(List<int> buffer, [int start = 0, int end]);
-
-  // ignore: public_member_api_docs
-  Future<RandomAccessFile> writeString(String string,
-      {Encoding encoding: UTF8});
-
-  // ignore: public_member_api_docs
-  void writeStringSync(String string, {Encoding encoding: UTF8});
-
-  // ignore: public_member_api_docs
-  Future<int> position();
-
-  // ignore: public_member_api_docs
-  int positionSync();
-
-  // ignore: public_member_api_docs
-  Future<RandomAccessFile> setPosition(int position);
-
-  // ignore: public_member_api_docs
-  void setPositionSync(int position);
-
-  // ignore: public_member_api_docs
-  Future<RandomAccessFile> truncate(int length);
-
-  // ignore: public_member_api_docs
-  void truncateSync(int length);
-
-  // ignore: public_member_api_docs
-  Future<int> length();
-
-  // ignore: public_member_api_docs
-  int lengthSync();
-
-  // ignore: public_member_api_docs
-  Future<RandomAccessFile> flush();
-
-  // ignore: public_member_api_docs
-  void flushSync();
-
-  // ignore: public_member_api_docs
-  Future<RandomAccessFile> lock(
-      [FileLock mode = FileLock.EXCLUSIVE, int start = 0, int end = -1]);
-
-  // ignore: public_member_api_docs
-  void lockSync(
-      [FileLock mode = FileLock.EXCLUSIVE, int start = 0, int end = -1]);
-
-  // ignore: public_member_api_docs
-  Future<RandomAccessFile> unlock([int start = 0, int end = -1]);
-
-  // ignore: public_member_api_docs
-  void unlockSync([int start = 0, int end = -1]);
-
-  // ignore: public_member_api_docs
-  String get path;
-}
diff --git a/lib/src/io/shim.dart b/lib/src/io/shim.dart
deleted file mode 100644
index 5434d83..0000000
--- a/lib/src/io/shim.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2017, 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.
-
-/// For internal use only!
-///
-/// This exposes the handful of static methods required by the local backend.
-/// For browser contexts, these methods will all throw `UnsupportedError`.
-/// For VM contexts, they all delegate to the underlying methods in `dart:io`.
-export 'shim_internal.dart' if (dart.library.io) 'shim_dart_io.dart';
diff --git a/lib/src/io/shim_dart_io.dart b/lib/src/io/shim_dart_io.dart
deleted file mode 100644
index 0c1914a..0000000
--- a/lib/src/io/shim_dart_io.dart
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2017, 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' as io;
-
-/// Creates a new [io.Directory] with the specified [path].
-io.Directory newDirectory(String path) => new io.Directory(path);
-
-/// Creates a new [io.File] with the specified [path].
-io.File newFile(String path) => new io.File(path);
-
-/// Creates a new [io.Link] with the specified [path].
-io.Link newLink(String path) => new io.Link(path);
-
-/// Wraps [io.Directory.systemTemp].
-io.Directory systemTemp() => io.Directory.systemTemp;
-
-/// Wraps [io.Directory.current].
-io.Directory get currentDirectory => io.Directory.current;
-
-/// Wraps [io.Directory.current=].
-set currentDirectory(dynamic path) => io.Directory.current = path;
-
-/// Wraps [io.FileStat.stat].
-Future<io.FileStat> stat(String path) => io.FileStat.stat(path);
-
-/// Wraps [io.FileStat.statSync].
-io.FileStat statSync(String path) => io.FileStat.statSync(path);
-
-/// Wraps [io.FileSystemEntity.identical].
-Future<bool> identical(String path1, String path2) =>
-    io.FileSystemEntity.identical(path1, path2);
-
-/// Wraps [io.FileSystemEntity.identicalSync].
-bool identicalSync(String path1, String path2) =>
-    io.FileSystemEntity.identicalSync(path1, path2);
-
-/// Wraps [io.FileSystemEntity.isWatchSupported].
-bool get isWatchSupported => io.FileSystemEntity.isWatchSupported;
-
-/// Wraps [io.FileSystemEntity.type].
-Future<io.FileSystemEntityType> type(String path, bool followLinks) =>
-    io.FileSystemEntity.type(path, followLinks: followLinks);
-
-/// Wraps [io.FileSystemEntity.typeSync].
-io.FileSystemEntityType typeSync(String path, bool followLinks) =>
-    io.FileSystemEntity.typeSync(path, followLinks: followLinks);
diff --git a/lib/src/io/shim_internal.dart b/lib/src/io/shim_internal.dart
deleted file mode 100644
index 920c7c7..0000000
--- a/lib/src/io/shim_internal.dart
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2017, 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:file/src/io.dart' as io;
-
-const String _requiresIOMsg = 'This operation requires the use of dart:io';
-dynamic _requiresIO() => throw new UnsupportedError(_requiresIOMsg);
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-io.Directory newDirectory(_) => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-io.File newFile(_) => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-io.Link newLink(_) => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-io.Directory systemTemp() => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-io.Directory get currentDirectory => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-set currentDirectory(dynamic _) => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-Future<io.FileStat> stat(String _) => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-io.FileStat statSync(String _) => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-Future<bool> identical(String _, String __) => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-bool identicalSync(String _, String __) => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-bool get isWatchSupported => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-Future<io.FileSystemEntityType> type(String _, bool __) => _requiresIO();
-
-/// Throws [UnsupportedError]; browsers cannot use the `local` library.
-io.FileSystemEntityType typeSync(String _, bool __) => _requiresIO();
diff --git a/pubspec.yaml b/pubspec.yaml
index 38efe5e..bbb01b8 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: file
-version: 2.3.7
+version: 3.0.0
 authors:
 - Matan Lurey <matanl@google.com>
 - Yegor Jbanov <yjbanov@google.com>
@@ -16,4 +16,4 @@
   test: ^0.12.18
 
 environment:
-  sdk: '>=1.19.0 <2.0.0'
+  sdk: '>=1.24.0 <2.0.0'
