diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index 2ec3dbb7e465d4877684c611762d2b069ef7cf29..e0ab85a21d5b2dcc0f92300b7b65f9c1d1253032 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -854,6 +854,14 @@ const options = [
     cli: false,
     env: false,
   },
+  {
+    name: 'js',
+    description: 'Configuration object for javascript language',
+    stage: 'package',
+    type: 'json',
+    default: {},
+    mergeable: true,
+  },
   {
     name: 'npm',
     description: 'Configuration object for npm package.json renovation',
diff --git a/lib/manager/meteor/index.js b/lib/manager/meteor/index.js
index 75e547b3e95e82ee0a49b0aeeb8c5d9d47c8b332..8a69b16baab242e2db6048f3100961372ba7bef0 100644
--- a/lib/manager/meteor/index.js
+++ b/lib/manager/meteor/index.js
@@ -3,5 +3,6 @@ const { updateDependency } = require('./update');
 
 module.exports = {
   extractDependencies,
+  language: 'js',
   updateDependency,
 };
diff --git a/lib/manager/npm/index.js b/lib/manager/npm/index.js
index 79e23f9fdcc3550d66880369d8622a7f13a52232..3c8a8bf34e6c625bf5baef2984d76118451f2794 100644
--- a/lib/manager/npm/index.js
+++ b/lib/manager/npm/index.js
@@ -4,6 +4,7 @@ const { getRangeStrategy } = require('./range');
 
 module.exports = {
   extractDependencies,
+  language: 'js',
   postExtract,
   getRangeStrategy,
   updateDependency,
diff --git a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
index dd8883cb0571a2ee29dab0fd8951a09679513931..49ecb721492f6381c15085c67a22f93cdc426bf6 100644
--- a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
+++ b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
@@ -31,6 +31,7 @@ Array [
     "groupName": null,
     "groupSlug": null,
     "labels": Array [],
+    "language": "js",
     "lazyGrouping": true,
     "manager": "npm",
     "managerBranchPrefix": "",
@@ -89,6 +90,7 @@ Array [
     "groupName": null,
     "groupSlug": null,
     "labels": Array [],
+    "language": "js",
     "lazyGrouping": true,
     "manager": "npm",
     "managerBranchPrefix": "",
@@ -146,6 +148,7 @@ Array [
     "groupName": null,
     "groupSlug": null,
     "labels": Array [],
+    "language": "js",
     "lazyGrouping": true,
     "lockFileMaintenance": Object {
       "branchTopic": "lock-file-maintenance",
diff --git a/website/docs/configuration-options.md b/website/docs/configuration-options.md
index 8739e891eb222f8412891fd725104f77140e6150..12a309dfcf4b5ecefd7bd3b334f3d8e1ba0903da 100644
--- a/website/docs/configuration-options.md
+++ b/website/docs/configuration-options.md
@@ -250,6 +250,10 @@ If you wish for Renovate to process only select paths in the repository, use `in
 If instead you need to just exclude/ignore certain paths then consider `ignorePaths` instead.
 If you are more interested in including only certain package managers (e.g. `npm`), then consider `enabledManagers` instead.
 
+## js
+
+Use this configuration option for shared config across npm/yarn/pnpm and meteor package managers.
+
 ## labels
 
 Add an array of 1 or more strings to `labels` and Renovate will apply these labels to any PR its created. Usually these will be a per-repository setting like "renovate", or "ready", or "dependencies", however you can configure them right down to per-package level.