diff --git a/lib/constants/languages.ts b/lib/constants/languages.ts
new file mode 100644
index 0000000000000000000000000000000000000000..88999d4554690b81d29575bedc19196d6b58161b
--- /dev/null
+++ b/lib/constants/languages.ts
@@ -0,0 +1,12 @@
+export const LANGUAGE_DART = 'dart';
+export const LANGUAGE_DOCKER = 'docker';
+export const LANGUAGE_DOT_NET = 'dotnet';
+export const LANGUAGE_ELIXIR = 'elixir';
+export const LANGUAGE_GOLANG = 'golang';
+export const LANGUAGE_JAVA = 'java';
+export const LANGUAGE_JAVASCRIPT = 'js';
+export const LANGUAGE_NODE = 'node';
+export const LANGUAGE_PHP = 'php';
+export const LANGUAGE_PYTHON = 'python';
+export const LANGUAGE_RUBY = 'ruby';
+export const LANGUAGE_RUST = 'rust';
diff --git a/lib/manager/ansible/index.ts b/lib/manager/ansible/index.ts
index 595304a1ea0e7202069fc15d7fd2df5b8b514944..f7021b8eda1b2b4aa301c7404b4adcad1ecf21b6 100644
--- a/lib/manager/ansible/index.ts
+++ b/lib/manager/ansible/index.ts
@@ -1,6 +1,7 @@
 import extractPackageFile from './extract';
 import updateDependency from './update';
+import { LANGUAGE_DOCKER } from '../../constants/languages';
 
-const language = 'docker';
+const language = LANGUAGE_DOCKER;
 
 export { extractPackageFile, language, updateDependency };
diff --git a/lib/manager/bundler/index.ts b/lib/manager/bundler/index.ts
index 3cff436f7497d7c28ffbfe9526f3835cb8e08be0..626d12621a2e2446e95a0e20be4f40518f24b9de 100644
--- a/lib/manager/bundler/index.ts
+++ b/lib/manager/bundler/index.ts
@@ -2,8 +2,9 @@ import { extractPackageFile } from './extract';
 import { updateDependency } from './update';
 import { updateArtifacts } from './artifacts';
 import { getRangeStrategy } from './range';
+import { LANGUAGE_RUBY } from '../../constants/languages';
 
