add a real README with some basic examples
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c5ec53e..ced9768 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,3 @@
-## 0.1.0-dev
+## 0.1.0
 
 * Initial version.
diff --git a/README.md b/README.md
index f07818d..6f1b8e2 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,63 @@
-Tools for creating a persistent worker for [bazel](http://bazel.io/).
+Tools for creating a persistent worker loop for [bazel](http://bazel.io/).
+
+## Usage
+
+There are two abstract classes provided by this package, `AsyncWorkerLoop` and
+`SyncWorkerLoop`. These each have a `performRequest` method which you must
+implement.
+
+Lets look at a simple example of a `SyncWorkerLoop` implementation:
+
+```dart
+import 'dart:io';
+import 'package:bazel_worker/bazel_worker.dart';
+
+void main() {
+  // Blocks until it gets an EOF from stdin.
+  new SyncSimpleWorker().run();
+}
+
+class SyncSimpleWorker extends SyncWorkerLoop {
+  /// Must synchronously return a [WorkResponse], since this is a
+  /// [SyncWorkerLoop].
+  WorkResponse performRequest(WorkRequest request) {
+    new File('hello.txt').writeAsStringSync('hello world!');
+    return new WorkResponse()..exitCode = EXIT_CODE_OK;
+  }
+}
+```
+
+And now the same thing, implemented as an `AsyncWorkerLoop`:
+
+```dart
+import 'dart:io';
+import 'package:bazel_worker/bazel_worker.dart';
+
+void main() {
+  // Doesn't block, runs tasks async as they are received on stdin.
+  new AsyncSimpleWorker().run();
+}
+
+class AsyncSimpleWorker extends SyncWorkerLoop {
+  /// Must return a [Future<WorkResponse>], since this is an
+  /// [AsyncWorkerLoop].
+  Future<WorkResponse> performRequest(WorkRequest request) async {
+    await new File('hello.txt').writeAsString('hello world!');
+    return new WorkResponse()..exitCode = EXIT_CODE_OK;
+  }
+}
+```
+
+As you can see, these are nearly identical, it mostly comes down to the
+constraints on your package and personal preference which one you choose to
+implement.
+
+## Testing
+
+A `package:bazel_worker/testing.dart` file is also provided, which can greatly
+assist with writing unit tests for your worker. See the
+`test/worker_loop_test.dart` test included in this package for an example of how
+the helpers can be used.
 
 ## Features and bugs
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 13681cc..e2309fa 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: bazel_worker
-version: 0.1.0-dev
+version: 0.1.0
 description: Tools for creating a bazel persistent worker.
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/bazel_worker