diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index b66fb0b600983d2af0ce2c5d3a0746679f41f534..ddf102736f3e0b8c0e8c7ebbc49c327f120269f7 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -99,6 +99,15 @@ const options = [
     default: false,
     admin: true,
   },
+  {
+    name: 'mirrorMode',
+    description:
+      'Set to true if Renovate should use fork mode with a renovate.json in branch `renovate-config`',
+    stage: 'repository',
+    type: 'boolean',
+    default: false,
+    admin: true,
+  },
   // encryption
   {
     name: 'privateKey',
diff --git a/lib/workers/repository/init/config.js b/lib/workers/repository/init/config.js
index b99c3df5535df42aa6d7b55033ecbd367ba50a89..c8802f571ff62f0d9c8b2719ed3933defac4393b 100644
--- a/lib/workers/repository/init/config.js
+++ b/lib/workers/repository/init/config.js
@@ -8,6 +8,25 @@ const presets = require('../../../config/presets');
 // Check for config in `renovate.json`
 async function mergeRenovateConfig(config) {
   let returnConfig = { ...config };
+  // istanbul ignore if
+  if (config.mirrorMode) {
+    logger.info('Repository is in mirror mode');
+    let renovateJson;
+    try {
+      renovateJson = JSON.parse(
+        await platform.getFile('renovate.json', 'renovate-config')
+      );
+      logger.info('Found mirror config');
+    } catch (err) {
+      logger.debug('No mirror config found - using default config');
+      renovateJson = { extends: ['config:base'] };
+    }
+    const migratedConfig = migrateAndValidate(config, renovateJson);
+    const resolvedConfig = await presets.resolveConfigPresets(migratedConfig);
+    returnConfig = mergeChildConfig(returnConfig, resolvedConfig);
+    returnConfig.renovateJsonPresent = true;
+    return returnConfig;
+  }
   const fileList = await platform.getFileList();
   let configFile;
   if (fileList.includes('renovate.json')) {