diff --git a/MODULE.bazel b/MODULE.bazel
index 45db83d..87523ba 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -7,11 +7,11 @@
 # Last updated 2025-09-09
 bazel_dep(name = "bazel_skylib", version = "1.8.1")
 
-# Last updated 2025-09-09
-bazel_dep(name = "rules_cc", version = "0.2.4")
+# Last updated 2026-02-04
+bazel_dep(name = "rules_cc", version = "0.2.9")
 
-# Last updated 2025-12-15
-bazel_dep(name = "abseil-cpp", version = "20250814.1", repo_name = "com_google_absl")
+# Last updated 2026-02-04
+bazel_dep(name = "abseil-cpp", version = "20260107.0", repo_name = "com_google_absl")
 
 # Last updated 2025-05-29
 bazel_dep(name = "protobuf", version = "31.1", repo_name = "com_google_protobuf")
diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock
index 838e953..7116652 100644
--- a/MODULE.bazel.lock
+++ b/MODULE.bazel.lock
@@ -16,8 +16,8 @@
     "https://bcr.bazel.build/modules/abseil-cpp/20250127.0/MODULE.bazel": "d1086e248cda6576862b4b3fe9ad76a214e08c189af5b42557a6e1888812c5d5",
     "https://bcr.bazel.build/modules/abseil-cpp/20250127.1/MODULE.bazel": "c4a89e7ceb9bf1e25cf84a9f830ff6b817b72874088bf5141b314726e46a57c1",
     "https://bcr.bazel.build/modules/abseil-cpp/20250512.0/MODULE.bazel": "c4d02dd22cd87458516655a45512060246ee2a4732f1fbe948a5bd9eb614e626",
-    "https://bcr.bazel.build/modules/abseil-cpp/20250814.0/MODULE.bazel": "c43c16ca2c432566cdb78913964497259903ebe8fb7d9b57b38e9f1425b427b8",
-    "https://bcr.bazel.build/modules/abseil-cpp/20250814.0/source.json": "b88bff599ceaf0f56c264c749b1606f8485cec3b8c38ba30f88a4df9af142861",
+    "https://bcr.bazel.build/modules/abseil-cpp/20260107.0/MODULE.bazel": "94bdc259eccc59d880d3ae55e35ff1f27a289618a023cb1ed87182e17887b7c3",
+    "https://bcr.bazel.build/modules/abseil-cpp/20260107.0/source.json": "cd3c69eebe331264c87283774631f39006cd25caf159f4e1dab74322ef5c4bb9",
     "https://bcr.bazel.build/modules/abseil-py/2.1.0/MODULE.bazel": "5ebe5bf853769c65707e5c28f216798f7a4b1042015e6a36e6d03094d94bec8a",
     "https://bcr.bazel.build/modules/abseil-py/2.1.0/source.json": "0e8fc4f088ce07099c1cd6594c20c7ddbb48b4b3c0849b7d94ba94be88ff042b",
     "https://bcr.bazel.build/modules/apple_support/1.11.1/MODULE.bazel": "1843d7cd8a58369a444fc6000e7304425fba600ff641592161d9f15b179fb896",
@@ -208,7 +208,6 @@
     "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/MODULE.bazel": "b4963dda9b31080be1905ef085ecd7dd6cd47c05c79b9cdf83ade83ab2ab271a",
     "https://bcr.bazel.build/modules/re2/2024-07-02.bcr.1/source.json": "2ff292be6ef3340325ce8a045ecc326e92cbfab47c7cbab4bd85d28971b97ac4",
     "https://bcr.bazel.build/modules/re2/2024-07-02/MODULE.bazel": "0eadc4395959969297cbcf31a249ff457f2f1d456228c67719480205aa306daa",
-    "https://bcr.bazel.build/modules/riegeli/0.0.0-20241218-3385e3c/MODULE.bazel": "14bbe297ac80b30b689bde824d823f53bd87cd504ec3f82de72a730e7b02d526",
     "https://bcr.bazel.build/modules/riegeli/0.0.0-20250706-c4d1f27/MODULE.bazel": "b8b7309fb00c6b545fafcdfc3bf8cba168a61d37d841b9d90bacf7e70ae6627c",
     "https://bcr.bazel.build/modules/riegeli/0.0.0-20250706-c4d1f27/source.json": "af3e2998bdf2f0ca3695816695c079f885d1e5b838e1d05ca82450aba4941762",
     "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8",
@@ -230,9 +229,8 @@
     "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e",
     "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5",
     "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513",
-    "https://bcr.bazel.build/modules/rules_cc/0.2.0/MODULE.bazel": "b5c17f90458caae90d2ccd114c81970062946f49f355610ed89bebf954f5783c",
-    "https://bcr.bazel.build/modules/rules_cc/0.2.4/MODULE.bazel": "1ff1223dfd24f3ecf8f028446d4a27608aa43c3f41e346d22838a4223980b8cc",
-    "https://bcr.bazel.build/modules/rules_cc/0.2.4/source.json": "2bd87ef9b41d4753eadf65175745737135cba0e70b479bdc204ef0c67404d0c4",
+    "https://bcr.bazel.build/modules/rules_cc/0.2.9/MODULE.bazel": "34263f1dca62ea664265438cef714d7db124c03e1ed55ebb4f1dc860164308d1",
+    "https://bcr.bazel.build/modules/rules_cc/0.2.9/source.json": "4e49b40effcbd14fbfb233eb929de42dfff7b66538b4ffda310ad501638e7986",
     "https://bcr.bazel.build/modules/rules_foreign_cc/0.10.1/MODULE.bazel": "b9527010e5fef060af92b6724edb3691970a5b1f76f74b21d39f7d433641be60",
     "https://bcr.bazel.build/modules/rules_foreign_cc/0.10.1/source.json": "9300e71df0cdde0952f10afff1401fa664e9fc5d9ae6204660ba1b158d90d6a6",
     "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6",
