diff --git a/build/lib/extensions.js b/build/lib/extensions.js
index 79a9507f66c02..1d2f95299c85b 100644
--- a/build/lib/extensions.js
+++ b/build/lib/extensions.js
@@ -61,7 +61,6 @@ const crypto_1 = __importDefault(require("crypto"));
 const vinyl_1 = __importDefault(require("vinyl"));
 const stats_1 = require("./stats");
 const util2 = __importStar(require("./util"));
-const vzip = require('gulp-vinyl-zip');
 const gulp_filter_1 = __importDefault(require("gulp-filter"));
 const gulp_rename_1 = __importDefault(require("gulp-rename"));
 const fancy_log_1 = __importDefault(require("fancy-log"));
@@ -72,6 +71,7 @@ const dependencies_1 = require("./dependencies");
 const builtInExtensions_1 = require("./builtInExtensions");
 const getVersion_1 = require("./getVersion");
 const fetch_1 = require("./fetch");
+const vzip = require('gulp-vinyl-zip');
 const root = path_1.default.dirname(path_1.default.dirname(__dirname));
 const commit = (0, getVersion_1.getVersion)(root);
 const sourceMappingURLBase = `https://main.vscode-cdn.net/sourcemaps/${commit}`;
@@ -104,7 +104,10 @@ function updateExtensionPackageJSON(input, update) {
         .pipe(packageJsonFilter.restore);
 }
 function fromLocal(extensionPath, forWeb, disableMangle) {
-    const webpackConfigFileName = forWeb ? 'extension-browser.webpack.config.js' : 'extension.webpack.config.js';
+    const esm = JSON.parse(fs_1.default.readFileSync(path_1.default.join(extensionPath, 'package.json'), 'utf8')).type === 'module';
+    const webpackConfigFileName = forWeb
+        ? `extension-browser.webpack.config.${!esm ? 'js' : 'cjs'}`
+        : `extension.webpack.config.${!esm ? 'js' : 'cjs'}`;
     const isWebPacked = fs_1.default.existsSync(path_1.default.join(extensionPath, webpackConfigFileName));
     let input = isWebPacked
         ? fromLocalWebpack(extensionPath, webpackConfigFileName, disableMangle)
diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts
index 908480b607762..b900802ed6a30 100644
--- a/build/lib/extensions.ts
+++ b/build/lib/extensions.ts
@@ -14,7 +14,6 @@ import { Stream } from 'stream';
 import File from 'vinyl';
 import { createStatsStream } from './stats';
 import * as util2 from './util';
-const vzip = require('gulp-vinyl-zip');
 import filter from 'gulp-filter';
 import rename from 'gulp-rename';
 import fancyLog from 'fancy-log';
@@ -26,6 +25,7 @@ import { getProductionDependencies } from './dependencies';
 import { IExtensionDefinition, getExtensionStream } from './builtInExtensions';
 import { getVersion } from './getVersion';
 import { fetchUrls, fetchGithub } from './fetch';
+const vzip = require('gulp-vinyl-zip');
 
 const root = path.dirname(path.dirname(__dirname));
 const commit = getVersion(root);
@@ -62,7 +62,12 @@ function updateExtensionPackageJSON(input: Stream, update: (data: any) => any):
 }
 
 function fromLocal(extensionPath: string, forWeb: boolean, disableMangle: boolean): Stream {
-	const webpackConfigFileName = forWeb ? 'extension-browser.webpack.config.js' : 'extension.webpack.config.js';
+
+	const esm = JSON.parse(fs.readFileSync(path.join(extensionPath, 'package.json'), 'utf8')).type === 'module';
+
+	const webpackConfigFileName = forWeb
+		? `extension-browser.webpack.config.${!esm ? 'js' : 'cjs'}`
+		: `extension.webpack.config.${!esm ? 'js' : 'cjs'}`;
 
 	const isWebPacked = fs.existsSync(path.join(extensionPath, webpackConfigFileName));
 	let input = isWebPacked
diff --git a/extensions/github/extension.webpack.config.js b/extensions/github/extension.webpack.config.cjs
similarity index 83%
rename from extensions/github/extension.webpack.config.js
rename to extensions/github/extension.webpack.config.cjs
index 45600607fc5b4..e0ac991de2e67 100644
--- a/extensions/github/extension.webpack.config.js
+++ b/extensions/github/extension.webpack.config.cjs
@@ -13,5 +13,12 @@ module.exports = withDefaults({
 	context: __dirname,
 	entry: {
 		extension: './src/extension.ts'
+	},
+	output: {
+		libraryTarget: 'module',
+		chunkFormat: 'module',
+	},
+	experiments: {
+		outputModule: true
 	}
 });
diff --git a/extensions/github/package-lock.json b/extensions/github/package-lock.json
index 1b7dc727a928f..109aba370d1b5 100644
--- a/extensions/github/package-lock.json
+++ b/extensions/github/package-lock.json
@@ -9,9 +9,9 @@
       "version": "0.0.1",
       "license": "MIT",
       "dependencies": {
-        "@octokit/graphql": "5.0.5",
+        "@octokit/graphql": "8.2.0",
         "@octokit/graphql-schema": "14.4.0",
-        "@octokit/rest": "19.0.4",
+        "@octokit/rest": "21.1.0",
         "@vscode/extension-telemetry": "^0.9.8",
         "tunnel": "^0.0.6"
       },
@@ -147,96 +147,92 @@
       "license": "MIT"
     },
     "node_modules/@octokit/auth-token": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.1.tgz",
