diff --git a/build/gen.py b/build/gen.py
index cdee2f5..d1c649c 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -684,7 +684,6 @@
         'src/gn/function_get_path_info.cc',
         'src/gn/function_get_target_outputs.cc',
         'src/gn/function_label_matches.cc',
-        'src/gn/function_path_exists.cc',
         'src/gn/function_process_file_template.cc',
         'src/gn/function_read_file.cc',
         'src/gn/function_rebase_path.cc',
@@ -823,7 +822,6 @@
         'src/gn/function_get_path_info_unittest.cc',
         'src/gn/function_get_target_outputs_unittest.cc',
         'src/gn/function_label_matches_unittest.cc',
-        'src/gn/function_path_exists_unittest.cc',
         'src/gn/function_process_file_template_unittest.cc',
         'src/gn/function_rebase_path_unittest.cc',
         'src/gn/function_template_unittest.cc',
diff --git a/docs/reference.md b/docs/reference.md
index d138138..56c554f 100644
--- a/docs/reference.md
+++ b/docs/reference.md
@@ -54,7 +54,6 @@
     *   [import: Import a file into the current scope.](#func_import)
     *   [label_matches: Returns whether a label matches any of a list of patterns.](#func_label_matches)
     *   [not_needed: Mark variables from scope as not needed.](#func_not_needed)
-    *   [path_exists: Returns whether the given path exists.](#func_path_exists)
     *   [pool: Defines a pool object.](#func_pool)
     *   [print: Prints to the console.](#func_print)
     *   [print_stack_trace: Prints a stack trace.](#func_print_stack_trace)
@@ -3067,23 +3066,6 @@
   not_needed(invoker, "*", [ "config" ])
   not_needed(invoker, [ "data_deps", "deps" ])
 ```
-
-### <a name="func_path_exists"></a>**path_exists**: Returns whether the given path exists.
-
-```
-  path_exists(path)
-
-  The argument is a path to a file or directory.
-```
-
-#### **Example**
-
-```
-  path_exists("//")  # true
-  path_exists("BUILD.gn")  # true
-  path_exists("/abs-non-existent")  # false
-```
-
 ### <a name="func_pool"></a>**pool**: Defines a pool object.&nbsp;[Back to Top](#gn-reference)
 
 ```
diff --git a/src/gn/function_path_exists.cc b/src/gn/function_path_exists.cc
deleted file mode 100644
index c2383d8..0000000
--- a/src/gn/function_path_exists.cc
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2025 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stddef.h>
-
-#include "base/files/file_util.h"
-#include "gn/build_settings.h"
-#include "gn/err.h"
-#include "gn/functions.h"
-#include "gn/parse_tree.h"
-#include "gn/settings.h"
-#include "gn/value.h"
-
-namespace functions {
-
-Value RunPathExists(Scope* scope,
-                    const FunctionCallNode* function,
-                    const std::vector<Value>& args,
-                    Err* err) {
-  Value result;
-
-  if (args.size() != 1) {
-    *err = Err(function->function(), "Expecting exactly one argument.");
-    return result;
-  }
-  const Value& value = args[0];
-  if (!value.VerifyTypeIs(Value::STRING, err)) {
-    return result;
-  }
-
-  const std::string& input_string = value.string_value();
-  const SourceDir& cur_dir = scope->GetSourceDir();
-  bool as_dir =
-      !input_string.empty() && input_string[input_string.size() - 1] == '/';
-
-  base::FilePath system_path;
-  if (as_dir) {
-    system_path = scope->settings()->build_settings()->GetFullPath(
-        cur_dir.ResolveRelativeDir(
-            value, err,
-            scope->settings()->build_settings()->root_path_utf8()));
-  } else {
-    system_path = scope->settings()->build_settings()->GetFullPath(
-        cur_dir.ResolveRelativeFile(
-            value, err,
-            scope->settings()->build_settings()->root_path_utf8()));
-  }
-  if (err->has_error()) {
-    return value;
-  }
-
-  bool exists = PathExists(system_path);
-  return Value(function, exists);
-}
-
-const char kPathExists[] = "filter_labels_include";
-const char kPathExists_HelpShort[] =
-    "path_exists: Returns whether the given path exists.";
-const char kPathExists_Help[] =
-    R"(path_exists: Returns whether the given path exists.
-
-  path_exists(path)
-
-Examples:
-  path_exists("//")  # true
-  path_exists("BUILD.gn")  # true
-  path_exists("/abs-non-existent")  # false
-)";
-
-}  // namespace functions
diff --git a/src/gn/function_path_exists_unittest.cc b/src/gn/function_path_exists_unittest.cc
deleted file mode 100644
index 516f551..0000000
--- a/src/gn/function_path_exists_unittest.cc
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright 2025 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/files/file_util.h"
-#include "base/files/scoped_temp_dir.h"
-#include "gn/functions.h"
-#include "gn/test_with_scope.h"
-#include "util/build_config.h"
-#include "util/test/test.h"
-
-namespace {
-bool RunPathExists(Scope* scope, const std::string& path) {
-  Err err;
-  std::vector<Value> args;
-  args.push_back(Value(nullptr, path));
-
-  FunctionCallNode function_call;
-  Value result = functions::RunPathExists(scope, &function_call, args, &err);
-  EXPECT_FALSE(err.has_error());
-  return !err.has_error() && result.boolean_value();
-}
-} // namespace
-
-TEST(PathExistsTest, FileExists) {
-  TestWithScope setup;
-  setup.scope()->set_source_dir(SourceDir("//some-dir/"));
-
-  // Make a real directory for the test.
-  base::ScopedTempDir temp_dir;
-  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
-  setup.build_settings()->SetRootPath(temp_dir.GetPath());
-
-  std::string data = "foo";
-  base::FilePath dir_path = temp_dir.GetPath().AppendASCII("some-dir");
-  base::CreateDirectory(dir_path);
-  base::FilePath file_path = dir_path.AppendASCII("foo.txt");
-  base::WriteFile(file_path, data.c_str(), static_cast<int>(data.size()));
-
-  EXPECT_TRUE(RunPathExists(setup.scope(), "//"));
-  EXPECT_TRUE(RunPathExists(setup.scope(), "//some-dir"));
-  EXPECT_TRUE(RunPathExists(setup.scope(), "//some-dir/"));
-  EXPECT_TRUE(RunPathExists(setup.scope(), "../some-dir"));
-  EXPECT_TRUE(RunPathExists(setup.scope(), "//some-dir/foo.txt"));
-  EXPECT_TRUE(RunPathExists(setup.scope(), temp_dir.GetPath().As8Bit()));
-  EXPECT_FALSE(RunPathExists(setup.scope(), "//bar"));
-  EXPECT_FALSE(RunPathExists(setup.scope(), "bar"));
-}
-
-TEST(PathExistsTest, FileExistsInvalidValues) {
-  TestWithScope setup;
-  FunctionCallNode function_call;
-
-  {
-    // No arg.
-    Err err;
-    std::vector<Value> args;
-    functions::RunPathExists(setup.scope(), &function_call, args, &err);
-    EXPECT_TRUE(err.has_error());
-  }
-  {
-    // Extra arg.
-    Err err;
-    std::vector<Value> args;
-    args.push_back(Value(nullptr, "a"));
-    args.push_back(Value(nullptr, "b"));
-    functions::RunPathExists(setup.scope(), &function_call, args, &err);
-    EXPECT_TRUE(err.has_error());
-  }
-  {
-    // Wrong type.
-    Err err;
-    std::vector<Value> args;
-    args.push_back(Value(nullptr, Value::LIST));
-    functions::RunPathExists(setup.scope(), &function_call, args, &err);
-    EXPECT_TRUE(err.has_error());
-  }
-  {
-    // Empty string.
-    Err err;
-    std::vector<Value> args;
-    args.push_back(Value(nullptr, ""));
-    functions::RunPathExists(setup.scope(), &function_call, args, &err);
-    EXPECT_TRUE(err.has_error());
-  }
-}
-
diff --git a/src/gn/functions.cc b/src/gn/functions.cc
index a12b078..6642768 100644
--- a/src/gn/functions.cc
+++ b/src/gn/functions.cc
@@ -1476,7 +1476,6 @@
     INSERT_FUNCTION(Import, false)
     INSERT_FUNCTION(LabelMatches, false)
     INSERT_FUNCTION(NotNeeded, false)
-    INSERT_FUNCTION(PathExists, false)
     INSERT_FUNCTION(Pool, false)
     INSERT_FUNCTION(Print, false)
     INSERT_FUNCTION(PrintStackTrace, false)
diff --git a/src/gn/functions.h b/src/gn/functions.h
index 5d8fdac..5cfeb82 100644
--- a/src/gn/functions.h
+++ b/src/gn/functions.h
@@ -277,14 +277,6 @@
                    const ListNode* args_list,
                    Err* err);
 
-extern const char kPathExists[];
-extern const char kPathExists_HelpShort[];
-extern const char kPathExists_Help[];
-Value RunPathExists(Scope* scope,
-                    const FunctionCallNode* function,
-                    const std::vector<Value>& args,
-                    Err* err);
-
 extern const char kPool[];
 extern const char kPool_HelpShort[];
 extern const char kPool_Help[];