diff --git a/quiche/BUILD.bazel b/quiche/BUILD.bazel
index c7e28c9..476ceb9 100644
--- a/quiche/BUILD.bazel
+++ b/quiche/BUILD.bazel
@@ -130,6 +130,7 @@
         "@boringssl//:crypto",
         "@boringssl//:ssl",
         "@com_google_absl//absl/algorithm:container",
+        "@com_google_absl//absl/base",
         "@com_google_absl//absl/base:core_headers",
         "@com_google_absl//absl/base:log_severity",
         "@com_google_absl//absl/base:nullability",
@@ -195,6 +196,7 @@
     deps = [
         ":quiche_core",
         "@boringssl//:crypto",
+        "@com_google_absl//absl/base",
         "@com_google_absl//absl/base:core_headers",
         "@com_google_absl//absl/container:flat_hash_map",
         "@com_google_absl//absl/container:flat_hash_set",
@@ -229,6 +231,7 @@
         ":quiche_tool_support",
         "@boringssl//:crypto",
         "@boringssl//:ssl",
+        "@com_google_absl//absl/base",
         "@com_google_absl//absl/base:core_headers",
         "@com_google_absl//absl/base:nullability",
         "@com_google_absl//absl/container:flat_hash_map",
@@ -383,6 +386,7 @@
         "@boringssl//:crypto",
         "@boringssl//:ssl",
         "@com_google_absl//absl/algorithm:container",
+        "@com_google_absl//absl/base",
         "@com_google_absl//absl/base:core_headers",
         "@com_google_absl//absl/base:nullability",
         "@com_google_absl//absl/cleanup",
@@ -445,6 +449,7 @@
         ":quiche_tool_support",
         "@boringssl//:crypto",
         "@com_google_absl//absl/algorithm:container",
+        "@com_google_absl//absl/base",
         "@com_google_absl//absl/base:core_headers",
         "@com_google_absl//absl/cleanup",
         "@com_google_absl//absl/container:flat_hash_map",
@@ -479,6 +484,7 @@
         "@boringssl//:crypto",
         "@boringssl//:ssl",
         "@com_google_absl//absl/algorithm:container",
+        "@com_google_absl//absl/base",
         "@com_google_absl//absl/base:core_headers",
         "@com_google_absl//absl/cleanup",
         "@com_google_absl//absl/container:flat_hash_map",
@@ -533,6 +539,7 @@
         ":quiche_core",
         ":quiche_test_support",
         ":quiche_tool_support",
+        "@com_google_absl//absl/base",
         "@com_google_absl//absl/base:nullability",
         "@com_google_absl//absl/functional:bind_front",
         "@com_google_absl//absl/hash",
diff --git a/quiche/quic/core/http/end_to_end_test.cc b/quiche/quic/core/http/end_to_end_test.cc
index 342980d..9e30120 100644
--- a/quiche/quic/core/http/end_to_end_test.cc
+++ b/quiche/quic/core/http/end_to_end_test.cc
@@ -18,7 +18,7 @@
 #include <utility>
 #include <vector>
 
-
+#include "absl/base/casts.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "absl/synchronization/notification.h"
@@ -477,7 +477,7 @@
       return nullptr;
     }
     EXPECT_EQ(1u, dispatcher->NumSessions());
-    return static_cast<QuicSpdySession*>(
+    return absl::down_cast<QuicSpdySession*>(
         QuicDispatcherPeer::GetFirstSessionIfAny(dispatcher));
   }
 
@@ -658,7 +658,7 @@
                                QuicDispatcherPeer::GetAlarmFactory(dispatcher),
                                std::make_unique<ServerDelegate>(dispatcher));
     if (stream_factory_ != nullptr) {
-      static_cast<QuicTestServer*>(server_thread_->server())
+      absl::down_cast<QuicTestServer*>(server_thread_->server())
           ->SetSpdyStreamFactory(stream_factory_);
     }
 