-      "integrity": "sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA==",
-      "dependencies": {
-        "@octokit/types": "^7.0.0"
-      },
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+      "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==",
       "engines": {
-        "node": ">= 14"
+        "node": ">= 18"
       }
     },
-    "node_modules/@octokit/auth-token/node_modules/@octokit/openapi-types": {
-      "version": "13.6.0",
-      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.6.0.tgz",
-      "integrity": "sha512-bxftLwoZ2J6zsU1rzRvk0O32j7lVB0NWWn+P5CDHn9zPzytasR3hdAeXlTngRDkqv1LyEeuy5psVnDkmOSwrcQ=="
-    },
-    "node_modules/@octokit/auth-token/node_modules/@octokit/types": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.2.0.tgz",
-      "integrity": "sha512-pYQ/a1U6mHptwhGyp6SvsiM4bWP2s3V95olUeTxas85D/2kN78yN5C8cGN+P4LwJSWUqIEyvq0Qn2WUn6NQRjw==",
-      "dependencies": {
-        "@octokit/openapi-types": "^13.6.0"
+    "node_modules/@octokit/core": {
+      "version": "6.1.5",
+      "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.5.tgz",
+      "integrity": "sha512-vvmsN0r7rguA+FySiCsbaTTobSftpIDIpPW81trAmsv9TGxg3YCujAxRYp/Uy8xmDgYCzzgulG62H7KYUFmeIg==",
+      "dependencies": {
+        "@octokit/auth-token": "^5.0.0",
+        "@octokit/graphql": "^8.2.2",
+        "@octokit/request": "^9.2.3",
+        "@octokit/request-error": "^6.1.8",
+        "@octokit/types": "^14.0.0",
+        "before-after-hook": "^3.0.2",
+        "universal-user-agent": "^7.0.0"
+      },
+      "engines": {
+        "node": ">= 18"
       }
     },
-    "node_modules/@octokit/core": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.5.tgz",
-      "integrity": "sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA==",
+    "node_modules/@octokit/core/node_modules/@octokit/graphql": {
+      "version": "8.2.2",
+      "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+      "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
       "dependencies": {
-        "@octokit/auth-token": "^3.0.0",
-        "@octokit/graphql": "^5.0.0",
-        "@octokit/request": "^6.0.0",
-        "@octokit/request-error": "^3.0.0",
-        "@octokit/types": "^7.0.0",
-        "before-after-hook": "^2.2.0",
-        "universal-user-agent": "^6.0.0"
+        "@octokit/request": "^9.2.3",
+        "@octokit/types": "^14.0.0",
+        "universal-user-agent": "^7.0.0"
       },
       "engines": {
-        "node": ">= 14"
+        "node": ">= 18"
       }
     },
     "node_modules/@octokit/core/node_modules/@octokit/openapi-types": {
-      "version": "13.6.0",
-      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.6.0.tgz",
-      "integrity": "sha512-bxftLwoZ2J6zsU1rzRvk0O32j7lVB0NWWn+P5CDHn9zPzytasR3hdAeXlTngRDkqv1LyEeuy5psVnDkmOSwrcQ=="
+      "version": "25.0.0",
+      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.0.0.tgz",
+      "integrity": "sha512-FZvktFu7HfOIJf2BScLKIEYjDsw6RKc7rBJCdvCTfKsVnx2GEB/Nbzjr29DUdb7vQhlzS/j8qDzdditP0OC6aw=="
     },
     "node_modules/@octokit/core/node_modules/@octokit/types": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.2.0.tgz",
-      "integrity": "sha512-pYQ/a1U6mHptwhGyp6SvsiM4bWP2s3V95olUeTxas85D/2kN78yN5C8cGN+P4LwJSWUqIEyvq0Qn2WUn6NQRjw==",
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.0.0.tgz",
+      "integrity": "sha512-VVmZP0lEhbo2O1pdq63gZFiGCKkm8PPp8AUOijlwPO6hojEVjspA0MWKP7E4hbvGxzFKNqKr6p0IYtOH/Wf/zA==",
       "dependencies": {
-        "@octokit/openapi-types": "^13.6.0"
+        "@octokit/openapi-types": "^25.0.0"
       }
     },
     "node_modules/@octokit/endpoint": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.1.tgz",
-      "integrity": "sha512-/wTXAJwt0HzJ2IeE4kQXO+mBScfzyCkI0hMtkIaqyXd9zg76OpOfNQfHL9FlaxAV2RsNiOXZibVWloy8EexENg==",
+      "version": "10.1.4",
+      "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+      "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
       "dependencies": {
-        "@octokit/types": "^7.0.0",
-        "is-plain-object": "^5.0.0",
-        "universal-user-agent": "^6.0.0"
+        "@octokit/types": "^14.0.0",
+        "universal-user-agent": "^7.0.2"
       },
       "engines": {
-        "node": ">= 14"
+        "node": ">= 18"
       }
     },
     "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": {
-      "version": "13.6.0",
-      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.6.0.tgz",
-      "integrity": "sha512-bxftLwoZ2J6zsU1rzRvk0O32j7lVB0NWWn+P5CDHn9zPzytasR3hdAeXlTngRDkqv1LyEeuy5psVnDkmOSwrcQ=="
+      "version": "25.0.0",
+      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.0.0.tgz",
+      "integrity": "sha512-FZvktFu7HfOIJf2BScLKIEYjDsw6RKc7rBJCdvCTfKsVnx2GEB/Nbzjr29DUdb7vQhlzS/j8qDzdditP0OC6aw=="
     },
     "node_modules/@octokit/endpoint/node_modules/@octokit/types": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.2.0.tgz",
