diff --git a/.gitignore b/.gitignore
index 787aa480780ebc98737a84b5fb0005182173b5fc..a4b1099fcef1c806d315153016c2059af332d098 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
+.vscode/*
+!.vscode/settings.json
 /target
 /tmp
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..b3c98972ca9025b2b3753eb6b61db2fc9d9e6dcc
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,17 @@
+{
+    "conventionalCommits.scopes": [
+        "deps",
+        "dev"
+    ],
+    "cSpell.words": [
+        "checkstyle",
+        "clippy",
+        "rustdoc",
+        "rustfmt",
+        "rustup",
+        "tamasfe",
+        "Tilenames",
+        "vivaxy",
+        "WMTS"
+    ]
+}
diff --git a/README.md b/README.md
index f43c63cfc28c649465010036df89d58a1e6cda54..7547eedb2ba6c154ed9c7b3168a86d24b2359575 100644
--- a/README.md
+++ b/README.md
@@ -61,16 +61,26 @@ Use a linter with
 cargo clippy
 ```
 
-### Configure VSCodium / VSCode
+### Commits
 
-Recommanded extensions:
+Commit messages must follow the [Conventional Commits](https://www.conventionalcommits.org/) specification, a lightweight convention to write the commit message text.
 
-- Even Better TOML (`tamasfe.even-better-toml`):
+### Configure VSCodium / VS Code
+
+- [VSCodium](https://vscodium.com/)
+- [Visual Studio Code](https://code.visualstudio.com/)
+
+Recommended extensions:
+
+- Even Better TOML (`ext install tamasfe.even-better-toml`):
   Fully-featured TOML support
   https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml
-- rust-analyzer (`rust-lang.rust-analyzer`):
+- rust-analyzer (`ext install rust-lang.rust-analyzer`):
   Rust language support for Visual Studio Code
   https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer
+- Conventional Commits (`ext install vivaxy.vscode-conventional-commits`)
+  Conventional Commits for VSCode
+  https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits
 
 ### Build