@@ -1053,7 +1053,7 @@
 
   QuicConfig PauseServerAndGetLastNegotiatedConfigFromDispatcher() {
     server_thread_->Pause();
-    QuicSimpleDispatcher* dispatcher = static_cast<QuicSimpleDispatcher*>(
+    QuicSimpleDispatcher* dispatcher = absl::down_cast<QuicSimpleDispatcher*>(
         QuicServerPeer::GetDispatcher(server_thread_->server()));
     std::optional<QuicConfig> config = dispatcher->last_negotiated_config();
     if (!config.has_value()) {
@@ -2385,7 +2385,7 @@
   client_->Disconnect();
 
   QuicClientSessionCache* session_cache =
-      static_cast<QuicClientSessionCache*>(
+      absl::down_cast<QuicClientSessionCache*>(
           client_crypto_config->session_cache());
   ASSERT_TRUE(
       !QuicClientSessionCachePeer::GetToken(session_cache, server_id).empty());
diff --git a/quiche/quic/core/http/quic_receive_control_stream_test.cc b/quiche/quic/core/http/quic_receive_control_stream_test.cc
index 6b5ac4f..7b8cd98 100644
--- a/quiche/quic/core/http/quic_receive_control_stream_test.cc
+++ b/quiche/quic/core/http/quic_receive_control_stream_test.cc
@@ -92,7 +92,7 @@
         session_(connection_) {
     EXPECT_CALL(session_, OnCongestionWindowChange(_)).Times(AnyNumber());
     session_.Initialize();
-    EXPECT_CALL(static_cast<const MockQuicCryptoStream&>(
+    EXPECT_CALL(absl::down_cast<const MockQuicCryptoStream&>(
                     *session_.GetCryptoStream()),
                 encryption_established())
         .WillRepeatedly(testing::Return(true));
diff --git a/quiche/quic/core/http/quic_server_session_base_test.cc b/quiche/quic/core/http/quic_server_session_base_test.cc
index bcb0242..12ce32d 100644
--- a/quiche/quic/core/http/quic_server_session_base_test.cc
+++ b/quiche/quic/core/http/quic_server_session_base_test.cc
@@ -668,7 +668,7 @@
       QuicTime::Delta::FromSeconds(kNumSecondsPerHour + 1));
 
   QuicCryptoServerStreamBase* crypto_stream =
-      static_cast<QuicCryptoServerStreamBase*>(
+      absl::down_cast<QuicCryptoServerStreamBase*>(
           QuicSessionPeer::GetMutableCryptoStream(session_.get()));
 
   // No effect if no CachedNetworkParameters provided.
@@ -804,7 +804,7 @@
   }
 
   FakeProofSource* GetFakeProofSource() const {
-    return static_cast<FakeProofSource*>(
+    return absl::down_cast<FakeProofSource*>(
         crypto_config_peer_.GetProofSource());
   }
 
diff --git a/quiche/quic/core/http/quic_spdy_session.cc b/quiche/quic/core/http/quic_spdy_session.cc
index 227294c..23395ff 100644
--- a/quiche/quic/core/http/quic_spdy_session.cc
+++ b/quiche/quic/core/http/quic_spdy_session.cc
@@ -13,8 +13,8 @@
 #include <string>
 #include <utility>
 
-
 #include "absl/base/attributes.h"
+#include "absl/base/casts.h"
 #include "absl/strings/numbers.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
@@ -864,7 +864,7 @@
               stream->version().transport_version, stream->id())) {
         return true;
       }
-      QuicSpdyStream* spdy_stream = static_cast<QuicSpdyStream*>(stream);
+      QuicSpdyStream* spdy_stream = absl::down_cast<QuicSpdyStream*>(stream);
       WebTransportHttp3* web_transport = spdy_stream->web_transport();
       if (web_transport == nullptr) {
         return true;
@@ -981,7 +981,7 @@
         ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
     return nullptr;
   }
-  return static_cast<QuicSpdyStream*>(stream);
+  return absl::down_cast<QuicSpdyStream*>(stream);
 }
 
 void QuicSpdySession::OnNewEncryptionKeyAvailable(
@@ -1858,7 +1858,7 @@
   stream_id64 *= kHttpDatagramStreamIdDivisor;
   QuicStreamId stream_id = static_cast<QuicStreamId>(stream_id64);
   QuicSpdyStream* stream =
-      static_cast<QuicSpdyStream*>(GetActiveStream(stream_id));
+      absl::down_cast<QuicSpdyStream*>(GetActiveStream(stream_id));
   if (stream == nullptr) {
     QUIC_DLOG(INFO) << "Received HTTP/3 datagram for unknown stream ID "
                     << stream_id;
diff --git a/quiche/quic/core/http/web_transport_http3.cc b/quiche/quic/core/http/web_transport_http3.cc
index bfb5e4a..4044796 100644
--- a/quiche/quic/core/http/web_transport_http3.cc
+++ b/quiche/quic/core/http/web_transport_http3.cc
@@ -11,8 +11,8 @@
 #include <utility>
 #include <vector>
 
-
 #include "absl/algorithm/container.h"
+#include "absl/base/casts.h"
 #include "absl/status/statusor.h"
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/http/quic_spdy_session.h"
@@ -222,7 +222,7 @@
       // receieved and the time the client has polled for them.
       continue;
     }
-    return static_cast<WebTransportHttp3UnidirectionalStream*>(stream)
+    return absl::down_cast<WebTransportHttp3UnidirectionalStream*>(stream)
         ->interface();
   }
   return nullptr;
@@ -264,9 +264,9 @@
   const bool bidi = QuicUtils::IsBidirectionalStreamId(
       id, ParsedQuicVersion::RFCv1());  // Assume IETF QUIC for WebTransport
   if (bidi) {
-    return static_cast<QuicSpdyStream*>(stream)->web_transport_stream();
+    return absl::down_cast<QuicSpdyStream*>(stream)->web_transport_stream();
   } else {
-    return static_cast<WebTransportHttp3UnidirectionalStream*>(stream)
+    return absl::down_cast<WebTransportHttp3UnidirectionalStream*>(stream)
         ->interface();
   }
 }
diff --git a/quiche/quic/core/qpack/qpack_receive_stream_test.cc b/quiche/quic/core/qpack/qpack_receive_stream_test.cc
index 78e657b..9e1cb7b 100644
--- a/quiche/quic/core/qpack/qpack_receive_stream_test.cc
+++ b/quiche/quic/core/qpack/qpack_receive_stream_test.cc
@@ -58,7 +58,7 @@
         session_(connection_) {
     EXPECT_CALL(session_, OnCongestionWindowChange(_)).Times(AnyNumber());
     session_.Initialize();
-    EXPECT_CALL(static_cast<const MockQuicCryptoStream&>(
+    EXPECT_CALL(absl::down_cast<const MockQuicCryptoStream&>(
                     *session_.GetCryptoStream()),
                 encryption_established())
         .WillRepeatedly(testing::Return(true));
diff --git a/quiche/quic/core/quic_connection_test.cc b/quiche/quic/core/quic_connection_test.cc
index 88223d3..e7b0832 100644
--- a/quiche/quic/core/quic_connection_test.cc
+++ b/quiche/quic/core/quic_connection_test.cc
@@ -543,7 +543,7 @@
 
  private:
   TestPacketWriter* writer() {
-    return static_cast<TestPacketWriter*>(QuicConnection::writer());
+    return absl::down_cast<TestPacketWriter*>(QuicConnection::writer());
   }
 
   SimpleDataProducer producer_;
diff --git a/quiche/quic/core/quic_crypto_server_stream_test.cc b/quiche/quic/core/quic_crypto_server_stream_test.cc
index 41795ef..18a9763 100644
--- a/quiche/quic/core/quic_crypto_server_stream_test.cc
+++ b/quiche/quic/core/quic_crypto_server_stream_test.cc
@@ -354,7 +354,7 @@
         crypto_config_peer_(&server_crypto_config_) {}
 
   FakeProofSource* GetFakeProofSource() const {
-    return static_cast<FakeProofSource*>(
+    return absl::down_cast<FakeProofSource*>(
         crypto_config_peer_.GetProofSource());
   }
 
diff --git a/quiche/quic/core/quic_dispatcher_test.cc b/quiche/quic/core/quic_dispatcher_test.cc
index 635587c..ecd9e2a 100644
--- a/quiche/quic/core/quic_dispatcher_test.cc
+++ b/quiche/quic/core/quic_dispatcher_test.cc
@@ -15,7 +15,6 @@
 #include <utility>
 #include <vector>
 
-
 #include "absl/base/macros.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
diff --git a/quiche/quic/core/quic_packet_creator_test.cc b/quiche/quic/core/quic_packet_creator_test.cc
index 6fa7218..62e7c6d 100644
--- a/quiche/quic/core/quic_packet_creator_test.cc
+++ b/quiche/quic/core/quic_packet_creator_test.cc
@@ -2618,7 +2618,7 @@
       SimpleDataProducer* producer)
       : QuicPacketCreator(connection_id, framer, random_generator, delegate),
         ack_frame_(InitAckFrame(1)),
-        delegate_(static_cast<MockDelegate*>(delegate)),
+        delegate_(absl::down_cast<MockDelegate*>(delegate)),
         producer_(producer) {}
 
   bool ConsumeRetransmittableControlFrame(const QuicFrame& frame,
diff --git a/quiche/quic/masque/masque_server_session.cc b/quiche/quic/masque/masque_server_session.cc
index 35eab91..cbed99a 100644
--- a/quiche/quic/masque/masque_server_session.cc
+++ b/quiche/quic/masque/masque_server_session.cc
@@ -22,8 +22,8 @@
 #include <utility>
 #include <vector>
 
-
 #include "absl/algorithm/container.h"
+#include "absl/base/casts.h"
 #include "absl/cleanup/cleanup.h"
 #include "absl/strings/escaping.h"
 #include "absl/strings/numbers.h"
@@ -508,7 +508,7 @@
   }
 
   if (protocol == "connect-ip") {
-    QuicSpdyStream* stream = static_cast<QuicSpdyStream*>(
+    QuicSpdyStream* stream = absl::down_cast<QuicSpdyStream*>(
         GetActiveStream(request_handler->stream_id()));
     if (stream == nullptr) {
       QUIC_BUG(bad masque server stream type)
@@ -648,7 +648,7 @@
     use_ipv6 = target_server_address.host().AddressFamilyToInt() == AF_INET6;
   }
 
-  QuicSpdyStream* stream = static_cast<QuicSpdyStream*>(
+  QuicSpdyStream* stream = absl::down_cast<QuicSpdyStream*>(
       GetActiveStream(request_handler->stream_id()));
   if (stream == nullptr) {
     QUIC_BUG(bad masque server stream type)
diff --git a/quiche/quic/moqt/moqt_parser.cc b/quiche/quic/moqt/moqt_parser.cc
index 9891815..a55455d 100644
--- a/quiche/quic/moqt/moqt_parser.cc
+++ b/quiche/quic/moqt/moqt_parser.cc
@@ -15,7 +15,7 @@
 #include <variant>
 #include <vector>
 
-
+#include "absl/base/casts.h"
 #include "absl/cleanup/cleanup.h"
 #include "absl/container/fixed_array.h"
 #include "absl/strings/str_cat.h"
diff --git a/quiche/quic/moqt/moqt_session.cc b/quiche/quic/moqt/moqt_session.cc
index 2e90a54..d42810e 100644
--- a/quiche/quic/moqt/moqt_session.cc
+++ b/quiche/quic/moqt/moqt_session.cc
@@ -14,7 +14,7 @@
 #include <variant>
 #include <vector>
 
-
+#include "absl/base/casts.h"
 #include "absl/base/nullability.h"
 #include "absl/container/btree_map.h"
 #include "absl/container/flat_hash_map.h"
@@ -565,7 +565,7 @@
           fetch_task.release();
           return;
         }
-        auto* subscribe = static_cast<SubscribeRemoteTrack*>(track);
+        auto* subscribe = absl::down_cast<SubscribeRemoteTrack*>(track);
         RemoteTrackByName(track->full_track_name());
         subscribe->OnJoiningFetchReady(std::move(fetch_task));
       },
@@ -1062,7 +1062,8 @@
                     << "request_id = " << message.request_id << " "
                     << track->full_track_name();
   }
-  SubscribeRemoteTrack* subscribe = static_cast<SubscribeRemoteTrack*>(track);
+  SubscribeRemoteTrack* subscribe =
+      absl::down_cast<SubscribeRemoteTrack*>(track);
   subscribe->OnObjectOrOk();
   auto [it, success] =
       session_->subscribe_by_alias_.try_emplace(message.track_alias, subscribe);
@@ -1151,13 +1152,14 @@
                     << ", error = " << static_cast<uint64_t>(message.error_code)
                     << " (" << message.reason_phrase << ")";
     if (track->is_fetch()) {
-      UpstreamFetch* fetch = static_cast<UpstreamFetch*>(track);
+      UpstreamFetch* fetch = absl::down_cast<UpstreamFetch*>(track);
       absl::Status status =
           RequestErrorCodeToStatus(message.error_code, message.reason_phrase);
       fetch->OnFetchResult(Location(0, 0), MoqtDeliveryOrder::kAscending,
                            status, nullptr);
     } else {
-      SubscribeRemoteTrack* subscribe = static_cast<SubscribeRemoteTrack*>(track);
+      SubscribeRemoteTrack* subscribe =
+          absl::down_cast<SubscribeRemoteTrack*>(track);
       // Delete the by-name entry at this point prevents Subscribe() from
       // throwing an error due to a duplicate track name. The other entries for
       // this subscribe will be deleted after calling Subscribe().
@@ -1220,7 +1222,7 @@
   if (it == session_->upstream_by_id_.end()) {
     return;
   }
-  auto* subscribe = static_cast<SubscribeRemoteTrack*>(it->second.get());
+  auto* subscribe = absl::down_cast<SubscribeRemoteTrack*>(it->second.get());
   QUIC_DLOG(INFO) << ENDPOINT << "Received a PUBLISH_DONE for "
                   << it->second->full_track_name();
   subscribe->OnPublishDone(
@@ -1261,7 +1263,7 @@
       message.track_namespace, message.parameters,
       [&](std::optional<MoqtRequestErrorInfo> error) {
         MoqtSession* session =
-            static_cast<MoqtSession*>(session_weakptr.GetIfAvailable());
+            absl::down_cast<MoqtSession*>(session_weakptr.GetIfAvailable());
         if (session == nullptr) {
           return;
         }
@@ -1548,7 +1550,7 @@
   }
   QUIC_DLOG(INFO) << ENDPOINT << "Received the FETCH_OK for request_id = "
                   << message.request_id << " " << track->full_track_name();
-  UpstreamFetch* fetch = static_cast<UpstreamFetch*>(track);
+  UpstreamFetch* fetch = absl::down_cast<UpstreamFetch*>(track);
   fetch->OnFetchResult(
       message.end_location, message.group_order, absl::OkStatus(),
       [=, session = session_]() { session->CancelFetch(message.request_id); });
@@ -1644,7 +1646,8 @@
         no_more_objects_ = true;
       }
     }
-    SubscribeRemoteTrack* subscribe = static_cast<SubscribeRemoteTrack*>(track);
+    SubscribeRemoteTrack* subscribe =
+        absl::down_cast<SubscribeRemoteTrack*>(track);
     subscribe->OnObjectOrOk();
     if (subscribe->visitor() != nullptr) {
       PublishedObjectMetadata metadata;
@@ -1660,7 +1663,7 @@
     }
   } else {  // FETCH
     track->OnObjectOrOk();
-    UpstreamFetch* fetch = static_cast<UpstreamFetch*>(track);
+    UpstreamFetch* fetch = absl::down_cast<UpstreamFetch*>(track);
     if (!fetch->LocationIsValid(Location(message.group_id, message.object_id),
                                 message.object_status, end_of_message)) {
       // TODO(martinduke): in https://github.com/moq-wg/moq-transport/pull/1409
@@ -1708,7 +1711,7 @@
   }
   // It's a subscribe.
   SubscribeRemoteTrack* subscribe =
-      static_cast<SubscribeRemoteTrack*>(track_.GetIfAvailable());
+      absl::down_cast<SubscribeRemoteTrack*>(track_.GetIfAvailable());
   if (subscribe == nullptr) {
     return;
   }
@@ -1728,7 +1731,7 @@
         << "Requesting object, track in unexpected state";
     return;
   }
-  UpstreamFetch* fetch = static_cast<UpstreamFetch*>(track);
+  UpstreamFetch* fetch = absl::down_cast<UpstreamFetch*>(track);
   UpstreamFetch::UpstreamFetchTask* task = fetch->task();
   if (task == nullptr) {
     return;
@@ -1796,7 +1799,7 @@
         << "Fetch pointer is null";
     return;
   }
-  UpstreamFetch* fetch = static_cast<UpstreamFetch*>(it->second.get());
+  UpstreamFetch* fetch = absl::down_cast<UpstreamFetch*>(it->second.get());
   if (!knew_track_alias) {
     // If the task already exists (FETCH_OK has arrived), the callback will
     // immediately execute to read the first object. Otherwise, it will only
@@ -1973,7 +1976,7 @@
           continue;
         }
         OutgoingDataStream* stream =
-            static_cast<OutgoingDataStream*>(raw_stream->visitor());
+            absl::down_cast<OutgoingDataStream*>(raw_stream->visitor());
         stream->CreateAndSetAlarm(session_->callbacks_.clock->ApproximateNow() +
                                   delivery_timeout());
       }
@@ -2004,7 +2007,7 @@
   }
 
   OutgoingDataStream* stream =
-      static_cast<OutgoingDataStream*>(raw_stream->visitor());
+      absl::down_cast<OutgoingDataStream*>(raw_stream->visitor());
   stream->SendObjects(*this);
 }
 
@@ -2036,7 +2039,7 @@
     return;
   }
   OutgoingDataStream* stream =
-      static_cast<OutgoingDataStream*>(raw_stream->visitor());
+      absl::down_cast<OutgoingDataStream*>(raw_stream->visitor());
   stream->Fin(location);
 }
 
@@ -2388,13 +2391,13 @@
 
 void MoqtSession::OnMalformedTrack(RemoteTrack* track) {
   if (!track->is_fetch()) {
-    static_cast<SubscribeRemoteTrack*>(track)->visitor()->OnMalformedTrack(
+    absl::down_cast<SubscribeRemoteTrack*>(track)->visitor()->OnMalformedTrack(
         track->full_track_name());
     Unsubscribe(track->full_track_name());
     return;
   }
   UpstreamFetch::UpstreamFetchTask* task =
-      static_cast<UpstreamFetch*>(track)->task();
+      absl::down_cast<UpstreamFetch*>(track)->task();
   if (task != nullptr) {
     task->OnStreamAndFetchClosed(kResetCodeMalformedTrack,
                                  "Malformed track received");
@@ -2435,7 +2438,7 @@
       continue;
     }
     DestroySubscription(
-        static_cast<SubscribeRemoteTrack*>(upstream->second.get()));
+        absl::down_cast<SubscribeRemoteTrack*>(upstream->second.get()));
   }
 }
 
