Provide initial project structure
diff --git a/.analysis_options b/.analysis_options
new file mode 100644
index 0000000..9f8e801
--- /dev/null
+++ b/.analysis_options
@@ -0,0 +1,67 @@
+analyzer:
+  language:
+    enableStrictCallChecks: true
+    enableSuperMixins: true
+  strong-mode: true
+  errors:
+    # Allow having TODOs in the code
+    todo: ignore
+
+linter:
+  rules:
+    # these rules are documented on and in the same order as
+    # the Dart Lint rules page to make maintenance easier
+    # http://dart-lang.github.io/linter/lints/
+
+    # === error rules ===
+    - avoid_empty_else
+    - comment_references
+    - cancel_subscriptions
+    - close_sinks
+    - control_flow_in_finally
+    - empty_statements
+    - hash_and_equals
+    - invariant_booleans
+    - iterable_contains_unrelated_type
+    - list_remove_unrelated_type
+    - literal_only_boolean_expressions
+    - test_types_in_equals
+    - throw_in_finally
+    - unrelated_type_equality_checks
+    - valid_regexps
+
+    # === style rules ===
+    - always_declare_return_types
+    - always_specify_types
+    - annotate_overrides
+    - avoid_as
+    - avoid_init_to_null
+    - avoid_return_types_on_setters
+    - await_only_futures
+    - camel_case_types
+    - constant_identifier_names
+    - control_flow_in_finally
+    - empty_constructor_bodies
+    - implementation_imports
+    - library_names
+    - library_prefixes
+    - non_constant_identifier_names
+    - one_member_abstracts
+    - only_throw_errors
+    - overridden_fields
+    - package_api_docs
+    - package_prefixed_library_names
+    - prefer_is_not_empty
+    - public_member_api_docs
+    - slash_for_doc_comments
+    - sort_constructors_first
+    - sort_unnamed_constructors_first
+    - super_goes_last
+    - type_annotate_public_apis
+    - type_init_formals
+    - unawaited_futures
+    - unnecessary_brace_in_string_interp
+    - unnecessary_getters_setters
+
+    # === pub rules ===
+    - package_names
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5a472d6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,16 @@
+### Dart template
+# Don’t commit the following directories created by pub.
+.buildlog
+.pub/
+build/
+packages
+.packages
+
+# Include when developing application packages.
+pubspec.lock
+
+# IDE
+.project
+.settings
+.idea
+.c9
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..ad59f11
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,6 @@
+# Below is a list of people and organizations that have contributed
+# to the Process project. Names should be added to the list like so:
+#
+#   Name/Organization <email address>
+
+Google Inc.
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..d26bcdd
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,3 @@
+#### 1.0.0
+
+* Initial version
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..0786fdf
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,24 @@
+# How to contribute
+
+We'd love to accept your patches and contributions to this project. There are
+just a few small guidelines you need to follow.
+
+## Contributor License Agreement
+
+Contributions to this project must be accompanied by a Contributor License
+Agreement. You (or your employer) retain the copyright to your contribution,
+this simply gives us permission to use and redistribute your contributions as
+part of the project. Head over to <https://cla.developers.google.com/> to see
+your current agreements on file or to sign a new one.
+
+You generally only need to submit a CLA once, so if you've already submitted one
+(even if it was for a different project), you probably don't need to do it
+again.
+
+## Code reviews
+
+All submissions, including submissions by project members, require review. We
+use GitHub pull requests for this purpose. Consult [GitHub Help] for more
+information on using pull requests.
+
+[GitHub Help]: https://help.github.com/articles/about-pull-requests/
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..389ce98
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,26 @@
+Copyright 2017, the Dart project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google Inc. nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b01d741
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# Platform
+
+[![Build Status -](https://travis-ci.org/tvolkert/platform.svg?branch=master)](https://travis-ci.org/tvolkert/platform)
+[![Coverage Status -](https://coveralls.io/repos/github/tvolkert/platform/badge.svg?branch=master)](https://coveralls.io/github/tvolkert/platform?branch=master)
+
+A generic platform abstraction for Dart.
+
+Like `dart:io`, `package:platform` supplies a rich, Dart-idiomatic API for
+accessing platform-specific information.
+
+`package:platform` provides a lightweight wrapper around the static `Platform`
+properties that exist in `dart:io`. However, it uses instance properties rather
+than static properties, making it possible to mock out in tests.
diff --git a/dev/setup.sh b/dev/setup.sh
new file mode 100755
index 0000000..99ec284
--- /dev/null
+++ b/dev/setup.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+# 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.
+
+pub upgrade
diff --git a/dev/travis.sh b/dev/travis.sh
new file mode 100755
index 0000000..866b361
--- /dev/null
+++ b/dev/travis.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+# 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.
+
+# Make sure dartfmt is run on everything
+echo "Checking dartfmt..."
+needs_dartfmt="$(dartfmt -n lib test dev)"
+if [[ -n "$needs_dartfmt" ]]; then
+  echo "FAILED"
+  echo "$needs_dartfmt"
+  exit 1
+fi
+echo "PASSED"
+
+# Make sure we pass the analyzer
+echo "Checking dartanalyzer..."
+fails_analyzer="$(find lib test dev -name "*.dart" | xargs dartanalyzer --options .analysis_options)"
+if [[ "$fails_analyzer" == *"[error]"* ]]; then
+  echo "FAILED"
+  echo "$fails_analyzer"
+  exit 1
+fi
+echo "PASSED"
+
+# Fast fail the script on failures.
+set -e
+
+# Run the tests.
+pub run test
diff --git a/pubspec.yaml b/pubspec.yaml
new file mode 100644
index 0000000..0c95596
--- /dev/null
+++ b/pubspec.yaml
@@ -0,0 +1,12 @@
+name: platform
+version: 1.0.0
+authors:
+- Todd Volkert <tvolkert@google.com>
+description: A pluggable, mockable platform abstraction for Dart.
+homepage: https://github.com/tvolkert/platform
+
+dev_dependencies:
+  test: ^0.12.10
+
+environment:
+  sdk: '>=1.19.0 <2.0.0'