diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000000000000000000000000000000000000..aa683e35c2c0a35693063f819bdde52d1f9ff4d0
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,18 @@
+{
+  /*
+   * VS Code recommended extensions.
+   *
+   * For more information on extension,
+   * visit: https://code.visualstudio.com/docs/editor/extension-marketplace
+   */
+  "recommendations": [
+    "angular.ng-template",
+    "dbaeumer.vscode-eslint",
+    "editorconfig.editorconfig",
+    "esbenp.prettier-vscode",
+    "gitlab.gitlab-workflow",
+    "pkief.material-icon-theme",
+    "redhat.vscode-yaml",
+    "timonwong.shellcheck"
+  ]
+}
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000000000000000000000000000000000000..65dfe3233142d6a1c3ba1aa4c27aeac25c84dc71
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,29 @@
+{
+  /*
+   * VS Code debugging launch configurations.
+   *
+   * For more information on launch configurations, visit:
+   * https://go.microsoft.com/fwlink/?linkid=830387
+   */
+  "version": "0.2.0",
+  "configurations": [
+    // Debug with Microsoft Edge
+    {
+      "type": "msedge",
+      "request": "launch",
+      "name": "Debug with Edge",
+      "url": "http://localhost:4200",
+      "preLaunchTask": "Start example",
+      "webRoot": "${workspaceFolder}"
+    },
+    // Debug with Chrome
+    {
+      "type": "chrome",
+      "request": "launch",
+      "name": "Debug with Chrome",
+      "url": "http://localhost:4200",
+      "preLaunchTask": "Start example",
+      "webRoot": "${workspaceFolder}"
+    }
+  ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..5037f8f12b9caf687a61007f882c20680eb7c362
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,40 @@
+{
+  /*
+   * VS Code settings for nshmp-apps.
+   *
+   * For more information on settings,
+   * visit: https://code.visualstudio.com/docs/getstarted/settings
+   */
+  "javascript.preferences.quoteStyle": "single",
+  "typescript.preferences.quoteStyle": "single",
+  "yaml.format.singleQuote": true,
+  "editor.rulers": [
+    {
+      "column": 100
+    }
+  ],
+  "editor.tabSize": 2,
+  "files.exclude": {
+    "**/.angular": true,
+    "**/.DS_Store": true,
+    "**/.git": true,
+    "**/junit.xml": true
+  },
+  "files.watcherExclude": {
+    "**/.git/objects/**": true,
+    "**/.git/subtree-cache/**": true,
+    "**/node_modules/**": true,
+    "**/bazel-out/**": true,
+    "**/dist/**": true,
+    "**/aio/src/generated/**": true
+  },
+  "search.exclude": {
+    "**/node_modules": true,
+    "**/bower_components": true,
+    "**/bazel-out": true,
+    "**/dist": true,
+    "**/aio/src/generated": true,
+    ".history": true
+  },
+  "git.ignoreLimitWarning": true
+}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000000000000000000000000000000000000..230dfd648668b3538a3e432a7b108de54500822b
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,50 @@
+{
+  /*
+   * VS Code tasks.
+   *
+   * For more information on tasks,
+   * visit: https://code.visualstudio.com/docs/editor/tasks
+   */
+  "version": "2.0.0",
+  "tasks": [
+    // Automatically fix linter issues
+    {
+      "label": "Automatic lint fix",
+      "type": "npm",
+      "script": "fix",
+      "isBackground": true,
+      "problemMatcher": ["$tsc"]
+    },
+    // Run linter
+    {
+      "label": "Run linter",
+      "type": "npm",
+      "script": "lint",
+      "isBackground": true,
+      "problemMatcher": ["$tsc"]
+    },
+    // Start Angular example
+    {
+      "label": "Start example",
+      "type": "npm",
+      "script": "start",
+      "isBackground": true,
+      "problemMatcher": {
+        "owner": "typescript",
+        "source": "ts",
+        "applyTo": "closedDocuments",
+        "fileLocation": ["relative", "${cwd}"],
+        "pattern": "$tsc",
+        "background": {
+          "activeOnStart": true,
+          "beginsPattern": {
+            "regexp": "(.*?)"
+          },
+          "endsPattern": {
+            "regexp": "Compiled |Failed to compile."
+          }
+        }
+      }
+    },
+  ]
+}