diff --git a/quiche/quic/moqt/moqt_session_test.cc b/quiche/quic/moqt/moqt_session_test.cc
index fd8f33c..17022d3 100644
--- a/quiche/quic/moqt/moqt_session_test.cc
+++ b/quiche/quic/moqt/moqt_session_test.cc
@@ -13,6 +13,7 @@
 #include <utility>
 #include <variant>
 
+#include "absl/base/casts.h"
 #include "absl/status/status.h"
 #include "absl/strings/match.h"
 #include "absl/strings/string_view.h"
@@ -3203,7 +3204,7 @@
   std::unique_ptr<MoqtFetchTask> fetch_task =
       MoqtSessionPeer::CreateUpstreamFetch(&session, &stream);
   UpstreamFetch::UpstreamFetchTask* task =
-      static_cast<UpstreamFetch::UpstreamFetchTask*>(fetch_task.get());
+      absl::down_cast<UpstreamFetch::UpstreamFetchTask*>(fetch_task.get());
   ASSERT_NE(task, nullptr);
   EXPECT_FALSE(task->HasObject());
   bool object_ready = false;
@@ -3356,8 +3357,9 @@
   subscription->OnNewObjectAvailable(Location(0, 0), 0,
                                      kDefaultPublisherPriority,
                                      MoqtForwardingPreference::kSubgroup);
