diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index bcbb6896b67357a4937b1a9bcf1cfad9899583c5..caeb6b8fbf0daf2cf832bd5761b7a40a20de55e2 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -259,6 +259,13 @@ const options = [
     cli: false,
     admin: true,
   },
+  {
+    name: 'enabledManagers',
+    description:
+      'A list of package managers to enable. If defined, then all managers not on the list are disabled.',
+    type: 'list',
+    stage: 'repository',
+  },
   {
     name: 'packageFiles',
     description: 'Package file paths',
diff --git a/lib/manager/index.js b/lib/manager/index.js
index 3868e48f2f710f664aeac39ca2f29ec631f39426..71a1a880bf45d5f662ea56a2d7b12087ae229868 100644
--- a/lib/manager/index.js
+++ b/lib/manager/index.js
@@ -39,6 +39,20 @@ async function detectPackageFiles(config) {
   );
   for (const manager of managerList) {
     logger.debug(`Detecting package files (${manager})`);
+    const { parentManager } = managers[manager];
+    // Check if the user has a whitelist of managers
+    if (
+      config.enabledManagers &&
+      config.enabledManagers.length &&
+      !(
+        config.enabledManagers.includes(manager) ||
+        config.enabledManagers.includes(parentManager)
+      )
+    ) {
+      logger.debug(manager + ' is not on the enabledManagers list');
+      continue; // eslint-disable-line no-continue
+    }
+    // Check if the manager is manually disabled
     if (!(config[manager] && config[manager].enabled)) {
       logger.debug(manager + ' is disabled');
       continue; // eslint-disable-line no-continue
diff --git a/test/manager/index.spec.js b/test/manager/index.spec.js
index bacf2481981c1fd72b8d241a6f4df619fc64cf95..9ca1451dbf2951130cb0996640e30f7c8daaa82b 100644
--- a/test/manager/index.spec.js
+++ b/test/manager/index.spec.js
@@ -20,6 +20,15 @@ describe('manager', () => {
         warnings: [],
       };
     });
+    it('skips if not in enabledManagers list', async () => {
+      platform.getFileList.mockReturnValueOnce([
+        'package.json',
+        'backend/package.json',
+      ]);
+      config.enabledManagers = ['docker'];
+      const res = await manager.detectPackageFiles(config);
+      expect(res).toHaveLength(0);
+    });
     it('adds package files to object', async () => {
       platform.getFileList.mockReturnValueOnce([
         'package.json',
diff --git a/website/docs/_posts/2017-10-05-configuration-options.md b/website/docs/_posts/2017-10-05-configuration-options.md
index a90dcb14a81d9f06a7f8dd01f4aab6966c627e98..8918998520304468d9528e2af2f53e168b571400 100644
--- a/website/docs/_posts/2017-10-05-configuration-options.md
+++ b/website/docs/_posts/2017-10-05-configuration-options.md
@@ -286,6 +286,28 @@ To disable Renovate for `dependencies` but keep it for `devDependencies` you cou
 }
 ```
 
+## enabledManagers
+
+A list of package managers to enable. If defined, then all managers not on the list are disabled.
+
+| name    | value |
+| ------- | ----- |
+| type    | list  |
+| default | []    |
+
+This is a way to "whitelist" certain package managers and disable all others.
+
+By default, as Renovate supports more package managers we enable them once they are stable, but for some people only interested in perhaps npm dependencies, it can feel like "whack-a-mole" to keep disabling new ones you don't want.
+
+This works for both managers (e.g. npm, circleci, nvm, etc) as well as "parent" managers (docker or node).
+
+Example:
+
+````json
+{
+  "enabledManagers": ["npm"]
+}
+
 ## encrypted
 
 A configuration object containing strings encrypted with Renovate's public key.
@@ -386,7 +408,7 @@ By default, Renovate will "slugify" the groupName to determine the branch name.
 ```json
   "groupName": "eslint packages",
   "groupSlug": "eslint"
-```
+````
 
 And then the branchName would be `renovate/eslint` instead.