diff --git a/lib/manager/index.ts b/lib/manager/index.ts
index c76274c7403cf5364091eb7aafe5cfec57284d57..fad24b290f55132e1a5c0eefe5e061f2528a2fc3 100644
--- a/lib/manager/index.ts
+++ b/lib/manager/index.ts
@@ -22,8 +22,27 @@ import {
   LANGUAGE_RUST,
 } from '../constants/languages';
 import { loadModules } from '../util/modules';
+import { logger } from '../logger';
 
-const managers = loadModules<ManagerApi>(__dirname);
+// istanbul ignore next
+function validateManager(manager): boolean {
+  if (!manager.defaultConfig) {
+    logger.fatal(`manager is missing defaultConfig`);
+    return false;
+  }
+  if (!manager.updateDependency) {
+    logger.fatal(`manager is missing updateDependency`);
+    return false;
+  }
+  if (!manager.extractPackageFile && !manager.extractAllPackageFiles) {
+    logger.fatal(
+      `manager must support extractPackageFile or extractAllPackageFiles`
+    );
+  }
+  return true;
+}
+
+const managers = loadModules<ManagerApi>(__dirname, validateManager);
 
 const managerList = Object.keys(managers);
 
diff --git a/lib/util/modules.ts b/lib/util/modules.ts
index f61deada3527dd8f7defdbf77c284b5128aa05f0..5cb6440c9c362aef1028c0e0ed0e770a69a1e432 100644
--- a/lib/util/modules.ts
+++ b/lib/util/modules.ts
@@ -22,7 +22,7 @@ function relatePath(here: string, there: string): string {
 
 export function loadModules<T>(
   dirname: string,
-  validate?: (x: unknown) => x is T
+  validate?: (x: unknown) => boolean
 ): Record<string, T> {
   const result: Record<string, T> = {};