-  auto* delivery_alarm = static_cast<quic::test::MockAlarmFactory::TestAlarm*>(
-      MoqtSessionPeer::GetAlarm(stream_visitor.get()));
+  auto* delivery_alarm =
+      absl::down_cast<quic::test::MockAlarmFactory::TestAlarm*>(
+          MoqtSessionPeer::GetAlarm(stream_visitor.get()));
   EXPECT_CALL(data_mock, ResetWithUserCode(kResetCodeDeliveryTimeout))
       .WillOnce([&](webtransport::StreamErrorCode /*error*/) {
         stream_visitor.reset();
@@ -3409,8 +3411,9 @@
 
   EXPECT_CALL(data_mock, Writev(_, _)).WillOnce(Return(absl::OkStatus()));
   subscription->OnNewFinAvailable(Location(0, 0), 0);
-  auto* delivery_alarm = static_cast<quic::test::MockAlarmFactory::TestAlarm*>(
-      MoqtSessionPeer::GetAlarm(stream_visitor.get()));
+  auto* delivery_alarm =
+      absl::down_cast<quic::test::MockAlarmFactory::TestAlarm*>(
+          MoqtSessionPeer::GetAlarm(stream_visitor.get()));
   EXPECT_CALL(data_mock, ResetWithUserCode(kResetCodeDeliveryTimeout))
       .WillOnce([&](webtransport::StreamErrorCode /*error*/) {
         stream_visitor.reset();
@@ -3493,8 +3496,9 @@
                                      MoqtForwardingPreference::kSubgroup);
 
   // Group 1 should start the timer on the Group 0 stream.
-  auto* delivery_alarm = static_cast<quic::test::MockAlarmFactory::TestAlarm*>(
-      MoqtSessionPeer::GetAlarm(stream_visitor1.get()));
+  auto* delivery_alarm =
+      absl::down_cast<quic::test::MockAlarmFactory::TestAlarm*>(
+          MoqtSessionPeer::GetAlarm(stream_visitor1.get()));
   EXPECT_CALL(data_mock1, ResetWithUserCode(kResetCodeDeliveryTimeout))
       .WillOnce([&](webtransport::StreamErrorCode /*error*/) {
         stream_visitor1.reset();
@@ -3586,8 +3590,9 @@
       127, std::nullopt, VersionSpecificParameters()));
   session_.GoAway("");
   // GoAway timer fires.
-  auto* goaway_alarm = static_cast<quic::test::MockAlarmFactory::TestAlarm*>(
-      MoqtSessionPeer::GetGoAwayTimeoutAlarm(&session_));
+  auto* goaway_alarm =
+      absl::down_cast<quic::test::MockAlarmFactory::TestAlarm*>(
+          MoqtSessionPeer::GetGoAwayTimeoutAlarm(&session_));
   EXPECT_CALL(mock_session_,
               CloseSession(static_cast<webtransport::SessionErrorCode>(
                                MoqtError::kGoawayTimeout),
@@ -3795,7 +3800,7 @@
       MoqtPublishDone(0, PublishDoneCode::kTrackEnded, kNumStreams + 1, "foo"));
   EXPECT_FALSE(track->all_streams_closed());
   auto* publish_done_alarm =
-      static_cast<quic::test::MockAlarmFactory::TestAlarm*>(
+      absl::down_cast<quic::test::MockAlarmFactory::TestAlarm*>(
           MoqtSessionPeer::GetPublishDoneAlarm(track));
   EXPECT_CALL(remote_track_visitor_, OnPublishDone(_));
   publish_done_alarm->Fire();
diff --git a/quiche/quic/moqt/test_tools/moqt_session_peer.h b/quiche/quic/moqt/test_tools/moqt_session_peer.h
index dfad53b..1fa97e5 100644
--- a/quiche/quic/moqt/test_tools/moqt_session_peer.h
+++ b/quiche/quic/moqt/test_tools/moqt_session_peer.h
@@ -10,7 +10,7 @@
 #include <optional>
 #include <utility>
 
-
+#include "absl/base/casts.h"
 #include "absl/status/status.h"
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/quic_alarm.h"
@@ -119,7 +119,7 @@
   static bool InSubscriptionWindow(MoqtObjectListener* subscription,
                                    Location sequence) {
     std::optional<SubscriptionFilter> filter =
-        static_cast<MoqtSession::PublishedSubscription*>(subscription)
+        absl::down_cast<MoqtSession::PublishedSubscription*>(subscription)
             ->parameters_.subscription_filter;
     return (!filter.has_value() || filter->InWindow(sequence));
   }
@@ -199,7 +199,7 @@
                  task = std::move(fetch_task);
                }));
     QUICHE_DCHECK(success);
-    UpstreamFetch* fetch = static_cast<UpstreamFetch*>(it->second.get());
+    UpstreamFetch* fetch = absl::down_cast<UpstreamFetch*>(it->second.get());
     // Initialize the fetch task
     fetch->OnFetchResult(
         Location{4, 10}, order, absl::OkStatus(),
@@ -208,7 +208,7 @@
         });
     ;
     auto mock_session =
-        static_cast<webtransport::test::MockSession*>(session->session());
+        absl::down_cast<webtransport::test::MockSession*>(session->session());
     EXPECT_CALL(*mock_session, AcceptIncomingUnidirectionalStream())
         .WillOnce(testing::Return(stream))
         .WillOnce(testing::Return(nullptr));
@@ -225,7 +225,7 @@
   }
 
   static quic::QuicAlarm* GetAlarm(webtransport::StreamVisitor* visitor) {
-    return static_cast<MoqtSession::OutgoingDataStream*>(visitor)
+    return absl::down_cast<MoqtSession::OutgoingDataStream*>(visitor)
         ->delivery_timeout_alarm_.get();
   }
 
