diff --git a/.gitignore b/.gitignore
index 1a36c0be0f19a3a1ed276885dc482cbc1e8cde00..4afc5b4aa87b925a8f2c9fa0c2afb3e47899654e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,6 @@
 .project
 .settings
 .gradle
-.vscode
 bin
 build
 classes
@@ -18,7 +17,6 @@ swagger-files
 libs
 .factorypath
 .apt_*
-.vscode
 *version.json
 
 # Node
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000000000000000000000000000000000000..c40e000b4609b3ca477c3546d11181fa1611d9a8
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,17 @@
+{
+  /*
+   * VS Code recommended extensions for nshmp-ws-static.
+   *
+   * For more information on extension,
+   * visit: https://code.visualstudio.com/docs/editor/extension-marketplace
+   */
+  "recommendations": [
+    "davidanson.vscode-markdownlint",
+    "editorconfig.editorconfig",
+    "gitlab.gitlab-workflow",
+    "jumpinjackie.vscode-map-preview",
+    "redhat.vscode-yaml",
+    "vscjava.vscode-gradle",
+    "vscjava.vscode-java-pack",
+  ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..8efb6b9c317d09459ac7f7a87277f418bf64cb48
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,32 @@
+{
+  /*
+   * VS Code settings for nshmp-ws-static.
+   *
+   * For more information on settings,
+   * visit: https://code.visualstudio.com/docs/getstarted/settings
+   */
+  "editor.rulers": [
+    {
+      "column": 100
+    }
+  ],
+  "editor.tabSize": 2,
+  "files.associations": {
+    "*.geojson": "json"
+  },
+  "java.compile.nullAnalysis.mode": "automatic",
+  "java.configuration.updateBuildConfiguration": "automatic",
+  "java.import.generatesMetadataFilesAtProjectRoot": true,
+  "files.exclude": {
+    "**/.classpath": true,
+    "**/.DS_Store": true,
+    "**/.factorypath": true,
+    "**/.git": true,
+    "**/.gradle": true,
+    "**/.project": true,
+    "**/.settings": true,
+    "**/bin": true,
+    "**/node_modules": true,
+    "**/package*.json": true,
+  }
+}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000000000000000000000000000000000000..29dc1d1f4d44788783b5c12d257a12df7539fa7c
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,29 @@
+{
+  /*
+   * VS Code tasks for nshmp-ws-static.
+   *
+   * For more information on tasks, visit: https://code.visualstudio.com/docs/editor/tasks
+   */
+  "version": "2.0.0",
+  "tasks": [
+    /*
+     * Task to automatically run the `./gradlew eclipse` task on startup to
+     * keep the `.classpath` file updated.
+     */
+    {
+      "label": "Update Classpath File",
+      "type": "shell",
+      "command": "./gradlew eclipse",
+      "windows": {
+        "command": "gradle.bat eclipse"
+      },
+      "presentation": {
+        "close": true,
+      },
+      "group": "none",
+      "runOptions": {
+        "runOn": "folderOpen"
+      }
+    }
+  ]
+}