-      "integrity": "sha512-pYQ/a1U6mHptwhGyp6SvsiM4bWP2s3V95olUeTxas85D/2kN78yN5C8cGN+P4LwJSWUqIEyvq0Qn2WUn6NQRjw==",
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.0.0.tgz",
+      "integrity": "sha512-VVmZP0lEhbo2O1pdq63gZFiGCKkm8PPp8AUOijlwPO6hojEVjspA0MWKP7E4hbvGxzFKNqKr6p0IYtOH/Wf/zA==",
       "dependencies": {
-        "@octokit/openapi-types": "^13.6.0"
+        "@octokit/openapi-types": "^25.0.0"
       }
     },
     "node_modules/@octokit/graphql": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz",
-      "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.0.tgz",
+      "integrity": "sha512-gejfDywEml/45SqbWTWrhfwvLBrcGYhOn50sPOjIeVvH6i7D16/9xcFA8dAJNp2HMcd+g4vru41g4E2RBiZvfQ==",
       "dependencies": {
-        "@octokit/request": "^6.0.0",
-        "@octokit/types": "^9.0.0",
-        "universal-user-agent": "^6.0.0"
+        "@octokit/request": "^9.1.4",
+        "@octokit/types": "^13.8.0",
+        "universal-user-agent": "^7.0.0"
       },
       "engines": {
-        "node": ">= 14"
+        "node": ">= 18"
       }
     },
     "node_modules/@octokit/graphql-schema": {
@@ -249,148 +245,121 @@
       }
     },
     "node_modules/@octokit/openapi-types": {
-      "version": "17.1.0",
-      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.1.0.tgz",
-      "integrity": "sha512-rnI26BAITDZTo5vqFOmA7oX4xRd18rO+gcK4MiTpJmsRMxAw0JmevNjPsjpry1bb9SVNo56P/0kbiyXXa4QluA=="
+      "version": "24.2.0",
+      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
+      "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="
     },
     "node_modules/@octokit/plugin-paginate-rest": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.2.0.tgz",
-      "integrity": "sha512-8otLCIK9esfmOCY14CBnG/xPqv0paf14rc+s9tHpbOpeFwrv5CnECKW1qdqMAT60ngAa9eB1bKQ+l2YCpi0HPQ==",
+      "version": "11.6.0",
+      "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz",
+      "integrity": "sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==",
       "dependencies": {
-        "@octokit/types": "^7.2.0"
+        "@octokit/types": "^13.10.0"
       },
       "engines": {
-        "node": ">= 14"
+        "node": ">= 18"
       },
       "peerDependencies": {
-        "@octokit/core": ">=4"
-      }
-    },
-    "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": {
-      "version": "13.6.0",
-      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.6.0.tgz",
-      "integrity": "sha512-bxftLwoZ2J6zsU1rzRvk0O32j7lVB0NWWn+P5CDHn9zPzytasR3hdAeXlTngRDkqv1LyEeuy5psVnDkmOSwrcQ=="
-    },
-    "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.2.0.tgz",
-      "integrity": "sha512-pYQ/a1U6mHptwhGyp6SvsiM4bWP2s3V95olUeTxas85D/2kN78yN5C8cGN+P4LwJSWUqIEyvq0Qn2WUn6NQRjw==",
-      "dependencies": {
-        "@octokit/openapi-types": "^13.6.0"
+        "@octokit/core": ">=6"
       }
     },
     "node_modules/@octokit/plugin-request-log": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
-      "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz",
+      "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==",
+      "engines": {
+        "node": ">= 18"
+      },
       "peerDependencies": {
-        "@octokit/core": ">=3"
+        "@octokit/core": ">=6"
       }
     },
     "node_modules/@octokit/plugin-rest-endpoint-methods": {
-      "version": "6.4.0",
-      "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.4.0.tgz",
-      "integrity": "sha512-YP4eUqZ6vORy/eZOTdil1ZSrMt0kv7i/CVw+HhC2C0yJN+IqTc/rot957JQ7JfyeJD6HZOjLg6Jp1o9cPhI9KA==",
+      "version": "13.5.0",
+      "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz",
+      "integrity": "sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==",
       "dependencies": {
-        "@octokit/types": "^7.2.0",
-        "deprecation": "^2.3.1"
+        "@octokit/types": "^13.10.0"
       },
       "engines": {
-        "node": ">= 14"
+        "node": ">= 18"
       },
       "peerDependencies": {
-        "@octokit/core": ">=3"
-      }
-    },
-    "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": {
-      "version": "13.6.0",
-      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.6.0.tgz",
-      "integrity": "sha512-bxftLwoZ2J6zsU1rzRvk0O32j7lVB0NWWn+P5CDHn9zPzytasR3hdAeXlTngRDkqv1LyEeuy5psVnDkmOSwrcQ=="
-    },
-    "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.2.0.tgz",
-      "integrity": "sha512-pYQ/a1U6mHptwhGyp6SvsiM4bWP2s3V95olUeTxas85D/2kN78yN5C8cGN+P4LwJSWUqIEyvq0Qn2WUn6NQRjw==",
-      "dependencies": {
-        "@octokit/openapi-types": "^13.6.0"
+        "@octokit/core": ">=6"
       }
     },
     "node_modules/@octokit/request": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.1.tgz",