@@ -240,18 +240,18 @@
 
   static quic::QuicTimeDelta GetDeliveryTimeout(
       MoqtObjectListener* subscription) {
-    return static_cast<MoqtSession::PublishedSubscription*>(subscription)
+    return absl::down_cast<MoqtSession::PublishedSubscription*>(subscription)
         ->delivery_timeout();
   }
   static void SetDeliveryTimeout(MoqtObjectListener* subscription,
                                  quic::QuicTimeDelta timeout) {
-    static_cast<MoqtSession::PublishedSubscription*>(subscription)
+    absl::down_cast<MoqtSession::PublishedSubscription*>(subscription)
         ->parameters_.delivery_timeout = timeout;
   }
 
   static bool SubgroupHasBeenReset(MoqtObjectListener* subscription,
                                    DataStreamIndex index) {
-    return static_cast<MoqtSession::PublishedSubscription*>(subscription)
+    return absl::down_cast<MoqtSession::PublishedSubscription*>(subscription)
         ->reset_subgroups()
         .contains(index);
   }
diff --git a/quiche/quic/moqt/test_tools/moqt_simulator.cc b/quiche/quic/moqt/test_tools/moqt_simulator.cc
index 4df183f..1b0d796 100644
--- a/quiche/quic/moqt/test_tools/moqt_simulator.cc
+++ b/quiche/quic/moqt/test_tools/moqt_simulator.cc
@@ -17,7 +17,7 @@
 #include <vector>
 
 #include "absl/algorithm/container.h"
