diff --git a/doc/api/repl.md b/doc/api/repl.md
index d52ff0e7d012c5..5a2c35f4a1c494 100644
--- a/doc/api/repl.md
+++ b/doc/api/repl.md
@@ -540,6 +540,15 @@ by default. However, this is not the case when creating a REPL
 programmatically. Use this method to initialize a history log file when working
 with REPL instances programmatically.
 
+## `repl.builtinModules`
+<!-- YAML
+added: REPLACEME
+-->
+
+* {string[]}
+
+A list of the names of all Node.js modules, e.g., `'http'`.
+
 ## `repl.start([options])`
 <!-- YAML
 added: v0.1.91
diff --git a/lib/repl.js b/lib/repl.js
index 41aaf126e39b94..8bd109ecaf52eb 100644
--- a/lib/repl.js
+++ b/lib/repl.js
@@ -86,7 +86,7 @@ const {
 const { Console } = require('console');
 const CJSModule = require('internal/modules/cjs/loader').Module;
 let _builtinLibs = [...CJSModule.builtinModules]
-  .filter((e) => !e.startsWith('_'));
+  .filter((e) => !e.startsWith('_') && !e.includes('/'));
 const domain = require('domain');
 const debug = require('internal/util/debuglog').debuglog('repl');
 const {
@@ -1610,6 +1610,13 @@ module.exports = {
   Recoverable
 };
 
+ObjectDefineProperty(module.exports, 'builtinModules', {
+  get: () => _builtinLibs,
+  set: (val) => _builtinLibs = val,
+  enumerable: true,
+  configurable: true
+});
+
 ObjectDefineProperty(module.exports, '_builtinLibs', {
   get: pendingDeprecation ? deprecate(
     () => _builtinLibs,
diff --git a/test/parallel/test-repl-tab-complete.js b/test/parallel/test-repl-tab-complete.js
index c40485ce3f5eac..79604ba2d8edf9 100644
--- a/test/parallel/test-repl-tab-complete.js
+++ b/test/parallel/test-repl-tab-complete.js
@@ -224,9 +224,18 @@ putIn.run(['.clear']);
 testMe.complete('require(\'', common.mustCall(function(error, data) {
   assert.strictEqual(error, null);
   builtinModules.forEach((lib) => {
-    if (!lib.startsWith('_'))
-      assert(data[0].includes(lib), `${lib} not found`);
+    assert(
+      data[0].includes(lib) || lib.startsWith('_') || lib.includes('/'),
+      `${lib} not found`
+    );
   });
+  const newModule = 'foobar';
+  assert(!builtinModules.includes(newModule));
+  repl.builtinModules.push(newModule);
+  testMe.complete('require(\'', common.mustCall((_, [modules]) => {
+    assert.strictEqual(data[0].length + 1, modules.length);
+    assert(modules.includes(newModule));
+  }));
 }));
 
 testMe.complete("require\t( 'n", common.mustCall(function(error, data) {