diff --git a/core/webpack.test.js b/core/webpack.test.js
index 024348fe8791e7518ea64e71a8be04d5834a16ba..f87d8bd9d92d80879c7ad85d5739020b8c5333d6 100644
--- a/core/webpack.test.js
+++ b/core/webpack.test.js
@@ -1,4 +1,4 @@
-/*
+/**
  * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>
  *
  * @author 2018 Christoph Wurst <christoph@winzerhof-wurst.at>
@@ -19,7 +19,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-const merge = require('webpack-merge');
+const { merge } = require('webpack-merge');
 const common = require('./webpack.js');
 // webpack.config.js
 const nodeExternals = require('webpack-node-externals')
diff --git a/package-lock.json b/package-lock.json
index 76050955afe2b4bb3893df0be0c1ef9e393d686a..768e80e747de3ef43427606546ec3df35a5ecd75 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5746,6 +5746,17 @@
         "wrap-ansi": "^5.1.0"
       }
     },
+    "clone-deep": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+      "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+      "dev": true,
+      "requires": {
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.2",
+        "shallow-clone": "^3.0.0"
+      }
+    },
     "code-point-at": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
@@ -11848,6 +11859,15 @@
         "safe-buffer": "^5.0.1"
       }
     },
+    "shallow-clone": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+      "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+      "dev": true,
+      "requires": {
+        "kind-of": "^6.0.2"
+      }
+    },
     "shebang-command": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -13469,12 +13489,13 @@
       }
     },
     "webpack-merge": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz",
-      "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==",
+      "version": "5.0.9",
+      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.0.9.tgz",
+      "integrity": "sha512-P4teh6O26xIDPugOGX61wPxaeP918QOMjmzhu54zTVcLtOS28ffPWtnv+ilt3wscwBUCL2WNMnh97XkrKqt9Fw==",
       "dev": true,
       "requires": {
-        "lodash": "^4.17.15"
+        "clone-deep": "^4.0.1",
+        "wildcard": "^2.0.0"
       }
     },
     "webpack-node-externals": {
@@ -13577,6 +13598,12 @@
         }
       }
     },
+    "wildcard": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
+      "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
+      "dev": true
+    },
     "word-wrap": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
diff --git a/package.json b/package.json
index 6e24895c93c518e1d9b2e7695702ab6e8bdc5ffd..0d4906b3f964faa543aaee64f8e00e43d30adf2e 100644
--- a/package.json
+++ b/package.json
@@ -120,7 +120,7 @@
     "vue-template-compiler": "^2.6.11",
     "webpack": "^4.43.0",
     "webpack-cli": "^3.3.12",
-    "webpack-merge": "^4.2.2",
+    "webpack-merge": "^5.0.9",
     "webpack-node-externals": "^1.7.2"
   },
   "browserslist": [
diff --git a/webpack.common.js b/webpack.common.js
index d03617d77d83b299445d1a241b2fc8e3631bc6c0..b7aeb7193d659fd7a16506df53450133bd0e1853 100644
--- a/webpack.common.js
+++ b/webpack.common.js
@@ -1,6 +1,6 @@
 /* eslint-disable camelcase */
 const path = require('path')
-const merge = require('webpack-merge')
+const { merge } = require('webpack-merge')
 const { VueLoaderPlugin } = require('vue-loader')
 
 const accessibility = require('./apps/accessibility/webpack')
@@ -50,16 +50,16 @@ module.exports = []
 	.concat(
 		...modulesToBuild()
 	)
-	.map(config => merge.smart({
+	.map(config => merge({
 		module: {
 			rules: [
 				{
 					test: /\.css$/,
-					use: ['vue-style-loader', 'css-loader']
+					use: ['vue-style-loader', 'css-loader'],
 				},
 				{
 					test: /\.scss$/,
-					use: ['vue-style-loader', 'css-loader', 'sass-loader']
+					use: ['vue-style-loader', 'css-loader', 'sass-loader'],
 				},
 				{
 					test: /\.(js|vue)$/,
@@ -72,38 +72,38 @@ module.exports = []
 						// don't want to parse all the js files so let's
 						// use it from within webpack and only check
 						// against our compiled files
-						fix: process.env.ESLINT_FIX === 'true'
-					}
+						fix: process.env.ESLINT_FIX === 'true',
+					},
 				},
 				{
 					test: /\.vue$/,
 					loader: 'vue-loader',
-					exclude: /node_modules/
+					exclude: /node_modules/,
 				},
 				{
 					test: /\.js$/,
 					loader: 'babel-loader',
 					// automatically detect necessary packages to
 					// transpile in the node_modules folder
-					exclude: /node_modules(?!(\/|\\)(nextcloud-vue-collections|p-finally|p-limit|p-locate|p-queue|p-timeout|p-try|toastify-js|v-tooltip)(\/|\\))/
+					exclude: /node_modules(?!(\/|\\)(nextcloud-vue-collections|p-finally|p-limit|p-locate|p-queue|p-timeout|p-try|toastify-js|v-tooltip)(\/|\\))/,
 				},
 				{
 					test: /\.(png|jpg|gif)$/,
 					loader: 'url-loader',
 					options: {
 						name: '[name].[ext]?[hash]',
-						limit: 8192
-					}
+						limit: 8192,
+					},
 				},
 				{
 					test: /\.handlebars/,
 					loader: 'handlebars-loader',
 					query: {
-						extensions: '.handlebars'
-					}
-				}
+						extensions: '.handlebars',
+					},
+				},
 
-			]
+			],
 		},
 		plugins: [new VueLoaderPlugin()],
 		resolve: {
@@ -111,9 +111,9 @@ module.exports = []
 				OC: path.resolve(__dirname, './core/src/OC'),
 				OCA: path.resolve(__dirname, './core/src/OCA'),
 				// make sure to use the handlebar runtime when importing
-				handlebars: 'handlebars/runtime'
+				handlebars: 'handlebars/runtime',
 			},
 			extensions: ['*', '.js', '.vue'],
-			symlinks: false
-		}
+			symlinks: false,
+		},
 	}, config))
diff --git a/webpack.dev.js b/webpack.dev.js
index 8de803b56831121ddac071a49e36f494983e5cef..95b82b823a417d39e7825b0e60d299b1a11ab976 100644
--- a/webpack.dev.js
+++ b/webpack.dev.js
@@ -1,4 +1,4 @@
-const merge = require('webpack-merge');
+const { merge } = require('webpack-merge');
 const common = require('./webpack.common.js');
 
 module.exports = common.map(
diff --git a/webpack.prod.js b/webpack.prod.js
index 02f21f80cedc644ddcf74b840e5d16a39c7d96cf..9a2477e7d701396bc2abd238857acc7166d95962 100644
--- a/webpack.prod.js
+++ b/webpack.prod.js
@@ -1,4 +1,4 @@
-const merge = require('webpack-merge')
+const { merge } = require('webpack-merge')
 const common = require('./webpack.common.js')
 const TerserPlugin = require('terser-webpack-plugin');