-
+#include "absl/base/casts.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/str_format.h"
 #include "absl/strings/str_join.h"
diff --git a/quiche/quic/moqt/tools/moqt_relay_test.cc b/quiche/quic/moqt/tools/moqt_relay_test.cc
index 66df0d8..83210cb 100644
--- a/quiche/quic/moqt/tools/moqt_relay_test.cc
+++ b/quiche/quic/moqt/tools/moqt_relay_test.cc
@@ -11,7 +11,7 @@
 #include <string>
 #include <utility>
 
-
+#include "absl/base/casts.h"
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/io/quic_event_loop.h"
 #include "quiche/quic/core/quic_time.h"
@@ -185,7 +185,7 @@
   relay_.publisher()->AddNamespaceSubscriber(foo, &relay_probe);
   upstream_.publisher()->AddNamespaceSubscriber(foo, &upstream_probe);
   MoqtSession* upstream_session =
-      static_cast<MoqtSession*>(upstream_.last_server_session);
+      absl::down_cast<MoqtSession*>(upstream_.last_server_session);
   // Downstream publishes a namespace. It's stored in relay_ but upstream_
   // hasn't been notified.
   downstream_.client_session()->PublishNamespace(
diff --git a/quiche/quic/qbone/qbone_client.cc b/quiche/quic/qbone/qbone_client.cc
index 94a62e1..9f3739a 100644
--- a/quiche/quic/qbone/qbone_client.cc
+++ b/quiche/quic/qbone/qbone_client.cc
@@ -7,7 +7,7 @@
 #include <memory>
 #include <utility>
 
-
+#include "absl/base/casts.h"
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/io/quic_event_loop.h"
 #include "quiche/quic/core/quic_bandwidth.h"
@@ -50,7 +50,7 @@
 QboneClient::~QboneClient() { ResetSession(); }
 
 QboneClientSession* QboneClient::qbone_session() {
-  return static_cast<QboneClientSession*>(QuicClientBase::session());
+  return absl::down_cast<QboneClientSession*>(QuicClientBase::session());
 }
 
 void QboneClient::ProcessPacketFromNetwork(absl::string_view packet) {
diff --git a/quiche/quic/test_tools/quic_spdy_session_peer.cc b/quiche/quic/test_tools/quic_spdy_session_peer.cc
index 9ef123b..b7b4650 100644
--- a/quiche/quic/test_tools/quic_spdy_session_peer.cc
+++ b/quiche/quic/test_tools/quic_spdy_session_peer.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-
+#include "absl/base/casts.h"
 #include "quiche/quic/core/http/quic_spdy_session.h"
 #include "quiche/quic/core/qpack/qpack_receive_stream.h"
 #include "quiche/quic/core/quic_utils.h"
@@ -32,7 +32,7 @@
         QuicUtils::GetHeadersStreamId(session->transport_version())) {
       it.second.reset(headers_stream);
       session->headers_stream_ =
-          static_cast<QuicHeadersStream*>(it.second.get());
+          absl::down_cast<QuicHeadersStream*>(it.second.get());
       break;
     }
   }
