diff --git a/package-lock.json b/package-lock.json
index 3687566ba..402edf00b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -196,9 +196,9 @@
       "dev": true
     },
     "ajv": {
-      "version": "6.12.2",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
-      "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+      "version": "6.12.3",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
+      "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
       "dev": true,
       "requires": {
         "fast-deep-equal": "^3.1.1",
@@ -214,9 +214,9 @@
       "dev": true
     },
     "ajv-keywords": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.0.tgz",
-      "integrity": "sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.1.tgz",
+      "integrity": "sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA==",
       "dev": true
     },
     "ansi-regex": {
@@ -773,9 +773,9 @@
       }
     },
     "codemirror": {
-      "version": "5.55.0",
-      "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.55.0.tgz",
-      "integrity": "sha512-TumikSANlwiGkdF/Blnu/rqovZ0Y3Jh8yy9TqrPbSM0xxSucq3RgnpVDQ+mD9q6JERJEIT2FMuF/fBGfkhIR/g=="
+      "version": "5.56.0",
+      "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.56.0.tgz",
+      "integrity": "sha512-MfKVmYgifXjQpLSgpETuih7A7WTTIsxvKfSLGseTY5+qt0E1UD1wblZGM6WLenORo8sgmf+3X+WTe2WF7mufyw=="
     },
     "collection-visit": {
       "version": "1.0.0",
@@ -1077,9 +1077,9 @@
       "dev": true
     },
     "dropzone": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/dropzone/-/dropzone-5.7.1.tgz",
-      "integrity": "sha512-eqcJafupMKRlVUihZtsLkzLn02WTPUMHeImP5ZtWm3ERObC/dv15te0qqn/X2rEKaSqRC0pNTHUBPgrPWcP52w=="
+      "version": "5.7.2",
+      "resolved": "https://registry.npmjs.org/dropzone/-/dropzone-5.7.2.tgz",
+      "integrity": "sha512-m217bJHtf0J1IiKn4Tv6mnu1h5QvQNBnKZ39gma7hzGQhIZMxYq1vYEHs4AVd4ThFwmALys+52NAOD4zdLTG4w=="
     },
     "duplexify": {
       "version": "3.7.1",
@@ -1239,9 +1239,9 @@
       "dev": true
     },
     "events": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
-      "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
+      "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
       "dev": true
     },
     "evp_bytestokey": {
@@ -2406,9 +2406,9 @@
       }
     },
     "neo-async": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
-      "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
       "dev": true
     },
     "nice-try": {
@@ -3055,9 +3055,9 @@
       }
     },
     "sass": {
-      "version": "1.26.9",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.9.tgz",
-      "integrity": "sha512-t8AkRVi+xvba4yZiLWkJdgJHBFCB3Dh4johniQkPy9ywkgFHNasXFEFP+RG/F6LhQ+aoE4aX+IorIWQjS0esVw==",
+      "version": "1.26.10",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz",
+      "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==",
       "dev": true,
       "requires": {
         "chokidar": ">=2.0.0 <4.0.0"
@@ -3796,27 +3796,22 @@
       "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
       "dev": true
     },
-    "vue": {
-      "version": "2.6.11",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz",
-      "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ=="
-    },
     "watchpack": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz",
-      "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==",
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz",
+      "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==",
       "dev": true,
       "requires": {
-        "chokidar": "^3.4.0",
+        "chokidar": "^3.4.1",
         "graceful-fs": "^4.1.2",
         "neo-async": "^2.5.0",
         "watchpack-chokidar2": "^2.0.0"
       },
       "dependencies": {
         "chokidar": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz",
-          "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==",
+          "version": "3.4.1",
+          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz",
+          "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==",
           "dev": true,
           "optional": true,
           "requires": {
@@ -4031,9 +4026,9 @@
       }
     },
     "webpack": {
-      "version": "4.43.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz",
-      "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==",
+      "version": "4.44.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.0.tgz",
+      "integrity": "sha512-wAuJxK123sqAw31SpkPiPW3iKHgFUiKvO7E7UZjtdExcsRe3fgav4mvoMM7vvpjLHVoJ6a0Mtp2fzkoA13e0Zw==",
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.9.0",
@@ -4044,7 +4039,7 @@
         "ajv": "^6.10.2",
         "ajv-keywords": "^3.4.1",
         "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^4.1.0",
+        "enhanced-resolve": "^4.3.0",
         "eslint-scope": "^4.0.3",
         "json-parse-better-errors": "^1.0.2",
         "loader-runner": "^2.4.0",
@@ -4057,8 +4052,33 @@
         "schema-utils": "^1.0.0",
         "tapable": "^1.1.3",
         "terser-webpack-plugin": "^1.4.3",
-        "watchpack": "^1.6.1",
+        "watchpack": "^1.7.4",
         "webpack-sources": "^1.4.1"
+      },
+      "dependencies": {
+        "enhanced-resolve": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz",
+          "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "memory-fs": "^0.5.0",
+            "tapable": "^1.0.0"
+          },
+          "dependencies": {
+            "memory-fs": {
+              "version": "0.5.0",
+              "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+              "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+              "dev": true,
+              "requires": {
+                "errno": "^0.1.3",
+                "readable-stream": "^2.0.1"
+              }
+            }
+          }
+        }
       }
     },
     "webpack-cli": {
diff --git a/package.json b/package.json
index 0f1855cd9..387f20ff7 100644
--- a/package.json
+++ b/package.json
@@ -17,20 +17,16 @@
   "devDependencies": {
     "livereload": "^0.9.1",
     "npm-run-all": "^4.1.5",
-    "sass": "^1.26.9",
-    "webpack": "^4.43.0",
+    "sass": "^1.26.10",
+    "webpack": "^4.44.0",
     "webpack-cli": "^3.3.12"
   },
   "dependencies": {
     "clipboard": "^2.0.6",
-    "codemirror": "^5.55.0",
-    "dropzone": "^5.7.1",
+    "codemirror": "^5.56.0",
+    "dropzone": "^5.7.2",
     "markdown-it": "^11.0.0",
     "markdown-it-task-lists": "^2.1.1",
-    "sortablejs": "^1.10.2",
-    "vue": "^2.6.11"
-  },
-  "browser": {
-    "vue": "vue/dist/vue.common.js"
+    "sortablejs": "^1.10.2"
   }
 }
