diff --git a/.devcontainer/.devcontainer.json b/.devcontainer/.devcontainer.json
new file mode 100644
index 00000000000000..2e3cde606ce422
--- /dev/null
+++ b/.devcontainer/.devcontainer.json
@@ -0,0 +1,19 @@
+{
+  "name": "Node.js Core Developer Environment",
+  "extensions": [
+      "github.vscode-pull-request-github",
+      "ms-vsliveshare.vsliveshare",
+      "vscode-icons-team.vscode-icons",
+      "visualstudioexptteam.vscodeintellicode"
+  ],
+  "dockerFile": "Dockerfile",
+  "initializeCommand": "docker system prune -f -a",
+  "settings": {
+    "terminal.integrated.profiles.linux": {
+      "zsh (login)": {
+        "path": "zsh",
+        "args": ["-l"]
+      }
+    }
+  }
+}
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 00000000000000..3e8e7ecbfbcbdd
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1 @@
+FROM nodejs/devcontainer:nightly
diff --git a/.gitignore b/.gitignore
index e10a56d9de7926..79920931ce4e15 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,8 @@
 .*
 # Exclude specific dotfiles that we want to track.
 !deps/**/.*
+!.devcontainer/
+!.devcontainer/.devcontainer.json
 !test/fixtures/**/.*
 !.clang-format
 !.cpplint