diff --git a/quiche/quic/test_tools/quic_test_client.cc b/quiche/quic/test_tools/quic_test_client.cc
index 5160675..feb51b1 100644
--- a/quiche/quic/test_tools/quic_test_client.cc
+++ b/quiche/quic/test_tools/quic_test_client.cc
@@ -234,13 +234,13 @@
 
 MockableQuicClientDefaultNetworkHelper*
 MockableQuicClient::mockable_network_helper() {
-  return static_cast<MockableQuicClientDefaultNetworkHelper*>(
+  return absl::down_cast<MockableQuicClientDefaultNetworkHelper*>(
       default_network_helper());
 }
 
 const MockableQuicClientDefaultNetworkHelper*
 MockableQuicClient::mockable_network_helper() const {
-  return static_cast<const MockableQuicClientDefaultNetworkHelper*>(
+  return absl::down_cast<const MockableQuicClientDefaultNetworkHelper*>(
       default_network_helper());
 }
 
@@ -739,7 +739,7 @@
     latest_created_stream_ = nullptr;
   }
   QuicSpdyClientStream* client_stream =
-      static_cast<QuicSpdyClientStream*>(stream);
+      absl::down_cast<QuicSpdyClientStream*>(stream);
   QuicStreamId id = client_stream->id();
   closed_stream_states_.insert(std::make_pair(
       id,
diff --git a/quiche/quic/tools/quic_spdy_client_base.cc b/quiche/quic/tools/quic_spdy_client_base.cc
index f8401fe..ad66ba4 100644
--- a/quiche/quic/tools/quic_spdy_client_base.cc
+++ b/quiche/quic/tools/quic_spdy_client_base.cc
@@ -10,7 +10,7 @@
 #include <utility>
 #include <vector>
 
-
+#include "absl/base/casts.h"
 #include "absl/strings/numbers.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
@@ -38,16 +38,15 @@
       store_response_(false),
       latest_response_code_(-1) {}
 
-QuicSpdyClientBase::~QuicSpdyClientBase() {
-  ResetSession();
-}
+QuicSpdyClientBase::~QuicSpdyClientBase() { ResetSession(); }
 
 QuicSpdyClientSession* QuicSpdyClientBase::client_session() {
-  return static_cast<QuicSpdyClientSession*>(QuicClientBase::session());
+  return absl::down_cast<QuicSpdyClientSession*>(QuicClientBase::session());
 }
 
 const QuicSpdyClientSession* QuicSpdyClientBase::client_session() const {
-  return static_cast<const QuicSpdyClientSession*>(QuicClientBase::session());
+  return absl::down_cast<const QuicSpdyClientSession*>(
+      QuicClientBase::session());
 }
 
 void QuicSpdyClientBase::InitializeSession() {