-const language = 'ruby';
+const language = LANGUAGE_RUBY;
 
 /*
  * Each of the below functions contain some explanations within their own files.
diff --git a/lib/manager/cargo/index.ts b/lib/manager/cargo/index.ts
index b3e0f380d2758dde45c19da861444f00747516f0..0fed878b98baf6b36ea814381298465848be41d9 100644
--- a/lib/manager/cargo/index.ts
+++ b/lib/manager/cargo/index.ts
@@ -1,8 +1,9 @@
 import { extractPackageFile } from './extract';
 import { updateDependency } from './update';
 import { updateArtifacts } from './artifacts';
+import { LANGUAGE_RUST } from '../../constants/languages';
 
-const language = 'rust';
+const language = LANGUAGE_RUST;
 // TODO: Support this
 export const supportsLockFileMaintenance = false;
 
diff --git a/lib/manager/circleci/index.ts b/lib/manager/circleci/index.ts
index 5705105fe4b3fc5c6ffd85e4a307850d0b81f0a3..fd8a85a4bc28316924dbfb1eca8b3fdc35d2b4c9 100644
--- a/lib/manager/circleci/index.ts
+++ b/lib/manager/circleci/index.ts
@@ -1,6 +1,7 @@
 import { extractPackageFile } from './extract';
 import { updateDependency } from './update';
+import { LANGUAGE_DOCKER } from '../../constants/languages';
 
-const language = 'docker';
+const language = LANGUAGE_DOCKER;
 
 export { extractPackageFile, language, updateDependency };
diff --git a/lib/manager/composer/index.ts b/lib/manager/composer/index.ts
index 7bd3bf71b41d702d18951972dbf7da86ec85ab69..4da24f5413f7dab04bcd7f7235f3559811e22e75 100644
--- a/lib/manager/composer/index.ts
+++ b/lib/manager/composer/index.ts
@@ -2,8 +2,9 @@ import { extractPackageFile } from './extract';
 import { updateDependency } from '../npm/update';
 import { updateArtifacts } from './artifacts';
 import { getRangeStrategy } from './range';
+import { LANGUAGE_PHP } from '../../constants/languages';
 
-const language = 'php';
+const language = LANGUAGE_PHP;
 export const supportsLockFileMaintenance = true;
 
 export {
diff --git a/lib/manager/docker-compose/index.ts b/lib/manager/docker-compose/index.ts
index 5705105fe4b3fc5c6ffd85e4a307850d0b81f0a3..fd8a85a4bc28316924dbfb1eca8b3fdc35d2b4c9 100644
--- a/lib/manager/docker-compose/index.ts
+++ b/lib/manager/docker-compose/index.ts
@@ -1,6 +1,7 @@
 import { extractPackageFile } from './extract';
 import { updateDependency } from './update';
+import { LANGUAGE_DOCKER } from '../../constants/languages';
 
-const language = 'docker';
+const language = LANGUAGE_DOCKER;
 
 export { extractPackageFile, language, updateDependency };
diff --git a/lib/manager/dockerfile/index.ts b/lib/manager/dockerfile/index.ts
index 5705105fe4b3fc5c6ffd85e4a307850d0b81f0a3..fd8a85a4bc28316924dbfb1eca8b3fdc35d2b4c9 100644
--- a/lib/manager/dockerfile/index.ts
+++ b/lib/manager/dockerfile/index.ts
@@ -1,6 +1,7 @@
 import { extractPackageFile } from './extract';
 import { updateDependency } from './update';
+import { LANGUAGE_DOCKER } from '../../constants/languages';
 
-const language = 'docker';
+const language = LANGUAGE_DOCKER;
 
 export { extractPackageFile, language, updateDependency };
diff --git a/lib/manager/droneci/index.ts b/lib/manager/droneci/index.ts
index 5705105fe4b3fc5c6ffd85e4a307850d0b81f0a3..fd8a85a4bc28316924dbfb1eca8b3fdc35d2b4c9 100644
--- a/lib/manager/droneci/index.ts
+++ b/lib/manager/droneci/index.ts
@@ -1,6 +1,7 @@
 import { extractPackageFile } from './extract';
 import { updateDependency } from './update';
+import { LANGUAGE_DOCKER } from '../../constants/languages';
 
-const language = 'docker';
+const language = LANGUAGE_DOCKER;
 
 export { extractPackageFile, language, updateDependency };
diff --git a/lib/manager/github-actions/index.ts b/lib/manager/github-actions/index.ts
index 5705105fe4b3fc5c6ffd85e4a307850d0b81f0a3..fd8a85a4bc28316924dbfb1eca8b3fdc35d2b4c9 100644
--- a/lib/manager/github-actions/index.ts
+++ b/lib/manager/github-actions/index.ts
@@ -1,6 +1,7 @@
 import { extractPackageFile } from './extract';
 import { updateDependency } from './update';
+import { LANGUAGE_DOCKER } from '../../constants/languages';
 
-const language = 'docker';
+const language = LANGUAGE_DOCKER;
 
 export { extractPackageFile, language, updateDependency };
diff --git a/lib/manager/gitlabci/index.ts b/lib/manager/gitlabci/index.ts
index 5705105fe4b3fc5c6ffd85e4a307850d0b81f0a3..fd8a85a4bc28316924dbfb1eca8b3fdc35d2b4c9 100644
--- a/lib/manager/gitlabci/index.ts
+++ b/lib/manager/gitlabci/index.ts
@@ -1,6 +1,7 @@
 import { extractPackageFile } from './extract';
 import { updateDependency } from './update';
+import { LANGUAGE_DOCKER } from '../../constants/languages';
 
-const language = 'docker';
+const language = LANGUAGE_DOCKER;
 
 export { extractPackageFile, language, updateDependency };
diff --git a/lib/manager/gomod/index.ts b/lib/manager/gomod/index.ts
index 6636c89068c943da7b01953eb77b21dfa2695df4..0c057325c25f8140c3645935015c8cc2f97d998d 100644
--- a/lib/manager/gomod/index.ts
+++ b/lib/manager/gomod/index.ts
@@ -1,6 +1,7 @@
 import { extractPackageFile } from './extract';
 import { updateDependency } from './update';
 import { updateArtifacts } from './artifacts';
+import { LANGUAGE_GOLANG } from '../../constants/languages';
 
-export const language = 'golang';
+export const language = LANGUAGE_GOLANG;
 export { extractPackageFile, updateDependency, updateArtifacts };
diff --git a/lib/manager/gradle/index.ts b/lib/manager/gradle/index.ts
index e9a4d3ea269dfed9a66da9100ce8a811822b9bbe..b6acbf586291544bd7d97d0f416318042daf230f 100644
--- a/lib/manager/gradle/index.ts
+++ b/lib/manager/gradle/index.ts
@@ -17,6 +17,7 @@ import {
 } from './gradle-updates-report';
 import { PackageFile, ExtractConfig, Upgrade } from '../common';
 import { platform } from '../../platform';
+import { LANGUAGE_JAVA } from '../../constants/languages';
 import { MANAGER_GRADLE } from '../../constants/managers';
 import {
   BINARY_SOURCE_DOCKER,
@@ -178,4 +179,4 @@ export function updateDependency(
   );
 }
 
-export const language = 'java';
+export const language = LANGUAGE_JAVA;
diff --git a/lib/manager/index.ts b/lib/manager/index.ts
index f32ed44a281b5a0badfe07b319b89dee06c0766e..a1d874a7753fabb4c3944b357550c47d3b52b1a2 100644
--- a/lib/manager/index.ts
+++ b/lib/manager/index.ts
@@ -8,6 +8,19 @@ import {
   PackageUpdateResult,
 } from './common';
 import { RangeStrategy } from '../versioning';
+import {
+  LANGUAGE_DART,
+  LANGUAGE_DOCKER,
+  LANGUAGE_DOT_NET,
+  LANGUAGE_ELIXIR,
+  LANGUAGE_GOLANG,
+  LANGUAGE_JAVASCRIPT,
+  LANGUAGE_NODE,
+  LANGUAGE_PHP,
+  LANGUAGE_PYTHON,
+  LANGUAGE_RUBY,
+  LANGUAGE_RUST,
+} from '../constants/languages';
 import {
   MANAGER_ANSIBLE,
   MANAGER_BAZEL,
@@ -96,17 +109,17 @@ for (const manager of managerList) {
 }
 
 const languageList = [
-  'dart',
-  'docker',
-  'dotnet',
-  'elixir',
-  'golang',
-  'js',
-  'node',
-  'php',
-  'python',
-  'ruby',
-  'rust',
+  LANGUAGE_DART,
+  LANGUAGE_DOCKER,
+  LANGUAGE_DOT_NET,
+  LANGUAGE_ELIXIR,
+  LANGUAGE_GOLANG,
+  LANGUAGE_JAVASCRIPT,
+  LANGUAGE_NODE,
+  LANGUAGE_PHP,
+  LANGUAGE_PYTHON,
+  LANGUAGE_RUBY,
+  LANGUAGE_RUST,
 ];
 
 export const get = <T extends keyof ManagerApi>(
diff --git a/lib/manager/kubernetes/index.ts b/lib/manager/kubernetes/index.ts
index c356e13fd898b905f8f07f0aa9cd9362dd6be94d..2fa3dba3b3a9af38b5dd6ebec777db8a459532ac 100644
--- a/lib/manager/kubernetes/index.ts
+++ b/lib/manager/kubernetes/index.ts
@@ -1,4 +1,6 @@
+import { LANGUAGE_DOCKER } from '../../constants/languages';
+
 export { extractPackageFile } from './extract';
 export { updateDependency } from './update';
 
-export const language = 'docker';
+export const language = LANGUAGE_DOCKER;
diff --git a/lib/manager/maven/index.ts b/lib/manager/maven/index.ts
index 683d30f630ee84659c533e4f1acbb006f17133e1..f66ffe8b6f16f8a3b08970641d97243c69f74761 100644
--- a/lib/manager/maven/index.ts
+++ b/lib/manager/maven/index.ts
@@ -1,4 +1,6 @@
+import { LANGUAGE_JAVA } from '../../constants/languages';
+
 export { extractAllPackageFiles } from './extract';
 export { updateDependency } from './update';
 
-export const language = 'java';
+export const language = LANGUAGE_JAVA;
diff --git a/lib/manager/meteor/index.ts b/lib/manager/meteor/index.ts
index 8704d70aec4af354e7d4b8836b7c099379c77257..d98321add2e30d28e41a7907ac89c2beff055d0b 100644
--- a/lib/manager/meteor/index.ts
+++ b/lib/manager/meteor/index.ts
@@ -1,4 +1,6 @@
+import { LANGUAGE_JAVASCRIPT } from '../../constants/languages';
+
 export { extractPackageFile } from './extract';
 export { updateDependency } from './update';
 
-export const language = 'js';
+export const language = LANGUAGE_JAVASCRIPT;
diff --git a/lib/manager/mix/index.ts b/lib/manager/mix/index.ts
index ed11a06c48731efd6b8dbdcc360e6f9d8bb108fe..74daad63071b37144eeb70439c09b287779f5143 100644
--- a/lib/manager/mix/index.ts
+++ b/lib/manager/mix/index.ts
@@ -1,5 +1,7 @@
+import { LANGUAGE_ELIXIR } from '../../constants/languages';
+
 export { extractPackageFile } from './extract';
 export { updateDependency } from './update';
 export { updateArtifacts } from './artifacts';
 
-export const language = 'elixir';
+export const language = LANGUAGE_ELIXIR;
diff --git a/lib/manager/npm/index.ts b/lib/manager/npm/index.ts
index 77f6c1cec305cacf25d2c1863a582cea9f663c9e..4a720f6ace6403907d02ba6812fe605507de0606 100644
--- a/lib/manager/npm/index.ts
+++ b/lib/manager/npm/index.ts
@@ -1,6 +1,8 @@
+import { LANGUAGE_JAVASCRIPT } from '../../constants/languages';
+
 export { extractAllPackageFiles } from './extract';
 export { updateDependency } from './update';
 export { getRangeStrategy } from './range';
 
-export const language = 'js';
+export const language = LANGUAGE_JAVASCRIPT;
 export const supportsLockFileMaintenance = true;
diff --git a/lib/manager/nuget/index.ts b/lib/manager/nuget/index.ts
index 721267a6f9cae10881109d471363f1aefc1ec3fa..2247443f31cfec6f9d035fb429621a72dd9b1a54 100644
--- a/lib/manager/nuget/index.ts
+++ b/lib/manager/nuget/index.ts
@@ -1,4 +1,6 @@
+import { LANGUAGE_DOT_NET } from '../../constants/languages';
+
 export { extractPackageFile } from './extract';
 export { updateDependency } from './update';
 
-export const language = 'dotnet';
+export const language = LANGUAGE_DOT_NET;
diff --git a/lib/manager/nvm/index.ts b/lib/manager/nvm/index.ts
index e5ce4fd8d10ac0455b7de9dff4a1e96fb624fb5f..5a1a44228c0ef3cbd2a264e8927428ed88953c8b 100644
--- a/lib/manager/nvm/index.ts
+++ b/lib/manager/nvm/index.ts
@@ -1,4 +1,6 @@
+import { LANGUAGE_NODE } from '../../constants/languages';
+
 export { extractPackageFile } from './extract';
 export { updateDependency } from './update';
 
-export const language = 'node';
+export const language = LANGUAGE_NODE;
diff --git a/lib/manager/pip_requirements/index.ts b/lib/manager/pip_requirements/index.ts
index 4737e5fb3745bb06a14167c5aec73a45e3ce0444..e4f823e0cb9f61b548d94c3ef7362e953d3646b2 100644
--- a/lib/manager/pip_requirements/index.ts
+++ b/lib/manager/pip_requirements/index.ts
@@ -1,5 +1,7 @@
+import { LANGUAGE_PYTHON } from '../../constants/languages';
+
 export { extractPackageFile } from './extract';
 export { updateDependency } from './update';
 export { getRangeStrategy } from './range';
 
-export const language = 'python';
+export const language = LANGUAGE_PYTHON;
diff --git a/lib/manager/pip_setup/index.ts b/lib/manager/pip_setup/index.ts
index 816d4c0336b38314f237d5f222b339fc27b8eb05..c7d178c520ba034681f0bbff255fa15c5aee598b 100644
--- a/lib/manager/pip_setup/index.ts
+++ b/lib/manager/pip_setup/index.ts
@@ -1,4 +1,6 @@
+import { LANGUAGE_PYTHON } from '../../constants/languages';
+
 export { extractPackageFile } from './extract';
 export { updateDependency } from '../pip_requirements/update';
 
-export const language = 'python';
+export const language = LANGUAGE_PYTHON;
diff --git a/lib/manager/pipenv/index.ts b/lib/manager/pipenv/index.ts
index 29e3d697e21f093db11a549556a2c568b1ad1d9c..0141fb6fcc4dad021e7927a3274031de845137e1 100644
--- a/lib/manager/pipenv/index.ts
+++ b/lib/manager/pipenv/index.ts
@@ -1,5 +1,7 @@
+import { LANGUAGE_PYTHON } from '../../constants/languages';
+
 export { extractPackageFile } from './extract';
 export { updateDependency } from './update';
 export { updateArtifacts } from './artifacts';
 
-export const language = 'python';
+export const language = LANGUAGE_PYTHON;
diff --git a/lib/manager/poetry/index.ts b/lib/manager/poetry/index.ts
index 62e8aafece55f975fffabd4264350ffbaabcee61..d5d3b9c9a8c6ff020de4d6ace8cc5c5593ff3e6c 100644
--- a/lib/manager/poetry/index.ts
+++ b/lib/manager/poetry/index.ts
@@ -1,6 +1,8 @@
+import { LANGUAGE_PYTHON } from '../../constants/languages';
+
 export { extractPackageFile } from './extract';
 export { updateDependency } from './update';
 export { updateArtifacts } from './artifacts';
 
-export const language = 'python';
+export const language = LANGUAGE_PYTHON;
 export const supportsLockFileMaintenance = false;
diff --git a/lib/manager/ruby-version/index.ts b/lib/manager/ruby-version/index.ts
index 3c09a2db01cf681112a02f94a94bf95c5f17b0c7..8903806a3864f7c422b04cd08357f70141cefc0c 100644
--- a/lib/manager/ruby-version/index.ts
+++ b/lib/manager/ruby-version/index.ts
@@ -1,4 +1,6 @@
+import { LANGUAGE_RUBY } from '../../constants/languages';
+
 export { extractPackageFile } from './extract';
 export { updateDependency } from './update';
 
-export const language = 'ruby';
+export const language = LANGUAGE_RUBY;
diff --git a/lib/manager/travis/index.ts b/lib/manager/travis/index.ts
index 91796056c605fd2c5cb365f4c2b6986bec1c04c5..1dd505999ca63cf474924f9665fd24bbc5856bcd 100644
--- a/lib/manager/travis/index.ts
+++ b/lib/manager/travis/index.ts
@@ -1,5 +1,7 @@
+import { LANGUAGE_NODE } from '../../constants/languages';
+
 export { extractPackageFile } from './extract';
 export { getPackageUpdates } from './package';
 export { updateDependency } from './update';
 
-export const language = 'node';
+export const language = LANGUAGE_NODE;
diff --git a/lib/workers/repository/updates/flatten.ts b/lib/workers/repository/updates/flatten.ts
index 83d12cbacf0011dfe88268c2eb12bc4c16e535e1..10b96e11219577b46996e4835c6bd6dbe28fe73a 100644
--- a/lib/workers/repository/updates/flatten.ts
+++ b/lib/workers/repository/updates/flatten.ts
@@ -8,6 +8,7 @@ import {
 } from '../../../config';
 import { applyPackageRules } from '../../../util/package-rules';
 import { get } from '../../../manager';
+import { LANGUAGE_DOCKER } from '../../../constants/languages';
 
 // Return only rules that contain an updateType
 function getUpdateTypeRules(packageRules: PackageRule[]): PackageRule[] {
@@ -63,7 +64,7 @@ export function flattenUpdates(
                   .toLowerCase()
               : undefined;
             if (
-              updateConfig.language === 'docker' &&
+              updateConfig.language === LANGUAGE_DOCKER &&
               updateConfig.depName.match(/(^|\/)node$/) &&
               updateConfig.depName !== 'calico/node'
             ) {
diff --git a/test/util/package-rules.spec.ts b/test/util/package-rules.spec.ts
index 7dfea634b15ad330b9993832c1e16c92c26aae59..e12a562f281d6a1dc7ccf9cd65abf64c2a8e479f 100644
--- a/test/util/package-rules.spec.ts
+++ b/test/util/package-rules.spec.ts
@@ -1,5 +1,11 @@
 import { applyPackageRules, Config } from '../../lib/util/package-rules';
 import { UpdateType } from '../../lib/config';
+import {
+  LANGUAGE_DOCKER,
+  LANGUAGE_JAVASCRIPT,
+  LANGUAGE_NODE,
+  LANGUAGE_PYTHON,
+} from '../../lib/constants/languages';
 import {
   MANAGER_DOCKERFILE,
   MANAGER_METEOR,
@@ -195,7 +201,7 @@ describe('applyPackageRules()', () => {
     };
     const dep = {
       depType: 'dependencies',
-      language: 'js',
+      language: LANGUAGE_JAVASCRIPT,
       manager: MANAGER_METEOR,
       depName: 'node',
     };
@@ -214,7 +220,7 @@ describe('applyPackageRules()', () => {
     };
     const dep = {
       depType: 'dependencies',
-      language: 'python',
+      language: LANGUAGE_PYTHON,
       manager: MANAGER_PIPENV,
       depName: 'node',
     };
@@ -225,7 +231,7 @@ describe('applyPackageRules()', () => {
     const config: TestConfig = {
       packageRules: [
         {
-          languages: ['js', 'node'],
+          languages: [LANGUAGE_JAVASCRIPT, LANGUAGE_NODE],
           packageNames: ['node'],
           x: 1,
         },
@@ -233,7 +239,7 @@ describe('applyPackageRules()', () => {
     };
     const dep = {
       depType: 'dependencies',
-      language: 'js',
+      language: LANGUAGE_JAVASCRIPT,
       manager: MANAGER_METEOR,
       depName: 'node',
     };
@@ -244,7 +250,7 @@ describe('applyPackageRules()', () => {
     const config: TestConfig = {
       packageRules: [
         {
-          languages: ['docker'],
+          languages: [LANGUAGE_DOCKER],
           packageNames: ['node'],
           x: 1,
         },
@@ -252,7 +258,7 @@ describe('applyPackageRules()', () => {
     };
     const dep = {
       depType: 'dependencies',
-      language: 'python',
+      language: LANGUAGE_PYTHON,
       manager: MANAGER_PIPENV,
       depName: 'node',
     };
diff --git a/test/workers/repository/updates/flatten.spec.ts b/test/workers/repository/updates/flatten.spec.ts
index 8d8a66346e4352a8553796d1615da45ad3e455b3..e799e68564522427cc52ede1b1b0e35a2856316c 100644
--- a/test/workers/repository/updates/flatten.spec.ts
+++ b/test/workers/repository/updates/flatten.spec.ts
@@ -1,6 +1,7 @@
 import { RenovateConfig, getConfig } from '../../../util';
 
 import { flattenUpdates } from '../../../../lib/workers/repository/updates/flatten';
+import { LANGUAGE_DOCKER } from '../../../../lib/constants/languages';
 
 let config: RenovateConfig;
 beforeEach(() => {
@@ -54,7 +55,7 @@ describe('workers/repository/updates/flatten', () => {
             deps: [
               {
                 depName: 'amd64/node',
-                language: 'docker',
+                language: LANGUAGE_DOCKER,
                 updates: [{ newValue: '10.0.1' }],
               },
             ],
@@ -64,7 +65,7 @@ describe('workers/repository/updates/flatten', () => {
             deps: [
               {
                 depName: 'calico/node',
-                language: 'docker',
+                language: LANGUAGE_DOCKER,
                 updates: [{ newValue: '3.2.0' }],
               },
             ],