diff --git a/analysis_options.yaml b/analysis_options.yaml
index 1a9208e..e539e7c 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -2,6 +2,8 @@
 # include: package:pedantic/analysis_options.1.9.0.yaml
 
 analyzer:
+  language:
+    strict-raw-types: true
   strong-mode:
     implicit-casts: false
   exclude:
diff --git a/benchmark/bench.dart b/benchmark/bench.dart
index b1e039d..936dca9 100644
--- a/benchmark/bench.dart
+++ b/benchmark/bench.dart
@@ -6,10 +6,12 @@
 
 import 'dart:async';
 
+import 'package:analysis_server_lib/analysis_server_lib.dart';
 import 'package:dart_services/src/analysis_server.dart';
 import 'package:dart_services/src/bench.dart';
 import 'package:dart_services/src/common.dart';
 import 'package:dart_services/src/compiler.dart';
+import 'package:dart_services/src/protos/dart_services.pb.dart' as proto;
 import 'package:dart_services/src/sdk_manager.dart';
 import 'package:logging/logging.dart';
 
@@ -61,13 +63,13 @@
   }
 
   @override
-  Future init() => analysisServer.init();
+  Future<AnalysisServer> init() => analysisServer.init();
 
   @override
-  Future perform() => analysisServer.analyze(source);
+  Future<proto.AnalysisResults> perform() => analysisServer.analyze(source);
 
   @override