-      "integrity": "sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ==",
-      "dependencies": {
-        "@octokit/endpoint": "^7.0.0",
-        "@octokit/request-error": "^3.0.0",
-        "@octokit/types": "^7.0.0",
-        "is-plain-object": "^5.0.0",
-        "node-fetch": "^2.6.7",
-        "universal-user-agent": "^6.0.0"
+      "version": "9.2.3",
+      "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.3.tgz",
+      "integrity": "sha512-Ma+pZU8PXLOEYzsWf0cn/gY+ME57Wq8f49WTXA8FMHp2Ps9djKw//xYJ1je8Hm0pR2lU9FUGeJRWOtxq6olt4w==",
+      "dependencies": {
+        "@octokit/endpoint": "^10.1.4",
+        "@octokit/request-error": "^6.1.8",
+        "@octokit/types": "^14.0.0",
+        "fast-content-type-parse": "^2.0.0",
+        "universal-user-agent": "^7.0.2"
       },
       "engines": {
-        "node": ">= 14"
+        "node": ">= 18"
       }
     },
     "node_modules/@octokit/request-error": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.1.tgz",
-      "integrity": "sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ==",
+      "version": "6.1.8",
+      "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+      "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
       "dependencies": {
-        "@octokit/types": "^7.0.0",
-        "deprecation": "^2.0.0",
-        "once": "^1.4.0"
+        "@octokit/types": "^14.0.0"
       },
       "engines": {
-        "node": ">= 14"
+        "node": ">= 18"
       }
     },
     "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": {
-      "version": "13.6.0",
-      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.6.0.tgz",
-      "integrity": "sha512-bxftLwoZ2J6zsU1rzRvk0O32j7lVB0NWWn+P5CDHn9zPzytasR3hdAeXlTngRDkqv1LyEeuy5psVnDkmOSwrcQ=="
+      "version": "25.0.0",
+      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.0.0.tgz",
+      "integrity": "sha512-FZvktFu7HfOIJf2BScLKIEYjDsw6RKc7rBJCdvCTfKsVnx2GEB/Nbzjr29DUdb7vQhlzS/j8qDzdditP0OC6aw=="
     },
     "node_modules/@octokit/request-error/node_modules/@octokit/types": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.2.0.tgz",
-      "integrity": "sha512-pYQ/a1U6mHptwhGyp6SvsiM4bWP2s3V95olUeTxas85D/2kN78yN5C8cGN+P4LwJSWUqIEyvq0Qn2WUn6NQRjw==",
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.0.0.tgz",
+      "integrity": "sha512-VVmZP0lEhbo2O1pdq63gZFiGCKkm8PPp8AUOijlwPO6hojEVjspA0MWKP7E4hbvGxzFKNqKr6p0IYtOH/Wf/zA==",
       "dependencies": {
-        "@octokit/openapi-types": "^13.6.0"
+        "@octokit/openapi-types": "^25.0.0"
       }
     },
     "node_modules/@octokit/request/node_modules/@octokit/openapi-types": {
-      "version": "13.6.0",
-      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.6.0.tgz",
-      "integrity": "sha512-bxftLwoZ2J6zsU1rzRvk0O32j7lVB0NWWn+P5CDHn9zPzytasR3hdAeXlTngRDkqv1LyEeuy5psVnDkmOSwrcQ=="
+      "version": "25.0.0",
+      "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.0.0.tgz",
+      "integrity": "sha512-FZvktFu7HfOIJf2BScLKIEYjDsw6RKc7rBJCdvCTfKsVnx2GEB/Nbzjr29DUdb7vQhlzS/j8qDzdditP0OC6aw=="
     },
     "node_modules/@octokit/request/node_modules/@octokit/types": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.2.0.tgz",
-      "integrity": "sha512-pYQ/a1U6mHptwhGyp6SvsiM4bWP2s3V95olUeTxas85D/2kN78yN5C8cGN+P4LwJSWUqIEyvq0Qn2WUn6NQRjw==",
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.0.0.tgz",
+      "integrity": "sha512-VVmZP0lEhbo2O1pdq63gZFiGCKkm8PPp8AUOijlwPO6hojEVjspA0MWKP7E4hbvGxzFKNqKr6p0IYtOH/Wf/zA==",
       "dependencies": {
-        "@octokit/openapi-types": "^13.6.0"
+        "@octokit/openapi-types": "^25.0.0"
       }
     },
     "node_modules/@octokit/rest": {
-      "version": "19.0.4",
-      "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.4.tgz",
-      "integrity": "sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA==",
-      "dependencies": {
-        "@octokit/core": "^4.0.0",
-        "@octokit/plugin-paginate-rest": "^4.0.0",
-        "@octokit/plugin-request-log": "^1.0.4",
-        "@octokit/plugin-rest-endpoint-methods": "^6.0.0"
+      "version": "21.1.0",
+      "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.1.0.tgz",
+      "integrity": "sha512-93iLxcKDJboUpmnUyeJ6cRIi7z7cqTZT1K7kRK4LobGxwTwpsa+2tQQbRQNGy7IFDEAmrtkf4F4wBj3D5rVlJQ==",
+      "dependencies": {
+        "@octokit/core": "^6.1.3",
+        "@octokit/plugin-paginate-rest": "^11.4.0",
+        "@octokit/plugin-request-log": "^5.3.1",
+        "@octokit/plugin-rest-endpoint-methods": "^13.3.0"
       },
       "engines": {
-        "node": ">= 14"
+        "node": ">= 18"
       }
     },
     "node_modules/@octokit/types": {
-      "version": "9.2.0",
-      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.2.0.tgz",
-      "integrity": "sha512-xySzJG4noWrIBFyMu4lg4tu9vAgNg9S0aoLRONhAEz6ueyi1evBzb40HitIosaYS4XOexphG305IVcLrIX/30g==",
+      "version": "13.10.0",
+      "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
+      "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
       "dependencies": {
-        "@octokit/openapi-types": "^17.1.0"
+        "@octokit/openapi-types": "^24.2.0"
       }
     },
     "node_modules/@types/node": {
@@ -417,14 +386,24 @@
       }
     },
     "node_modules/before-after-hook": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
