diff --git a/bazel/api_build_system.bzl b/bazel/api_build_system.bzl
index 729e7716..563c9467 100644
--- a/bazel/api_build_system.bzl
+++ b/bazel/api_build_system.bzl
@@ -23,6 +23,7 @@ _CC_GRPC_SUFFIX = "_cc_grpc"
 _GO_PROTO_SUFFIX = "_go_proto"
 _GO_IMPORTPATH_PREFIX = "github.com/envoyproxy/go-control-plane/"
 _JAVA_PROTO_SUFFIX = "_java_proto"
+_IS_BZLMOD = str(Label("//:invalid")).startswith("@@")
 
 _COMMON_PROTO_DEPS = [
     "@com_google_protobuf//:any_proto",
@@ -42,7 +43,8 @@ _COMMON_PROTO_DEPS = [
 def _proto_mapping(dep, proto_dep_map, proto_suffix):
     mapped = proto_dep_map.get(dep)
     if mapped == None:
-        prefix = "@" + Label(dep).workspace_name if not dep.startswith("//") else ""
+        prefix = "@@" if _IS_BZLMOD else "@"
+        prefix = prefix + Label(dep).repo_name if not dep.startswith("//") else ""
         return prefix + "//" + Label(dep).package + ":" + Label(dep).name + proto_suffix
     return mapped
 
diff --git a/bazel/cc_proto_descriptor_library/BUILD b/bazel/cc_proto_descriptor_library/BUILD
index 993d1080..6d013919 100644
--- a/bazel/cc_proto_descriptor_library/BUILD
+++ b/bazel/cc_proto_descriptor_library/BUILD
@@ -37,7 +37,6 @@ cc_library(
         "@com_google_absl//absl/strings:str_format",
         "@com_google_protobuf//:protobuf",
         "@com_google_protobuf//src/google/protobuf/compiler:code_generator",
-        "@com_google_protobuf//src/google/protobuf/compiler:retention",
     ],
 )
 
diff --git a/bazel/repositories.bzl b/bazel/repositories.bzl
index 0ec7f2fa..e7e3cb11 100644
--- a/bazel/repositories.bzl
+++ b/bazel/repositories.bzl
@@ -12,7 +12,22 @@ def external_http_archive(name, **kwargs):
         **kwargs
     )
 
-def api_dependencies():
+def api_dependencies(bzlmod = False):
+    external_http_archive(
+        name = "prometheus_metrics_model",
+        build_file_content = PROMETHEUSMETRICS_BUILD_CONTENT,
+    )
+    external_http_archive(
+        name = "com_github_bufbuild_buf",
+        build_file_content = BUF_BUILD_CONTENT,
+    )
+    external_http_archive(
+        name = "envoy_toolshed",
+    )
+
+    if bzlmod:
+        return
+
     external_http_archive(
         name = "bazel_skylib",
     )
@@ -27,15 +42,9 @@ def api_dependencies():
     external_http_archive(
         name = "com_google_googleapis",
     )
-
     external_http_archive(
         name = "com_github_cncf_xds",
     )
-
-    external_http_archive(
-        name = "prometheus_metrics_model",
-        build_file_content = PROMETHEUSMETRICS_BUILD_CONTENT,
-    )
     external_http_archive(
         name = "rules_proto",
     )
@@ -47,20 +56,12 @@ def api_dependencies():
         name = "opentelemetry_proto",
         build_file_content = OPENTELEMETRY_BUILD_CONTENT,
     )
-    external_http_archive(
-        name = "com_github_bufbuild_buf",
-        build_file_content = BUF_BUILD_CONTENT,
-    )
     external_http_archive(
         name = "dev_cel",
     )
-
     external_http_archive(
         name = "com_github_chrusty_protoc_gen_jsonschema",
     )
-    external_http_archive(
-        name = "envoy_toolshed",
-    )
 
 PROMETHEUSMETRICS_BUILD_CONTENT = """
 load("@envoy_api//bazel:api_build_system.bzl", "api_cc_py_proto_library")
@@ -401,3 +402,5 @@ filegroup(
     tags = ["manual"], # buf is downloaded as a linux binary; tagged manual to prevent build for non-linux users
 )
 """
+
+non_module_deps = module_extension(implementation = lambda ctx: api_dependencies(bzlmod = True))