diff --git a/readme.md b/readme.md
index c6db7a8e4..75c67b25f 100644
--- a/readme.md
+++ b/readme.md
@@ -157,7 +157,6 @@ These are the great open-source projects used to help build BookStack:
 * [Laravel](http://laravel.com/)
 * [TinyMCE](https://www.tinymce.com/)
 * [CodeMirror](https://codemirror.net)
-* [Vue.js](http://vuejs.org/)
 * [Sortable](https://github.com/SortableJS/Sortable)
 * [Google Material Icons](https://material.io/icons/)
 * [Dropzone.js](http://www.dropzonejs.com/)
diff --git a/resources/js/index.js b/resources/js/index.js
index e0c7b34e5..913313603 100644
--- a/resources/js/index.js
+++ b/resources/js/index.js
@@ -20,13 +20,6 @@ const translator = new Translations();
 window.trans = translator.get.bind(translator);
 window.trans_choice = translator.getPlural.bind(translator);
 
-// Make services available to Vue instances
-import Vue from "vue"
-Vue.prototype.$http = httpInstance;
-Vue.prototype.$events = eventManager;
-
-// Load Vues and components
-import vues from "./vues/vues"
+// Load Components
 import components from "./components"
-vues();
 components();
\ No newline at end of file
diff --git a/resources/js/vues/components/dropzone.js b/resources/js/vues/components/dropzone.js
deleted file mode 100644
index 1c045727f..000000000
--- a/resources/js/vues/components/dropzone.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import DropZone from "dropzone";
-import { fadeOut } from "../../services/animations";
-
-const template = `
-    <div class="dropzone-container text-center">
-        <button type="button" class="dz-message">{{placeholder}}</button>
-    </div>
-`;
-
-const props = ['placeholder', 'uploadUrl', 'uploadedTo'];
-
-function mounted() {
-   const container = this.$el;
-   const _this = this;
-   this._dz = new DropZone(container, {
-        addRemoveLinks: true,
-        dictRemoveFile: trans('components.image_upload_remove'),
-        timeout: Number(window.uploadTimeout) || 60000,
-        maxFilesize: Number(window.uploadLimit) || 256,
-        url: function() {
-            return _this.uploadUrl;
-        },
-        init: function () {
-            const dz = this;
-
-            dz.on('sending', function (file, xhr, data) {
-                const token = window.document.querySelector('meta[name=token]').getAttribute('content');
-                data.append('_token', token);
-                const uploadedTo = typeof _this.uploadedTo === 'undefined' ? 0 : _this.uploadedTo;
-                data.append('uploaded_to', uploadedTo);
-
-                xhr.ontimeout = function (e) {
-                    dz.emit('complete', file);
-                    dz.emit('error', file, trans('errors.file_upload_timeout'));
-                }
-            });
-
-            dz.on('success', function (file, data) {
-                _this.$emit('success', {file, data});
-                fadeOut(file.previewElement, 800, () => {
-                    dz.removeFile(file);
-                });
-            });
-
-            dz.on('error', function (file, errorMessage, xhr) {
-                _this.$emit('error', {file, errorMessage, xhr});
-
-                function setMessage(message) {
-                    const messsageEl = file.previewElement.querySelector('[data-dz-errormessage]');
-                    messsageEl.textContent = message;
-                }
-
-                if (xhr && xhr.status === 413) {
-                    setMessage(trans('errors.server_upload_limit'))
-                } else if (errorMessage.file) {
-                    setMessage(errorMessage.file);
-                }
-
-            });
-        }
-   });
-}
-
-function data() {
-    return {};
-}
-
-const methods = {
-    onClose: function () {
-        this._dz.removeAllFiles(true);
-    }
-};
-
-export default {
-    template,
-    props,
-    mounted,
-    data,
-    methods
-};
diff --git a/resources/js/vues/vues.js b/resources/js/vues/vues.js
deleted file mode 100644
index d4bd88a52..000000000
--- a/resources/js/vues/vues.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import Vue from "vue";
-
-function exists(id) {
-    return document.getElementById(id) !== null;
-}
-
-let vueMapping = {
-};
-
-window.vues = {};
-
-function load() {
-    let ids = Object.keys(vueMapping);
-    for (let i = 0, len = ids.length; i < len; i++) {
-        if (!exists(ids[i])) continue;
-        let config = vueMapping[ids[i]];
-        config.el = '#' + ids[i];
-        window.vues[ids[i]] = new Vue(config);
-    }
-}
-
-export default load;
-
-
-