-  Future tearDown() => analysisServer.shutdown();
+  Future<dynamic> tearDown() => analysisServer.shutdown();
 }
 
 class Dart2jsBenchmark extends Benchmark {
@@ -78,7 +80,7 @@
       : super('dart2js.$name');
 
   @override
-  Future perform() {
+  Future<void> perform() {
     return compiler.compile(source).then((CompilationResults result) {
       if (!result.success) throw result;
     });
@@ -93,7 +95,7 @@
       : super('dartdevc.$name');
 
   @override
-  Future perform() {
+  Future<void> perform() {
     return compiler.compileDDC(source).then((DDCCompilationResults result) {
       if (!result.success) throw result;
     });
@@ -109,13 +111,14 @@
         super('completion.$name');
 
   @override
-  Future init() => analysisServer.init();
+  Future<AnalysisServer> init() => analysisServer.init();
 
   @override
-  Future perform() => analysisServer.complete(source, 30);
+  Future<proto.CompleteResponse> perform() =>
+      analysisServer.complete(source, 30);
 
   @override
-  Future tearDown() => analysisServer.shutdown();
+  Future<dynamic> tearDown() => analysisServer.shutdown();
 }
 
 final String _sunflower = '''
diff --git a/lib/services_gae.dart b/lib/services_gae.dart
index 6e90b03..577efe0 100644
--- a/lib/services_gae.dart
+++ b/lib/services_gae.dart
@@ -126,7 +126,7 @@
     await request.response.close();
   }
 
-  Future _processReadinessRequest(io.HttpRequest request) async {
+  Future<void> _processReadinessRequest(io.HttpRequest request) async {
     _logger.info('Processing readiness check');
     if (proxying) {
       request.response.statusCode = io.HttpStatus.ok;
@@ -141,7 +141,7 @@
     await request.response.close();
   }
 
-  Future _processLivenessRequest(io.HttpRequest request) async {
+  Future<void> _processLivenessRequest(io.HttpRequest request) async {
     _logger.info('Processing liveness check');
     if (proxying) {
       request.response.statusCode = io.HttpStatus.ok;
@@ -179,7 +179,7 @@
     await request.response.close();
   }
 
-  Future _processDefaultRequest(io.HttpRequest request) async {
+  Future<void> _processDefaultRequest(io.HttpRequest request) async {
     request.response.statusCode = io.HttpStatus.notFound;
     await request.response.close();
   }
diff --git a/lib/src/analysis_server.dart b/lib/src/analysis_server.dart
index 1937e05..1c20ed5 100644
--- a/lib/src/analysis_server.dart
+++ b/lib/src/analysis_server.dart
@@ -56,7 +56,7 @@
   }
 
   @override
-  Future shutdown() {
+  Future<dynamic> shutdown() {
     _logger.info('DartAnalysisServerWrapper shutdown');
     return _tempProject
         .delete(recursive: true)
@@ -86,7 +86,7 @@
   }
 
   @override
-  Future shutdown() {
+  Future<dynamic> shutdown() {
     _logger.info('FlutterAnalysisServerWrapper shutdown');
     return super.shutdown();
   }
@@ -149,8 +149,9 @@
         await _sendRemoveOverlays();
 
         return analysisServer;
-      }).catchError((err, st) {
+      }).catchError((Object err, StackTrace st) {
         _logger.severe('Error starting analysis server ($sdkPath): $err.\n$st');
+        return null;
       });
     }
 
diff --git a/lib/src/common_server_impl.dart b/lib/src/common_server_impl.dart
index a578da6..ec53a84 100644
--- a/lib/src/common_server_impl.dart
+++ b/lib/src/common_server_impl.dart
@@ -137,7 +137,7 @@
   bool get isRestarting => false;
 
   @override
-  Future shutdown() => null;
+  Future<dynamic> shutdown() => null;
 
   @override
   AnalysisServersWrapper get _analysisServers => null;
diff --git a/lib/src/server_cache.dart b/lib/src/server_cache.dart
index e7785d9..79059eb 100644
--- a/lib/src/server_cache.dart
+++ b/lib/src/server_cache.dart
@@ -122,7 +122,7 @@
           });
         })
         .timeout(const Duration(milliseconds: _connectionRetryMaxMs))
-        .catchError((_) {
+        .catchError((Object _) {
           log.severe(
               '$_logPrefix: Unable to connect to redis server, reconnecting in ${nextRetryMs}ms ...');
           Future<void>.delayed(Duration(milliseconds: nextRetryMs)).then((_) {
diff --git a/test/bench_test.dart b/test/bench_test.dart
index f875c10..e8711ec 100644
--- a/test/bench_test.dart
+++ b/test/bench_test.dart
@@ -44,7 +44,7 @@
   MockBenchmark() : super('mock');
 
   @override
-  Future perform() {
+  Future<void> perform() {
     count++;
     return Future.delayed(Duration(milliseconds: 10));
   }
diff --git a/test/common_server_api_protobuf_test.dart b/test/common_server_api_protobuf_test.dart
index d1456c6..52c86e1 100644
--- a/test/common_server_api_protobuf_test.dart
+++ b/test/common_server_api_protobuf_test.dart
@@ -100,7 +100,7 @@
       // TODO(jcollins-g): determine which piece of initialization isn't
       // happening and deal with that in warmup/init.
       {
-        var decodedJson = {};
+        var decodedJson = <dynamic, dynamic>{};
         final jsonData = proto.SourceRequest()..source = sampleCodeError;
         while (decodedJson.isEmpty) {
           final response =
@@ -409,10 +409,11 @@
   Future<String> get(String key) => Future.value(null);
 
   @override
-  Future set(String key, String value, {Duration expiration}) => Future.value();
+  Future<void> set(String key, String value, {Duration expiration}) =>
+      Future.value();
 
   @override
-  Future remove(String key) => Future.value();
+  Future<void> remove(String key) => Future.value();
 
   @override
   Future<void> shutdown() => Future.value();
diff --git a/test/common_server_api_test.dart b/test/common_server_api_test.dart
index 6fffa9f..50a935e 100644
--- a/test/common_server_api_test.dart
+++ b/test/common_server_api_test.dart
@@ -285,7 +285,7 @@
       // TODO(jcollins-g): determine which piece of initialization isn't
       // happening and deal with that in warmup/init.
       {
-        var decodedJson = {};
+        var decodedJson = <dynamic, dynamic>{};
         final jsonData = {'source': sampleCodeError};
         while (decodedJson.isEmpty) {
           final response =
@@ -318,7 +318,7 @@
             await _sendPostRequest('dartservices/$version/analyze', jsonData);
         expect(response.statusCode, 200);
         final data = await response.transform(utf8.decoder).join();
-        expect(json.decode(data), {});
+        expect(json.decode(data), <dynamic, dynamic>{});
       }
     });
 
@@ -389,7 +389,7 @@
 
     test('analyze negative-test noSource', () async {
       for (final version in versions) {
-        final jsonData = {};
+        final jsonData = <dynamic, dynamic>{};
         final response =
             await _sendPostRequest('dartservices/$version/analyze', jsonData);
         expect(response.statusCode, 400);
@@ -421,7 +421,7 @@
 
     test('compile negative-test noSource', () async {
       for (final version in versions) {
-        final jsonData = {};
+        final jsonData = <dynamic, dynamic>{};
         final response =
             await _sendPostRequest('dartservices/$version/compile', jsonData);
         expect(response.statusCode, 400);
@@ -452,8 +452,8 @@
 
     test('complete no data', () async {
       for (final version in versions) {
-        final response =
-            await _sendPostRequest('dartservices/$version/complete', {});
+        final response = await _sendPostRequest(
+            'dartservices/$version/complete', <dynamic, dynamic>{});
         expect(response.statusCode, 400);
       }
     });
@@ -500,7 +500,7 @@
         expect(response.statusCode, 200);
         final data = json.decode(await response.transform(utf8.decoder).join());
         expect(data, {
-          'info': {},
+          'info': <dynamic, dynamic>{},
         });
       }
     });
@@ -515,7 +515,7 @@
             await _sendPostRequest('dartservices/$version/document', jsonData);
         expect(response.statusCode, 200);
         final data = json.decode(await response.transform(utf8.decoder).join());
-        expect(data, {'info': {}});
+        expect(data, {'info': <dynamic, dynamic>{}});
       }
     });
 
@@ -662,10 +662,11 @@
   Future<String> get(String key) => Future.value(null);
 
   @override
-  Future set(String key, String value, {Duration expiration}) => Future.value();
+  Future<void> set(String key, String value, {Duration expiration}) =>
+      Future.value();
 
   @override
-  Future remove(String key) => Future.value();
+  Future<void> remove(String key) => Future.value();
 
   @override
   Future<void> shutdown() => Future.value();
diff --git a/test/flutter_analysis_server_test.dart b/test/flutter_analysis_server_test.dart
index 08788d1..8783322 100644
--- a/test/flutter_analysis_server_test.dart
+++ b/test/flutter_analysis_server_test.dart
@@ -298,10 +298,11 @@
   Future<String> get(String key) => Future.value(null);
 
   @override
-  Future set(String key, String value, {Duration expiration}) => Future.value();
+  Future<void> set(String key, String value, {Duration expiration}) =>
+      Future.value();
 
   @override
-  Future remove(String key) => Future.value();
+  Future<void> remove(String key) => Future.value();
 
   @override
   Future<void> shutdown() => Future.value();
diff --git a/test/redis_cache_test.dart b/test/redis_cache_test.dart
index a597c98..232c1d7 100644
--- a/test/redis_cache_test.dart
+++ b/test/redis_cache_test.dart
@@ -91,7 +91,7 @@
         logMessages = [];
         await redisCache.set('expiringkey', 'expiringValue',
             expiration: Duration(milliseconds: 1));
-        await Future.delayed(Duration(milliseconds: 100));
+        await Future<void>.delayed(Duration(milliseconds: 100));
         await expectLater(await redisCache.get('expiringkey'), isNull);
         expect(logMessages, isEmpty);
       });
@@ -146,7 +146,7 @@
         try {
           // Wait for a retry message.
           while (logMessages.length < 2) {
-            await (Future.delayed(Duration(milliseconds: 50)));
+            await (Future<void>.delayed(Duration(milliseconds: 50)));
           }
           expect(
               logMessages.join('\n'),
diff --git a/tool/fuzz_driver.dart b/tool/fuzz_driver.dart
index 3d19fa0..2b1b847 100644
--- a/tool/fuzz_driver.dart
+++ b/tool/fuzz_driver.dart
@@ -42,7 +42,7 @@
 OperationType lastExecuted;
 int lastOffset;
 
-Future main(List<String> args) async {
+Future<void> main(List<String> args) async {
   if (args.isEmpty) {
     print('''
 Usage: slow_test path_to_test_collection
@@ -115,7 +115,7 @@
 }
 
 /// Init the tools, and warm them up
-Future setupTools(String sdkPath) async {
+Future<void> setupTools(String sdkPath) async {
   print('Executing setupTools');
   await analysisServer?.shutdown();
 
@@ -138,7 +138,9 @@
   print('SetupTools done');
 }
 
-Future testPath(String path, analysis_server.AnalysisServerWrapper wrapper,
+Future<void> testPath(
+    String path,
+    analysis_server.AnalysisServerWrapper wrapper,
     comp.Compiler compiler) async {
   final f = io.File(path);
   var src = f.readAsStringSync();
@@ -393,10 +395,11 @@
   Future<String> get(String key) => Future.value(null);
 
   @override
-  Future set(String key, String value, {Duration expiration}) => Future.value();
+  Future<void> set(String key, String value, {Duration expiration}) =>
+      Future.value();
 
   @override
-  Future remove(String key) => Future.value();
+  Future<void> remove(String key) => Future.value();
 
   @override
   Future<void> shutdown() => Future.value();
diff --git a/tool/grind.dart b/tool/grind.dart
index 1215584..7b802af 100644
--- a/tool/grind.dart
+++ b/tool/grind.dart
@@ -32,7 +32,7 @@
 
 @Task()
 @Depends(buildStorageArtifacts)
-Future test() => TestRunner().testAsync();
+Future<dynamic> test() => TestRunner().testAsync();
 
 @DefaultTask()
 @Depends(analyze, test)
@@ -91,7 +91,7 @@
   }
 }
 
-Future _validateExists(String url) async {
+Future<void> _validateExists(String url) async {
   log('checking $url...');
 
   final response = await http.head(url);
@@ -161,7 +161,7 @@
   }
 }
 
-Future _buildStorageArtifacts(Directory dir) async {
+Future<void> _buildStorageArtifacts(Directory dir) async {
   final pubspec = createPubspec(includeFlutterWeb: true);
   joinFile(dir, ['pubspec.yaml']).writeAsStringSync(pubspec);
 