-      "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
-    },
-    "node_modules/deprecation": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
-      "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+      "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A=="
+    },
+    "node_modules/fast-content-type-parse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+      "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fastify"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/fastify"
+        }
+      ]
     },
     "node_modules/graphql": {
       "version": "16.8.1",
@@ -448,46 +427,6 @@
         "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
       }
     },
-    "node_modules/is-plain-object": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
-      "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/node-fetch": {
-      "version": "2.6.7",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
-      "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
-      "dependencies": {
-        "whatwg-url": "^5.0.0"
-      },
-      "engines": {
-        "node": "4.x || >=6.0.0"
-      },
-      "peerDependencies": {
-        "encoding": "^0.1.0"
-      },
-      "peerDependenciesMeta": {
-        "encoding": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/tr46": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-      "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
-    },
     "node_modules/tslib": {
       "version": "2.6.3",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
@@ -508,28 +447,9 @@
       "dev": true
     },
     "node_modules/universal-user-agent": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
-      "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
-    },
-    "node_modules/webidl-conversions": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-      "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
-    },
-    "node_modules/whatwg-url": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
-      "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0= sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
-      "dependencies": {
-        "tr46": "~0.0.3",
-        "webidl-conversions": "^3.0.0"
-      }
-    },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz",
+      "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q=="
     }
   }
 }
diff --git a/extensions/github/package.json b/extensions/github/package.json
index 524cee5bbea6c..86b54f3303da4 100644
--- a/extensions/github/package.json
+++ b/extensions/github/package.json
@@ -20,6 +20,7 @@
     "vscode.git-base"
   ],
   "main": "./out/extension.js",
