diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..a0653e3
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,25 @@
+language: dart
+
+dart:
+  - dev
+  - stable
+
+dart_task:
+  - test
+
+# Only run one instance of the formatter and the analyzer, rather than running
+# them against each Dart version.
+matrix:
+  include:
+  - dart: dev
+    dart_task: dartfmt
+  - dart: dev
+    dart_task: dartanalyzer
+
+# Only building master means that we don't run two builds for each pull request.
+branches:
+  only: [master]
+
+cache:
+ directories:
+   - $HOME/.pub-cache
diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 0000000..a10d4c5
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1,2 @@
+analyzer:
+  strong-mode: true
diff --git a/lib/test_process.dart b/lib/test_process.dart
index 3584ab5..dcb1d85 100644
--- a/lib/test_process.dart
+++ b/lib/test_process.dart
@@ -79,8 +79,7 @@
   /// printed to the console as they appear. This is only intended to be set
   /// temporarily to help when debugging test failures.
   static Future<TestProcess> start(
-      String executable,
-      Iterable<String> arguments,
+      String executable, Iterable<String> arguments,
       {String workingDirectory,
       Map<String, String> environment,
       bool includeParentEnvironment: true,
@@ -102,8 +101,8 @@
     }
 
     encoding ??= UTF8;
-    return new TestProcess(
-        process, description, encoding: encoding, forwardStdio: forwardStdio);
+    return new TestProcess(process, description,
+        encoding: encoding, forwardStdio: forwardStdio);
   }
 
   /// Creates a [TestProcess] for [process].
@@ -113,13 +112,15 @@
   ///
   /// This is protected, which means it should only be called by subclasses.
   @protected
-  TestProcess(Process process, this.description, {Encoding encoding,
-          bool forwardStdio: false})
+  TestProcess(Process process, this.description,
+      {Encoding encoding, bool forwardStdio: false})
       : _process = process,
         _stdoutSplitter = new StreamSplitter(process.stdout
-            .transform(encoding.decoder).transform(const LineSplitter())),
+            .transform(encoding.decoder)
+            .transform(const LineSplitter())),
         _stderrSplitter = new StreamSplitter(process.stderr
-            .transform(encoding.decoder).transform(const LineSplitter())) {
+            .transform(encoding.decoder)
+            .transform(const LineSplitter())) {
     addTearDown(_tearDown);
     expect(_process.exitCode.then((_) => _logOutput()), completes,
         reason: "Process `$description` never exited.");
diff --git a/test/test_process_test.dart b/test/test_process_test.dart
index 81d27e1..dd97a6b 100644
--- a/test/test_process_test.dart
+++ b/test/test_process_test.dart
@@ -49,18 +49,15 @@
         print("\nworld");
       ''');
 
-      expect(process.stdout,
-          emitsInOrder(['hello', '', 'world', emitsDone]));
+      expect(process.stdout, emitsInOrder(['hello', '', 'world', emitsDone]));
       expect(process.stderr, emitsInOrder(['hi', emitsDone]));
       await process.shouldExit(0);
     });
 
     test("close when the process exits", () async {
       var process = await startDartProcess('');
-      expect(expectLater(process.stdout, emits('hello')),
-          throwsTestFailure);
-      expect(expectLater(process.stderr, emits('world')),
-          throwsTestFailure);
+      expect(expectLater(process.stdout, emits('hello')), throwsTestFailure);
+      expect(expectLater(process.stderr, emits('world')), throwsTestFailure);
       await process.shouldExit(0);
     });
   });
@@ -73,19 +70,19 @@
       print("\nworld");
     ''');
 
-      expect(process.stdoutStream(),
-          emitsInOrder(['hello', '', 'world', emitsDone]));
-      expect(process.stdoutStream(),
-          emitsInOrder(['hello', '', 'world', emitsDone]));
+    expect(process.stdoutStream(),
+        emitsInOrder(['hello', '', 'world', emitsDone]));
+    expect(process.stdoutStream(),
+        emitsInOrder(['hello', '', 'world', emitsDone]));
 
-      expect(process.stderrStream(), emitsInOrder(['hi', emitsDone]));
-      expect(process.stderrStream(), emitsInOrder(['hi', emitsDone]));
+    expect(process.stderrStream(), emitsInOrder(['hi', emitsDone]));
+    expect(process.stderrStream(), emitsInOrder(['hi', emitsDone]));
 
-      await process.shouldExit(0);
+    await process.shouldExit(0);
 
-      expect(process.stdoutStream(),
-          emitsInOrder(['hello', '', 'world', emitsDone]));
-      expect(process.stderrStream(), emitsInOrder(['hi', emitsDone]));
+    expect(process.stdoutStream(),
+        emitsInOrder(['hello', '', 'world', emitsDone]));
+    expect(process.stderrStream(), emitsInOrder(['hi', emitsDone]));
   });
 
   test("stdin writes to the process", () async {
