diff --git a/.bazelversion b/.bazelversion
index 2b1ea10..21c8c7b 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1,7 +1 @@
 7.1.1
-# The first line of this file is used by Bazelisk and Bazel to be sure
-# the right version of Bazel is used to build and test this repo.
-# This also defines which version is used on CI.
-#
-# Note that you should also run integration_tests against other Bazel
-# versions you support.
diff --git a/MODULE.bazel b/MODULE.bazel
index 4251c90..e053b99 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -7,9 +7,9 @@ module(
 )
 
 # Lower-bounds (minimum) versions for direct runtime dependencies
-bazel_dep(name = "aspect_bazel_lib", version = "1.38.1")
-bazel_dep(name = "aspect_rules_js", version = "1.34.0")
-bazel_dep(name = "bazel_skylib", version = "1.4.1")
+bazel_dep(name = "aspect_bazel_lib", version = "2.7.3")
+bazel_dep(name = "aspect_rules_js", version = "2.0.0-alpha.4")
+bazel_dep(name = "bazel_skylib", version = "1.5.0")
 
 ####### Dev dependencies ########
 
@@ -17,5 +17,4 @@ bazel_dep(name = "bazel_features", version = "0.1.0", dev_dependency = True)
 bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "1.5.0", dev_dependency = True)
 bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True)
 bazel_dep(name = "gazelle", version = "0.36.0", dev_dependency = True, repo_name = "bazel_gazelle")
-bazel_dep(name = "rules_go", version = "0.46.0", dev_dependency = True)
 bazel_dep(name = "stardoc", version = "0.6.2", dev_dependency = True, repo_name = "io_bazel_stardoc")
diff --git a/WORKSPACE b/WORKSPACE
index 27194c4..fa6a08c 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -8,20 +8,11 @@ load("//webpack:dependencies.bzl", "rules_webpack_dependencies")
 
 rules_webpack_dependencies()
 
-load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "register_coreutils_toolchains")
+load("@aspect_rules_js//js:toolchains.bzl", "DEFAULT_NODE_VERSION", "rules_js_register_toolchains")
 
-aspect_bazel_lib_dependencies()
+rules_js_register_toolchains(node_version = DEFAULT_NODE_VERSION)
 
