diff --git a/CHANGELOG.md b/CHANGELOG.md
index ab64309..5bee2f7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.1.22
+
+* Require protobuf 0.14.0.
+
 ## 0.1.21
 
 * Make `TestStdinAsync` behave like a `Stream<Uint8List>`
diff --git a/lib/src/worker_protocol.pb.dart b/lib/src/worker_protocol.pb.dart
index 7e50966..f14589a 100644
--- a/lib/src/worker_protocol.pb.dart
+++ b/lib/src/worker_protocol.pb.dart
@@ -8,17 +8,22 @@
 import 'package:protobuf/protobuf.dart' as $pb;
 
 class Input extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('Input', package: const $pb.PackageName('blaze.worker'))
+  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('Input',
+      package: const $pb.PackageName('blaze.worker'))
     ..aOS(1, 'path')
     ..a<List<int>>(2, 'digest', $pb.PbFieldType.OY)
-    ..hasRequiredFields = false
-  ;
+    ..hasRequiredFields = false;
 
   Input() : super();
-  Input.fromBuffer(List<int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
-  Input.fromJson(String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
+  Input.fromBuffer(List<int> i,
+      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
+      : super.fromBuffer(i, r);
+  Input.fromJson(String i,
+      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
+      : super.fromJson(i, r);
   Input clone() => new Input()..mergeFromMessage(this);
-  Input copyWith(void Function(Input) updates) => super.copyWith((message) => updates(message as Input));
+  Input copyWith(void Function(Input) updates) =>
+      super.copyWith((message) => updates(message as Input));
   $pb.BuilderInfo get info_ => _i;
   static Input create() => new Input();
   Input createEmptyInstance() => create();
@@ -30,32 +35,44 @@
   }
 
   String get path => $_getS(0, '');
-  set path(String v) { $_setString(0, v); }
+  set path(String v) {
+    $_setString(0, v);
+  }
+
   bool hasPath() => $_has(0);
   void clearPath() => clearField(1);
 
   List<int> get digest => $_getN(1);
-  set digest(List<int> v) { $_setBytes(1, v); }
+  set digest(List<int> v) {
+    $_setBytes(1, v);
+  }
+
   bool hasDigest() => $_has(1);
   void clearDigest() => clearField(2);
 }
 
 class WorkRequest extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('WorkRequest', package: const $pb.PackageName('blaze.worker'))
+  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('WorkRequest',
+      package: const $pb.PackageName('blaze.worker'))
     ..pPS(1, 'arguments')
-    ..pp<Input>(2, 'inputs', $pb.PbFieldType.PM, Input.$checkItem, Input.create)
-    ..hasRequiredFields = false
-  ;
+    ..pc<Input>(2, 'inputs', $pb.PbFieldType.PM, subBuilder: Input.create)
+    ..hasRequiredFields = false;
 
   WorkRequest() : super();
-  WorkRequest.fromBuffer(List<int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
-  WorkRequest.fromJson(String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
+  WorkRequest.fromBuffer(List<int> i,
+      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
+      : super.fromBuffer(i, r);
+  WorkRequest.fromJson(String i,
+      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
+      : super.fromJson(i, r);
   WorkRequest clone() => new WorkRequest()..mergeFromMessage(this);
-  WorkRequest copyWith(void Function(WorkRequest) updates) => super.copyWith((message) => updates(message as WorkRequest));
+  WorkRequest copyWith(void Function(WorkRequest) updates) =>
+      super.copyWith((message) => updates(message as WorkRequest));
   $pb.BuilderInfo get info_ => _i;
   static WorkRequest create() => new WorkRequest();
   WorkRequest createEmptyInstance() => create();
-  static $pb.PbList<WorkRequest> createRepeated() => new $pb.PbList<WorkRequest>();
+  static $pb.PbList<WorkRequest> createRepeated() =>
+      new $pb.PbList<WorkRequest>();
   static WorkRequest getDefault() => _defaultInstance ??= create()..freeze();
   static WorkRequest _defaultInstance;
   static void $checkItem(WorkRequest v) {
@@ -68,21 +85,27 @@
 }
 
 class WorkResponse extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('WorkResponse', package: const $pb.PackageName('blaze.worker'))
+  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('WorkResponse',
+      package: const $pb.PackageName('blaze.worker'))
     ..a<int>(1, 'exitCode', $pb.PbFieldType.O3)
     ..aOS(2, 'output')
-    ..hasRequiredFields = false
-  ;
+    ..hasRequiredFields = false;
 
   WorkResponse() : super();
-  WorkResponse.fromBuffer(List<int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
-  WorkResponse.fromJson(String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
+  WorkResponse.fromBuffer(List<int> i,
+      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
+      : super.fromBuffer(i, r);
+  WorkResponse.fromJson(String i,
+      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
+      : super.fromJson(i, r);
   WorkResponse clone() => new WorkResponse()..mergeFromMessage(this);
-  WorkResponse copyWith(void Function(WorkResponse) updates) => super.copyWith((message) => updates(message as WorkResponse));
+  WorkResponse copyWith(void Function(WorkResponse) updates) =>
+      super.copyWith((message) => updates(message as WorkResponse));
   $pb.BuilderInfo get info_ => _i;
   static WorkResponse create() => new WorkResponse();
   WorkResponse createEmptyInstance() => create();
-  static $pb.PbList<WorkResponse> createRepeated() => new $pb.PbList<WorkResponse>();
+  static $pb.PbList<WorkResponse> createRepeated() =>
+      new $pb.PbList<WorkResponse>();
   static WorkResponse getDefault() => _defaultInstance ??= create()..freeze();
   static WorkResponse _defaultInstance;
   static void $checkItem(WorkResponse v) {
@@ -90,13 +113,18 @@
   }
 
   int get exitCode => $_get(0, 0);
-  set exitCode(int v) { $_setSignedInt32(0, v); }
+  set exitCode(int v) {
+    $_setSignedInt32(0, v);
+  }
+
   bool hasExitCode() => $_has(0);
   void clearExitCode() => clearField(1);
 
   String get output => $_getS(1, '');
-  set output(String v) { $_setString(1, v); }
+  set output(String v) {
+    $_setString(1, v);
+  }
+
   bool hasOutput() => $_has(1);
   void clearOutput() => clearField(2);
 }
-
diff --git a/pubspec.yaml b/pubspec.yaml
index f7da685..bc7edf1 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,16 +1,16 @@
 name: bazel_worker
-version: 0.1.21
+version: 0.1.22
 
 description: Tools for creating a bazel persistent worker.
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/bazel_worker
 
 environment:
-  sdk: '>=2.0.0-dev.17.0 <3.0.0'
+  sdk: '>=2.1.0 <3.0.0'
 
 dependencies:
   async: '>1.9.0 <3.0.0'
-  protobuf: '>=0.10.4 <0.14.0'
+  protobuf: ^0.14.0
 
 dev_dependencies:
   test: ^1.2.0
