diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000000000000000000000000000000000000..68e724f6c0751675600c23ca3c70dd28bac7ce2a
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,3 @@
+node_modules/
+/dist
+/vendor
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..fecd75dc82be60e441465a1b88059c64b8622d71
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,16 @@
+{
+    "bracketSpacing": false,
+    "singleQuote": true,
+    "tabWidth": 4,
+    "printWidth": 100,
+    "bracketSameLine": true,
+    "htmlWhitespaceSensitivity": "ignore",
+    "overrides": [
+        {
+            "files": "*.js",
+            "options": {
+                "semi": true
+            }
+        }
+    ]
+}
diff --git a/package.json b/package.json
index 05154c0738530ae6b94c1108e4664552487b903f..aa8954d271a11b647dd5f43f4209e61517ba4b4b 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,7 @@
     "karma-firefox-launcher": "^2.1.0",
     "karma-mocha": "^2.0.1",
     "mocha": "^9.0.0",
+    "prettier": "^2.5.1",
     "rollup": "^2.18.1",
     "rollup-plugin-copy": "^3.3.0",
     "rollup-plugin-delete": "^2.0.0",
@@ -61,6 +62,9 @@
     "universal-router": "^9.0.1"
   },
   "scripts": {
+    "format": "yarn run format:eslint && yarn run format:prettier",
+    "format:eslint": "eslint \"**/*.{js,ts}\" --fix",
+    "format:prettier": "prettier \"**/*.{js,json,ts}\" --write",
     "build": "rollup -c",
     "i18next": "i18next-scanner",
     "watch": "rollup -c --watch",
diff --git a/yarn.lock b/yarn.lock
index be58a8bdf1a2a3004eb22c1e44691b43b56b3290..ae79955414b02c762bc17d15352d550ba2f958f1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5019,6 +5019,11 @@ prelude-ls@~1.1.2:
   resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
   integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
 
+prettier@^2.5.1:
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
+  integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==
+
 process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"