-register_coreutils_toolchains()
-
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
-
-nodejs_register_toolchains(
-    name = "nodejs",
-    node_version = DEFAULT_NODE_VERSION,
-)
-
-load("@aspect_rules_js//npm:npm_import.bzl", "npm_translate_lock")
+load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
 npm_translate_lock(
     name = "npm",
diff --git a/e2e/loaders/.bazelversion b/e2e/loaders/.bazelversion
new file mode 120000
index 0000000..96cf949
--- /dev/null
+++ b/e2e/loaders/.bazelversion
@@ -0,0 +1 @@
+../../.bazelversion
\ No newline at end of file
diff --git a/e2e/loaders/WORKSPACE b/e2e/loaders/WORKSPACE
index bec87d0..64afe8e 100644
--- a/e2e/loaders/WORKSPACE
+++ b/e2e/loaders/WORKSPACE
@@ -12,15 +12,12 @@ rules_webpack_dependencies()
 
 # Fetch and register a nodejs interpreter, if you haven't already
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:toolchains.bzl", "DEFAULT_NODE_VERSION", "rules_js_register_toolchains")
 
-nodejs_register_toolchains(
-    name = "node",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_register_toolchains(node_version = DEFAULT_NODE_VERSION)
 
 # brought as a dep by webpack ruleset
-load("@aspect_rules_js//npm:npm_import.bzl", "npm_translate_lock")
+load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
 npm_translate_lock(
     name = "npm",
diff --git a/e2e/smoke/.bazelversion b/e2e/smoke/.bazelversion
new file mode 120000
index 0000000..96cf949
--- /dev/null
+++ b/e2e/smoke/.bazelversion
@@ -0,0 +1 @@
+../../.bazelversion
\ No newline at end of file
diff --git a/e2e/smoke/MODULE.bazel b/e2e/smoke/MODULE.bazel
index d0d2a86..a0aef24 100644
--- a/e2e/smoke/MODULE.bazel
+++ b/e2e/smoke/MODULE.bazel
@@ -4,9 +4,9 @@ local_path_override(
     path = "../..",
 )
 
-bazel_dep(name = "aspect_bazel_lib", version = "1.32.0", dev_dependency = True)
-bazel_dep(name = "aspect_rules_js", version = "1.33.1", dev_dependency = True)
-bazel_dep(name = "bazel_skylib", version = "1.4.1", dev_dependency = True)
+bazel_dep(name = "aspect_bazel_lib", version = "2.7.3", dev_dependency = True)
+bazel_dep(name = "aspect_rules_js", version = "2.0.0-alpha.4", dev_dependency = True)
+bazel_dep(name = "bazel_skylib", version = "1.5.0", dev_dependency = True)
 
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm", dev_dependency = True)
 npm.npm_translate_lock(
diff --git a/e2e/smoke/WORKSPACE.bazel b/e2e/smoke/WORKSPACE.bazel
index 4596f9d..0d7eb64 100644
--- a/e2e/smoke/WORKSPACE.bazel
+++ b/e2e/smoke/WORKSPACE.bazel
@@ -18,14 +18,11 @@ rules_webpack_dependencies()
 
 # Fetch and register a nodejs interpreter, if you haven't already
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:toolchains.bzl", "DEFAULT_NODE_VERSION", "rules_js_register_toolchains")
 
-nodejs_register_toolchains(
-    name = "node",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_register_toolchains(node_version = DEFAULT_NODE_VERSION)
 
-load("@aspect_rules_js//npm:npm_import.bzl", "npm_translate_lock")
+load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
 npm_translate_lock(
     name = "v4-npm",
diff --git a/e2e/worker/.bazelversion b/e2e/worker/.bazelversion
new file mode 120000
index 0000000..96cf949
--- /dev/null
+++ b/e2e/worker/.bazelversion
@@ -0,0 +1 @@
+../../.bazelversion
\ No newline at end of file
diff --git a/e2e/worker/WORKSPACE b/e2e/worker/WORKSPACE
index a7be3de..b90f761 100644
--- a/e2e/worker/WORKSPACE
+++ b/e2e/worker/WORKSPACE
@@ -12,14 +12,11 @@ rules_webpack_dependencies()
 
 # Fetch and register a nodejs interpreter, if you haven't already
 
-load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
+load("@aspect_rules_js//js:toolchains.bzl", "DEFAULT_NODE_VERSION", "rules_js_register_toolchains")
 
-nodejs_register_toolchains(
-    name = "node",
-    node_version = DEFAULT_NODE_VERSION,
-)
+rules_js_register_toolchains(node_version = DEFAULT_NODE_VERSION)
 
-load("@aspect_rules_js//npm:npm_import.bzl", "npm_translate_lock")
+load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
 
 npm_translate_lock(
     name = "npm",
diff --git a/internal_deps.bzl b/internal_deps.bzl
index 2e46a50..3ef5928 100644
--- a/internal_deps.bzl
+++ b/internal_deps.bzl
@@ -10,14 +10,6 @@ load("//webpack/private:maybe.bzl", http_archive = "maybe_http_archive")
 def rules_webpack_internal_deps():
     "Fetch repositories used for developing the rules"
 
-    # opt-in to 2.0 without forcing users to do so
-    http_archive(
-        name = "aspect_bazel_lib",
-        sha256 = "c858cc637db5370f6fd752478d1153955b4b4cbec7ffe95eb4a47a48499a79c3",
-        strip_prefix = "bazel-lib-2.0.3",
-        url = "https://github.com/aspect-build/bazel-lib/releases/download/v2.0.3/bazel-lib-v2.0.3.tar.gz",
-    )
-
     http_archive(
         name = "io_bazel_rules_go",
         sha256 = "80a98277ad1311dacd837f9b16db62887702e9f1d1c4c9f796d0121a46c8e184",
diff --git a/webpack/BUILD.bazel b/webpack/BUILD.bazel
index 654bd58..7b08c0e 100644
--- a/webpack/BUILD.bazel
+++ b/webpack/BUILD.bazel
@@ -1,5 +1,5 @@
+load("@aspect_bazel_lib//lib:utils.bzl", bazel_lib_utils = "utils")
 load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-load("//webpack/private:is_bazel_7_or_greater.bzl", "is_bazel_7_or_greater")
 
 exports_files(["defs.bzl"])
 
@@ -10,7 +10,7 @@ bzl_library(
     deps = [
         "//webpack/private:webpack_bundle",
         "//webpack/private:webpack_devserver",
-    ] + (["@bazel_tools//tools/build_defs/repo:cache.bzl"] if is_bazel_7_or_greater() else []),
+    ] + (["@bazel_tools//tools/build_defs/repo:cache.bzl"] if bazel_lib_utils.is_bazel_7_or_greater() else []),
 )
 
 bzl_library(
@@ -20,5 +20,5 @@ bzl_library(
     deps = [
         "@bazel_tools//tools/build_defs/repo:http.bzl",
         "@bazel_tools//tools/build_defs/repo:utils.bzl",
-    ] + (["@bazel_tools//tools/build_defs/repo:cache.bzl"] if is_bazel_7_or_greater() else []),
+    ] + (["@bazel_tools//tools/build_defs/repo:cache.bzl"] if bazel_lib_utils.is_bazel_7_or_greater() else []),
 )
diff --git a/webpack/dependencies.bzl b/webpack/dependencies.bzl
index e618093..2e6a921 100644
--- a/webpack/dependencies.bzl
+++ b/webpack/dependencies.bzl
@@ -10,28 +10,29 @@ load("//webpack/private:maybe.bzl", http_archive = "maybe_http_archive")
 def rules_webpack_dependencies():
     http_archive(
         name = "bazel_skylib",
-        sha256 = "b8a1527901774180afc798aeb28c4634bdccf19c4d98e7bdd1ce79d1fe9aaad7",
-        urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.4.1/bazel-skylib-1.4.1.tar.gz"],
+        sha256 = "cd55a062e763b9349921f0f5db8c3933288dc8ba4f76dd9416aac68acee3cb94",
+        urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz"],
     )
 
     http_archive(
         name = "aspect_bazel_lib",
-        sha256 = "262e3d6693cdc16dd43880785cdae13c64e6a3f63f75b1993c716295093d117f",
-        strip_prefix = "bazel-lib-1.38.1",
-        url = "https://github.com/aspect-build/bazel-lib/releases/download/v1.38.1/bazel-lib-v1.38.1.tar.gz",
+        sha256 = "87ab4ec479ebeb00d286266aca2068caeef1bb0b1765e8f71c7b6cfee6af4226",
+        strip_prefix = "bazel-lib-2.7.3",
+        url = "https://github.com/aspect-build/bazel-lib/releases/download/v2.7.3/bazel-lib-v2.7.3.tar.gz",
     )
 
     http_archive(
         name = "aspect_rules_js",
-        sha256 = "d9ceb89e97bb5ad53b278148e01a77a3e9100db272ce4ebdcd59889d26b9076e",
-        strip_prefix = "rules_js-1.34.0",
-        url = "https://github.com/aspect-build/rules_js/releases/download/v1.34.0/rules_js-v1.34.0.tar.gz",
+        sha256 = "b2669ce908107570e5f552dbf9f133fd6c81e7a90c6083d8a1e03620657980d1",
+        strip_prefix = "rules_js-2.0.0-alpha.4",
+        url = "https://github.com/aspect-build/rules_js/releases/download/v2.0.0-alpha.4/rules_js-v2.0.0-alpha.4.tar.gz",
     )
 
     http_archive(
         name = "rules_nodejs",
-        sha256 = "764a3b3757bb8c3c6a02ba3344731a3d71e558220adcb0cf7e43c9bba2c37ba8",
-        urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.2/rules_nodejs-core-5.8.2.tar.gz"],
+        sha256 = "dddd60acc3f2f30359bef502c9d788f67e33814b0ddd99aa27c5a15eb7a41b8c",
+        strip_prefix = "rules_nodejs-6.1.0",
+        url = "https://github.com/bazelbuild/rules_nodejs/releases/download/v6.1.0/rules_nodejs-v6.1.0.tar.gz",
     )
 
     http_archive(
diff --git a/webpack/private/is_bazel_7_or_greater.bzl b/webpack/private/is_bazel_7_or_greater.bzl
deleted file mode 100644
index 0a9b740..0000000
--- a/webpack/private/is_bazel_7_or_greater.bzl
+++ /dev/null
@@ -1,7 +0,0 @@
-"is_bazel_7_or_greater"
-
-def is_bazel_7_or_greater():
-    # Vendored in from https://github.com/aspect-build/bazel-lib/blob/adad7889c925c4f22a2f84568268f0a62e7c2fb0/lib/private/utils.bzl#L208
-    # so that rules_js remains compatible with aspect_bazel_lib >= 2.0.0 and < 2.2.0.
-    # TODO(2.0): remove this and switch to the upstream function and bump minimum aspect_bazel_lib version to 2.2.0
-    return "apple_binary" not in dir(native) and "cc_host_toolchain_alias" not in dir(native)
diff --git a/webpack/private/webpack_bundle.bzl b/webpack/private/webpack_bundle.bzl
index 05941ab..63c97cd 100644
--- a/webpack/private/webpack_bundle.bzl
+++ b/webpack/private/webpack_bundle.bzl
@@ -164,12 +164,13 @@ def _impl(ctx):
     inputs.extend(ctx.files.entry_points)
     inputs = depset(
         copy_files_to_bin_actions(ctx, inputs) + no_copy_bin_inputs,
-        transitive = [webpack_runfiles] + [js_lib_helpers.gather_files_from_js_providers(
+        transitive = [webpack_runfiles] + [js_lib_helpers.gather_files_from_js_infos(
             targets = ctx.attr.srcs + ctx.attr.deps,
+            include_sources = True,
+            include_types = False,
             include_transitive_sources = True,
-            # Upstream Type-check actions should not be triggered by bundling
-            include_declarations = False,
-            include_npm_linked_packages = True,
+            include_transitive_types = False,
+            include_npm_sources = True,
         )],
     )
 
@@ -184,14 +185,14 @@ def _impl(ctx):
         env = env,
     )
 
-    npm_linked_packages = js_lib_helpers.gather_npm_linked_packages(
+    # If a subset of linked npm dependencies are not bundled, it is up to the user to re-specify
+    # these in `data` if they are runtime dependencies to progagate to binary rules or `srcs` if
+    # they are to be propagated to downstream build targets.
+    npm_sources = js_lib_helpers.gather_npm_sources(
         srcs = ctx.attr.srcs,
         deps = [],
     )
-
-    npm_package_store_deps = js_lib_helpers.gather_npm_package_store_deps(
-        # Since we're bundling, only propagate `data` npm packages to the direct dependencies of
-        # downstream linked `npm_package` targets instead of the common `data` and `deps` pattern.
+    npm_package_store_infos = js_lib_helpers.gather_npm_package_store_infos(
         targets = ctx.attr.data,
     )
 
@@ -207,19 +208,15 @@ def _impl(ctx):
 
     return [
         js_info(
-            npm_linked_package_files = npm_linked_packages.direct_files,
-            npm_linked_packages = npm_linked_packages.direct,
-            npm_package_store_deps = npm_package_store_deps,
+            target = ctx.label,
             sources = output_sources_depset,
-            # Since we're bundling, we don't propagate linked npm packages from dependencies since
-            # they are bundled and the dependencies are dropped. If a subset of linked npm
-            # dependencies are not bundled it is up the the user to re-specify these in `data` if
-            # they are runtime dependencies to propagate to binary rules or `srcs` if they are to be
-            # propagated to downstream build targets.
-            transitive_npm_linked_package_files = npm_linked_packages.transitive_files,
-            transitive_npm_linked_packages = npm_linked_packages.transitive,
-            # Since we're bundling, we don't propagate any transitive output_sources from dependencies
+            types = depset(),  # webpack does not emit types directly
+            # Since we're bundling, don't propogate any transitive sources or declarations since sources
+            # are typically bundled into the output.
             transitive_sources = output_sources_depset,
+            transitive_types = depset(),
+            npm_sources = npm_sources,
+            npm_package_store_infos = npm_package_store_infos,
         ),
         DefaultInfo(
             files = output_sources_depset,