+  "type": "module",
   "capabilities": {
     "virtualWorkspaces": false,
     "untrustedWorkspaces": {
@@ -227,9 +228,9 @@
     "watch": "gulp watch-extension:github"
   },
   "dependencies": {
-    "@octokit/graphql": "5.0.5",
+    "@octokit/graphql": "8.2.0",
     "@octokit/graphql-schema": "14.4.0",
-    "@octokit/rest": "19.0.4",
+    "@octokit/rest": "21.1.0",
     "tunnel": "^0.0.6",
     "@vscode/extension-telemetry": "^0.9.8"
   },
diff --git a/extensions/github/src/auth.ts b/extensions/github/src/auth.ts
index e7be2637da068..f27967d22f7a3 100644
--- a/extensions/github/src/auth.ts
+++ b/extensions/github/src/auth.ts
@@ -5,7 +5,7 @@
 
 import { AuthenticationSession, authentication, window } from 'vscode';
 import { Agent, globalAgent } from 'https';
-import { graphql } from '@octokit/graphql/dist-types/types';
+import { graphql } from '@octokit/graphql/types';
 import { Octokit } from '@octokit/rest';
 import { httpsOverHttp } from 'tunnel';
 import { URL } from 'url';
@@ -71,7 +71,7 @@ export async function getOctokitGraphql(): Promise<graphql> {
 			const token = session.accessToken;
 			const { graphql } = await import('@octokit/graphql');
 
-			return graphql.defaults({
+			return graphql({
 				headers: {
 					authorization: `token ${token}`
 				},
diff --git a/extensions/github/src/branchProtection.ts b/extensions/github/src/branchProtection.ts
index 52b4fbfae222e..b381320962eee 100644
--- a/extensions/github/src/branchProtection.ts
+++ b/extensions/github/src/branchProtection.ts
@@ -5,9 +5,9 @@
 
 import { authentication, EventEmitter, LogOutputChannel, Memento, Uri, workspace } from 'vscode';
 import { Repository as GitHubRepository, RepositoryRuleset } from '@octokit/graphql-schema';
-import { AuthenticationError, getOctokitGraphql } from './auth';
-import { API, BranchProtection, BranchProtectionProvider, BranchProtectionRule, Repository } from './typings/git';
-import { DisposableStore, getRepositoryFromUrl } from './util';
+import { AuthenticationError, getOctokitGraphql } from './auth.js';
+import { API, BranchProtection, BranchProtectionProvider, BranchProtectionRule, Repository } from './typings/git.js';
+import { DisposableStore, getRepositoryFromUrl } from './util.js';
 import TelemetryReporter from '@vscode/extension-telemetry';
 
 const REPOSITORY_QUERY = `
@@ -74,7 +74,7 @@ export class GitHubBranchProtectionProviderManager {
 		private readonly gitAPI: API,
 		private readonly globalState: Memento,
 		private readonly logger: LogOutputChannel,
-		private readonly telemetryReporter: TelemetryReporter) {
+		private readonly telemetryReporter: TelemetryReporter.default) {
 		this.disposables.add(this.gitAPI.onDidOpenRepository(repository => {
 			if (this._enabled) {
 				this.providerDisposables.add(gitAPI.registerBranchProtectionProvider(repository.rootUri, new GitHubBranchProtectionProvider(repository, this.globalState, this.logger, this.telemetryReporter)));
@@ -113,7 +113,7 @@ export class GitHubBranchProtectionProvider implements BranchProtectionProvider
 		private readonly repository: Repository,
 		private readonly globalState: Memento,
 		private readonly logger: LogOutputChannel,
-		private readonly telemetryReporter: TelemetryReporter) {
+		private readonly telemetryReporter: TelemetryReporter.default) {
 		// Restore branch protection from global state
 		this.branchProtection = this.globalState.get<BranchProtection[]>(this.globalStateKey, []);
 
diff --git a/extensions/github/src/canonicalUriProvider.ts b/extensions/github/src/canonicalUriProvider.ts
index 09f5e243bc187..0838c7377dd63 100644
--- a/extensions/github/src/canonicalUriProvider.ts
+++ b/extensions/github/src/canonicalUriProvider.ts
@@ -4,7 +4,7 @@
  *--------------------------------------------------------------------------------------------*/
 
 import { CancellationToken, CanonicalUriProvider, CanonicalUriRequestOptions, Disposable, ProviderResult, Uri, workspace } from 'vscode';
-import { API } from './typings/git';
+import { API } from './typings/git.js';
 
 const SUPPORTED_SCHEMES = ['ssh', 'https', 'file'];
 
diff --git a/extensions/github/src/commands.ts b/extensions/github/src/commands.ts
index 4e5587c09b534..48e9574c708c1 100644
--- a/extensions/github/src/commands.ts
+++ b/extensions/github/src/commands.ts
@@ -4,10 +4,10 @@
  *--------------------------------------------------------------------------------------------*/
 
 import * as vscode from 'vscode';
-import { API as GitAPI, RefType, Repository } from './typings/git';
-import { publishRepository } from './publish';
-import { DisposableStore, getRepositoryFromUrl } from './util';
-import { LinkContext, getCommitLink, getLink, getVscodeDevHost } from './links';
+import { API as GitAPI, RefType, Repository } from './typings/git.js';
+import { publishRepository } from './publish.js';
+import { DisposableStore, getRepositoryFromUrl } from './util.js';
+import { LinkContext, getCommitLink, getLink, getVscodeDevHost } from './links.js';
 
 async function copyVscodeDevLink(gitAPI: GitAPI, useSelection: boolean, context: LinkContext, includeRange = true) {
 	try {
diff --git a/extensions/github/src/credentialProvider.ts b/extensions/github/src/credentialProvider.ts
index 14c7e6a2c7361..d184960c23bbb 100644
--- a/extensions/github/src/credentialProvider.ts
+++ b/extensions/github/src/credentialProvider.ts
@@ -3,9 +3,9 @@
  *  Licensed under the MIT License. See License.txt in the project root for license information.
  *--------------------------------------------------------------------------------------------*/
 
-import { CredentialsProvider, Credentials, API as GitAPI } from './typings/git';
+import { CredentialsProvider, Credentials, API as GitAPI } from './typings/git.js';
 import { workspace, Uri, Disposable } from 'vscode';
-import { getSession } from './auth';
+import { getSession } from './auth.js';
 
 const EmptyDisposable: Disposable = { dispose() { } };
 
diff --git a/extensions/github/src/extension.ts b/extensions/github/src/extension.ts
index de0349ba9d3a8..6c0b848737a10 100644
--- a/extensions/github/src/extension.ts
+++ b/extensions/github/src/extension.ts
@@ -5,18 +5,18 @@
 
 import { commands, Disposable, ExtensionContext, extensions, l10n, LogLevel, LogOutputChannel, window } from 'vscode';
 import TelemetryReporter from '@vscode/extension-telemetry';
-import { GithubRemoteSourceProvider } from './remoteSourceProvider';
-import { API, GitExtension } from './typings/git';
-import { registerCommands } from './commands';
-import { GithubCredentialProviderManager } from './credentialProvider';
-import { DisposableStore, repositoryHasGitHubRemote } from './util';
-import { GithubPushErrorHandler } from './pushErrorHandler';
-import { GitBaseExtension } from './typings/git-base';
-import { GithubRemoteSourcePublisher } from './remoteSourcePublisher';
-import { GitHubBranchProtectionProviderManager } from './branchProtection';
-import { GitHubCanonicalUriProvider } from './canonicalUriProvider';
-import { VscodeDevShareProvider } from './shareProviders';
-import { GitHubSourceControlHistoryItemDetailsProvider } from './historyItemDetailsProvider';
+import { GithubRemoteSourceProvider } from './remoteSourceProvider.js';
+import { API, GitExtension } from './typings/git.js';
+import { registerCommands } from './commands.js';
+import { GithubCredentialProviderManager } from './credentialProvider.js';
+import { DisposableStore, repositoryHasGitHubRemote } from './util.js';
+import { GithubPushErrorHandler } from './pushErrorHandler.js';
+import { GitBaseExtension } from './typings/git-base.js';
+import { GithubRemoteSourcePublisher } from './remoteSourcePublisher.js';
+import { GitHubBranchProtectionProviderManager } from './branchProtection.js';
+import { GitHubCanonicalUriProvider } from './canonicalUriProvider.js';
+import { VscodeDevShareProvider } from './shareProviders.js';
+import { GitHubSourceControlHistoryItemDetailsProvider } from './historyItemDetailsProvider.js';
 
 export function activate(context: ExtensionContext): void {
 	const disposables: Disposable[] = [];
@@ -31,8 +31,8 @@ export function activate(context: ExtensionContext): void {
 	disposables.push(logger.onDidChangeLogLevel(onDidChangeLogLevel));
 	onDidChangeLogLevel(logger.logLevel);
 
-	const { aiKey } = require('../package.json') as { aiKey: string };
-	const telemetryReporter = new TelemetryReporter(aiKey);
+	const { aiKey } = context.extension.packageJSON as { aiKey: string };
+	const telemetryReporter = new TelemetryReporter.default(aiKey);
 	disposables.push(telemetryReporter);
 
 	disposables.push(initializeGitBaseExtension());
@@ -84,7 +84,7 @@ function setGitHubContext(gitAPI: API, disposables: DisposableStore) {
 	}
 }
 
-function initializeGitExtension(context: ExtensionContext, telemetryReporter: TelemetryReporter, logger: LogOutputChannel): Disposable {
+function initializeGitExtension(context: ExtensionContext, telemetryReporter: TelemetryReporter.default, logger: LogOutputChannel): Disposable {
 	const disposables = new DisposableStore();
 
 	let gitExtension = extensions.getExtension<GitExtension>('vscode.git');
diff --git a/extensions/github/src/historyItemDetailsProvider.ts b/extensions/github/src/historyItemDetailsProvider.ts
index b31126e2ada2b..add55e6f4031f 100644
--- a/extensions/github/src/historyItemDetailsProvider.ts
+++ b/extensions/github/src/historyItemDetailsProvider.ts
@@ -5,10 +5,10 @@
 
 import { authentication, Command, l10n, LogOutputChannel, workspace } from 'vscode';
 import { Commit, Repository as GitHubRepository, Maybe } from '@octokit/graphql-schema';
-import { API, AvatarQuery, AvatarQueryCommit, Repository, SourceControlHistoryItemDetailsProvider } from './typings/git';
-import { DisposableStore, getRepositoryDefaultRemote, getRepositoryDefaultRemoteUrl, getRepositoryFromUrl, groupBy, sequentialize } from './util';
-import { AuthenticationError, getOctokitGraphql } from './auth';
-import { getAvatarLink } from './links';
+import { API, AvatarQuery, AvatarQueryCommit, Repository, SourceControlHistoryItemDetailsProvider } from './typings/git.js';
+import { DisposableStore, getRepositoryDefaultRemote, getRepositoryDefaultRemoteUrl, getRepositoryFromUrl, groupBy, sequentialize } from './util.js';
+import { AuthenticationError, getOctokitGraphql } from './auth.js';
+import { getAvatarLink } from './links.js';
 
 const ISSUE_EXPRESSION = /(([A-Za-z0-9_.\-]+)\/([A-Za-z0-9_.\-]+))?(#|GH-)([1-9][0-9]*)($|\b)/g;
 
diff --git a/extensions/github/src/links.ts b/extensions/github/src/links.ts
index fdcac0c5cfdc5..8eb0f6b23f641 100644
--- a/extensions/github/src/links.ts
+++ b/extensions/github/src/links.ts
@@ -4,8 +4,8 @@
  *--------------------------------------------------------------------------------------------*/
 
 import * as vscode from 'vscode';
-import { API as GitAPI, RefType, Repository } from './typings/git';
-import { getRepositoryFromUrl, repositoryHasGitHubRemote } from './util';
+import { API as GitAPI, RefType, Repository } from './typings/git.js';
+import { getRepositoryFromUrl, repositoryHasGitHubRemote } from './util.js';
 
 export function isFileInRepo(repository: Repository, file: vscode.Uri): boolean {
 	return file.path.toLowerCase() === repository.rootUri.path.toLowerCase() ||
diff --git a/extensions/github/src/publish.ts b/extensions/github/src/publish.ts
index dee8898d34824..587b2652d610c 100644
--- a/extensions/github/src/publish.ts
+++ b/extensions/github/src/publish.ts
@@ -4,12 +4,12 @@
  *--------------------------------------------------------------------------------------------*/
 
 import * as vscode from 'vscode';
-import { API as GitAPI, Repository } from './typings/git';
-import { getOctokit } from './auth';
+import { API as GitAPI, Repository } from './typings/git.js';
+import { getOctokit } from './auth.js';
 import { TextEncoder } from 'util';
 import { basename } from 'path';
 import { Octokit } from '@octokit/rest';
-import { isInCodespaces } from './pushErrorHandler';
+import { isInCodespaces } from './pushErrorHandler.js';
 
 function sanitizeRepositoryName(value: string): string {
 	return value.trim().replace(/[^a-z0-9_.]/ig, '-');
diff --git a/extensions/github/src/pushErrorHandler.ts b/extensions/github/src/pushErrorHandler.ts
index f1702bf15dd0c..d76addbe65f5c 100644
--- a/extensions/github/src/pushErrorHandler.ts
+++ b/extensions/github/src/pushErrorHandler.ts
@@ -5,10 +5,12 @@
 
 import { TextDecoder } from 'util';
 import { commands, env, ProgressLocation, Uri, window, workspace, QuickPickOptions, FileType, l10n, Disposable, TextDocumentContentProvider } from 'vscode';
-import TelemetryReporter from '@vscode/extension-telemetry';
-import { getOctokit } from './auth';
-import { GitErrorCodes, PushErrorHandler, Remote, Repository } from './typings/git';
+import { getOctokit } from './auth.js';
+import { GitErrorCodes, PushErrorHandler, Remote, Repository } from './typings/git.js';
 import * as path from 'path';
+import TelemetryReporter from '@vscode/extension-telemetry';
+
+
 
 type Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T;
 
@@ -100,7 +102,7 @@ export class GithubPushErrorHandler implements PushErrorHandler {
 	private disposables: Disposable[] = [];
 	private commandErrors = new CommandErrorOutputTextDocumentContentProvider();
 
-	constructor(private readonly telemetryReporter: TelemetryReporter) {
+	constructor(private readonly telemetryReporter: TelemetryReporter.default) {
 		this.disposables.push(workspace.registerTextDocumentContentProvider('github-output', this.commandErrors));
 	}
 
diff --git a/extensions/github/src/remoteSourceProvider.ts b/extensions/github/src/remoteSourceProvider.ts
index 0d8b93406953e..291a3f1a6bace 100644
--- a/extensions/github/src/remoteSourceProvider.ts
+++ b/extensions/github/src/remoteSourceProvider.ts
@@ -4,11 +4,11 @@
  *--------------------------------------------------------------------------------------------*/
 
 import { Uri, env, l10n, workspace } from 'vscode';
-import { RemoteSourceProvider, RemoteSource, RemoteSourceAction } from './typings/git-base';
-import { getOctokit } from './auth';
+import { RemoteSourceProvider, RemoteSource, RemoteSourceAction } from './typings/git-base.js';
+import { getOctokit } from './auth.js';
 import { Octokit } from '@octokit/rest';
-import { getRepositoryFromQuery, getRepositoryFromUrl } from './util';
-import { getBranchLink, getVscodeDevHost } from './links';
+import { getRepositoryFromQuery, getRepositoryFromUrl } from './util.js';
+import { getBranchLink, getVscodeDevHost } from './links.js';
 
 function asRemoteSource(raw: any): RemoteSource {
 	const protocol = workspace.getConfiguration('github').get<'https' | 'ssh'>('gitProtocol');
diff --git a/extensions/github/src/remoteSourcePublisher.ts b/extensions/github/src/remoteSourcePublisher.ts
index 2e6a5d88ead94..97ce05a835cf8 100644
--- a/extensions/github/src/remoteSourcePublisher.ts
+++ b/extensions/github/src/remoteSourcePublisher.ts
@@ -3,8 +3,8 @@
  *  Licensed under the MIT License. See License.txt in the project root for license information.
  *--------------------------------------------------------------------------------------------*/
 
-import { publishRepository } from './publish';
-import { API as GitAPI, RemoteSourcePublisher, Repository } from './typings/git';
+import { publishRepository } from './publish.js';
+import { API as GitAPI, RemoteSourcePublisher, Repository } from './typings/git.js';
 
 export class GithubRemoteSourcePublisher implements RemoteSourcePublisher {
 	readonly name = 'GitHub';
diff --git a/extensions/github/src/shareProviders.ts b/extensions/github/src/shareProviders.ts
index 7aea9c27b2460..d2e94a471477d 100644
--- a/extensions/github/src/shareProviders.ts
+++ b/extensions/github/src/shareProviders.ts
@@ -4,9 +4,9 @@
  *--------------------------------------------------------------------------------------------*/
 
 import * as vscode from 'vscode';
-import { API } from './typings/git';
-import { getRepositoryFromUrl, repositoryHasGitHubRemote } from './util';
-import { encodeURIComponentExceptSlashes, ensurePublished, getRepositoryForFile, notebookCellRangeString, rangeString } from './links';
+import { API } from './typings/git.js';
+import { getRepositoryFromUrl, repositoryHasGitHubRemote } from './util.js';
+import { encodeURIComponentExceptSlashes, ensurePublished, getRepositoryForFile, notebookCellRangeString, rangeString } from './links.js';
 
 export class VscodeDevShareProvider implements vscode.ShareProvider, vscode.Disposable {
 	readonly id: string = 'copyVscodeDevLink';
diff --git a/extensions/github/src/test/github.test.ts b/extensions/github/src/test/github.test.ts
index 2fc5fbd23a5e6..db0eba515cbbb 100644
--- a/extensions/github/src/test/github.test.ts
+++ b/extensions/github/src/test/github.test.ts
@@ -6,7 +6,7 @@
 import 'mocha';
 import * as assert from 'assert';
 import { workspace, extensions, Uri, commands } from 'vscode';
-import { findPullRequestTemplates, pickPullRequestTemplate } from '../pushErrorHandler';
+import { findPullRequestTemplates, pickPullRequestTemplate } from '../pushErrorHandler.js';
 
 suite('github smoke test', function () {
 	const cwd = workspace.workspaceFolders![0].uri;
diff --git a/extensions/github/src/test/index.ts b/extensions/github/src/test/index.ts
index 52c5acf885fe7..6573ab1daa4af 100644
--- a/extensions/github/src/test/index.ts
+++ b/extensions/github/src/test/index.ts
@@ -4,7 +4,7 @@
  *--------------------------------------------------------------------------------------------*/
 
 import * as path from 'path';
-import * as testRunner from '../../../../test/integration/electron/testrunner';
+import * as testRunner from '../../../../test/integration/electron/testrunner.js';
 
 const suite = 'Github Tests';
 
@@ -27,4 +27,4 @@ if (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {
 
 testRunner.configure(options);
 
-export = testRunner;
+export default testRunner;
diff --git a/extensions/github/src/util.ts b/extensions/github/src/util.ts
index 4c8a032405d96..1841ba0d0326a 100644
--- a/extensions/github/src/util.ts
+++ b/extensions/github/src/util.ts
@@ -4,7 +4,7 @@
  *--------------------------------------------------------------------------------------------*/
 
 import * as vscode from 'vscode';
-import { Repository } from './typings/git';
+import { Repository } from './typings/git.js';
 
 export class DisposableStore {
 
diff --git a/extensions/github/tsconfig.json b/extensions/github/tsconfig.json
index 8435c0d09e88d..9d04625950c6c 100644
--- a/extensions/github/tsconfig.json
+++ b/extensions/github/tsconfig.json
@@ -1,8 +1,12 @@
 {
 	"extends": "../tsconfig.base.json",
 	"compilerOptions": {
+		"module": "NodeNext",
+		"moduleResolution": "NodeNext",
 		"outDir": "./out",
+		"skipLibCheck": true,
 		"experimentalDecorators": true,
+		"allowSyntheticDefaultImports": true,
 		"typeRoots": [
 			"./node_modules/@types"
 		]