diff --git a/lib/platform.dart b/lib/platform.dart
new file mode 100644
index 0000000..c4eca7c
--- /dev/null
+++ b/lib/platform.dart
@@ -0,0 +1,6 @@
+// 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.
+
+export 'src/interface/local_platform.dart';
+export 'src/interface/platform.dart';
diff --git a/lib/src/interface/local_platform.dart b/lib/src/interface/local_platform.dart
new file mode 100644
index 0000000..0cd117d
--- /dev/null
+++ b/lib/src/interface/local_platform.dart
@@ -0,0 +1,46 @@
+// 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:io' as io show Platform;
+
+import 'platform.dart';
+
+/// `Platform` implementation that delegates directly to `dart:io`.
+class LocalPlatform extends Platform {
+  @override
+  int get numberOfProcessors => io.Platform.numberOfProcessors;
+
+  @override
+  String get pathSeparator => io.Platform.pathSeparator;
+
+  @override
+  String get operatingSystem => io.Platform.operatingSystem;
+
+  @override
+  String get localHostname => io.Platform.localHostname;
+
+  @override
+  Map<String, String> get environment => io.Platform.environment;
+
+  @override
+  String get executable => io.Platform.executable;
+
+  @override
+  String get resolvedExecutable => io.Platform.resolvedExecutable;
+
+  @override
+  Uri get script => io.Platform.script;
+
+  @override
+  List<String> get executableArguments => io.Platform.executableArguments;
+
+  @override
+  String get packageRoot => io.Platform.packageRoot;
+
+  @override
+  String get packageConfig => io.Platform.packageConfig;
+
+  @override
+  String get version => io.Platform.version;
+}
diff --git a/lib/src/interface/platform.dart b/lib/src/interface/platform.dart
new file mode 100644
index 0000000..19454d9
--- /dev/null
+++ b/lib/src/interface/platform.dart
@@ -0,0 +1,111 @@
+// 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.
+
+/// Provides API parity with the `Platform` class in `dart:io`, but using
+/// instance properties rather than static properties. This difference enables
+/// the use of these APIs in tests, where you can provide mock implementations.
+abstract class Platform {
+  /// The number of processors of the machine.
+  int get numberOfProcessors;
+
+  /// The path separator used by the operating system to separate
+  /// components in file paths.
+  String get pathSeparator;
+
+  /// A string (`linux`, `macos`, `windows`, `android`, `ios`, or `fuchsia`)
+  /// representing the operating system.
+  String get operatingSystem;
+
+  /// Get the local hostname for the system.
+  String get localHostname;
+
+  /// True if the operating system is Linux.
+  bool get isLinux => (operatingSystem == "linux");
+
+  /// True if the operating system is OS X.
+  bool get isMacOS => (operatingSystem == "macos");
+
+  /// True if the operating system is Windows.
+  bool get isWindows => (operatingSystem == "windows");
+
+  /// True if the operating system is Android.
+  bool get isAndroid => (operatingSystem == "android");
+
+  /// True if the operating system is iOS.
+  bool get isIOS => (operatingSystem == "ios");
+
+  /// True if the operating system is Fuchsia
+  bool get isFuchsia => (operatingSystem == "fuchsia");
+
+  /// The environment for this process.
+  ///
+  /// The returned environment is an unmodifiable map whose content is
+  /// retrieved from the operating system on its first use.
+  ///
+  /// Environment variables on Windows are case-insensitive. The map
+  /// returned on Windows is therefore case-insensitive and will convert
+  /// all keys to upper case. On other platforms the returned map is
+  /// a standard case-sensitive map.
+  Map<String, String> get environment;
+
+  /// The path of the executable used to run the script in this isolate.
+  ///
+  /// The path returned is the literal path used to run the script. This
+  /// path might be relative or just be a name from which the executable
+  /// was found by searching the `PATH`.
+  ///
+  /// To get the absolute path to the resolved executable use
+  /// [resolvedExecutable].
+  String get executable;
+
+  /// The path of the executable used to run the script in this
+  /// isolate after it has been resolved by the OS.
+  ///
+  /// This is the absolute path, with all symlinks resolved, to the
+  /// executable used to run the script.
+  String get resolvedExecutable;
+
+  /// The absolute URI of the script being run in this
+  /// isolate.
+  ///
+  /// If the script argument on the command line is relative,
+  /// it is resolved to an absolute URI before fetching the script, and
+  /// this absolute URI is returned.
+  ///
+  /// URI resolution only does string manipulation on the script path, and this
+  /// may be different from the file system's path resolution behavior. For
+  /// example, a symbolic link immediately followed by '..' will not be
+  /// looked up.
+  ///
+  /// If the executable environment does not support [script] an empty
+  /// [Uri] is returned.
+  Uri get script;
+
+  /// The flags passed to the executable used to run the script in this
+  /// isolate. These are the command-line flags between the executable name
+  /// and the script name. Each fetch of `executableArguments` returns a new
+  /// list containing the flags passed to the executable.
+  List<String> get executableArguments;
+
+  /// The value of the `--package-root` flag passed to the executable
+  /// used to run the script in this isolate.  This is the directory in which
+  /// Dart packages are looked up.
+  ///
+  /// If there is no `--package-root` flag, `null` is returned.
+  String get packageRoot;
+
+  /// The value of the `--packages` flag passed to the executable
+  /// used to run the script in this isolate. This is the configuration which
+  /// specifies how Dart packages are looked up.
+  ///
+  /// If there is no `--packages` flag, `null` is returned.
+  String get packageConfig;
+
+  /// The version of the current Dart runtime.
+  ///
+  /// The returned `String` is formatted as the [semver](http://semver.org)
+  /// version string of the current dart runtime, possibly followed by
+  /// whitespace and other version and build details.
+  String get version;
+}
