diff --git a/quic/core/http/http_frames.h b/quic/core/http/http_frames.h
index 319e42b..87c574b 100644
--- a/quic/core/http/http_frames.h
+++ b/quic/core/http/http_frames.h
@@ -15,7 +15,6 @@
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/quic/core/http/spdy_utils.h"
 #include "net/third_party/quiche/src/quic/core/quic_types.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_string_utils.h"
 #include "net/third_party/quiche/src/spdy/core/spdy_framer.h"
 
 namespace quic {
@@ -88,7 +87,7 @@
           SpdyUtils::H3SettingsToString(
               static_cast<Http3AndQpackSettingsIdentifiers>(it.first)),
           " = ", it.second, "; ");
-      QuicStrAppend(&s, setting);
+      absl::StrAppend(&s, setting);
     }
     return s;
   }
diff --git a/quic/core/qpack/qpack_instruction_encoder.cc b/quic/core/qpack/qpack_instruction_encoder.cc
index d114ece..2b9a1eb 100644
--- a/quic/core/qpack/qpack_instruction_encoder.cc
+++ b/quic/core/qpack/qpack_instruction_encoder.cc
@@ -6,12 +6,12 @@
 
 #include <limits>
 
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/http2/hpack/huffman/hpack_huffman_encoder.h"
 #include "net/third_party/quiche/src/http2/hpack/varint/hpack_varint_encoder.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_string_utils.h"
 
 namespace quic {
 
@@ -167,7 +167,7 @@
   if (use_huffman_) {
     http2::HuffmanEncodeFast(string_to_write, string_length_, output);
   } else {
-    QuicStrAppend(output, string_to_write);
+    absl::StrAppend(output, string_to_write);
   }
 
   ++field_;
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 7258d8c..8f1fd4b 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -44,7 +44,6 @@
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_map_util.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_socket_address.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_string_utils.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 
 namespace quic {
@@ -839,7 +838,7 @@
   }
   std::string error_details = "Received public reset.";
   if (perspective_ == Perspective::IS_CLIENT && !packet.endpoint_id.empty()) {
-    QuicStrAppend(&error_details, " From ", packet.endpoint_id, ".");
+    absl::StrAppend(&error_details, " From ", packet.endpoint_id, ".");
   }
   QUIC_DLOG(INFO) << ENDPOINT << error_details;
   QUIC_CODE_COUNT(quic_tear_down_local_connection_on_public_reset);
diff --git a/quic/core/quic_packets.cc b/quic/core/quic_packets.cc
index e4bf322..40202e6 100644
--- a/quic/core/quic_packets.cc
+++ b/quic/core/quic_packets.cc
@@ -15,7 +15,6 @@
 #include "net/third_party/quiche/src/quic/core/quic_versions.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_flag_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_string_utils.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_text_utils.h"
 
 namespace quic {
@@ -580,9 +579,9 @@
                    ", packet_length: ", packet.length(),
                    ", header_format: ", form, ", version_flag: ", version_flag);
   if (version_flag) {
-    QuicStrAppend(&output, ", version: ", ParsedQuicVersionToString(version));
+    absl::StrAppend(&output, ", version: ", ParsedQuicVersionToString(version));
   }
-  QuicStrAppend(
+  absl::StrAppend(
       &output,
       ", destination_connection_id: ", destination_connection_id.ToString(),
       ", source_connection_id: ", source_connection_id.ToString(), " }\n");
diff --git a/quic/platform/api/quic_string_utils.h b/quic/platform/api/quic_string_utils.h
deleted file mode 100644
index e069948..0000000
--- a/quic/platform/api/quic_string_utils.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2017 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.
-
-#ifndef QUICHE_QUIC_PLATFORM_API_QUIC_STRING_UTILS_H_
-#define QUICHE_QUIC_PLATFORM_API_QUIC_STRING_UTILS_H_
-
-#include <string>
-#include <utility>
-
-#include "net/quic/platform/impl/quic_string_utils_impl.h"
-
-namespace quic {
-
-template <typename... Args>
-inline void QuicStrAppend(std::string* output, const Args&... args) {
-  QuicStrAppendImpl(output, std::forward<const Args&>(args)...);
-}
-
-}  // namespace quic
-
-#endif  // QUICHE_QUIC_PLATFORM_API_QUIC_STRING_UTILS_H_
diff --git a/quic/platform/api/quic_string_utils_test.cc b/quic/platform/api/quic_string_utils_test.cc
deleted file mode 100644
index fa323c5..0000000
--- a/quic/platform/api/quic_string_utils_test.cc
+++ /dev/null
@@ -1,180 +0,0 @@
-// Copyright 2017 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 "net/third_party/quiche/src/quic/platform/api/quic_string_utils.h"
-
-#include <cstdint>
-
-#include "absl/strings/str_cat.h"
-#include "absl/strings/string_view.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
-
-namespace quic {
-namespace test {
-namespace {
-
-TEST(QuicStringUtilsTest, QuicheStrCat) {
-  // No arguments.
-  EXPECT_EQ("", absl::StrCat());
-
-  // Single string-like argument.
-  const char kFoo[] = "foo";
-  const std::string string_foo(kFoo);
-  const absl::string_view stringpiece_foo(string_foo);
-  EXPECT_EQ("foo", absl::StrCat(kFoo));
-  EXPECT_EQ("foo", absl::StrCat(string_foo));
-  EXPECT_EQ("foo", absl::StrCat(stringpiece_foo));
-
-  // Two string-like arguments.
-  const char kBar[] = "bar";
-  const absl::string_view stringpiece_bar(kBar);
-  const std::string string_bar(kBar);
-  EXPECT_EQ("foobar", absl::StrCat(kFoo, kBar));
-  EXPECT_EQ("foobar", absl::StrCat(kFoo, string_bar));
-  EXPECT_EQ("foobar", absl::StrCat(kFoo, stringpiece_bar));
-  EXPECT_EQ("foobar", absl::StrCat(string_foo, kBar));
-  EXPECT_EQ("foobar", absl::StrCat(string_foo, string_bar));
-  EXPECT_EQ("foobar", absl::StrCat(string_foo, stringpiece_bar));
-  EXPECT_EQ("foobar", absl::StrCat(stringpiece_foo, kBar));
-  EXPECT_EQ("foobar", absl::StrCat(stringpiece_foo, string_bar));
-  EXPECT_EQ("foobar", absl::StrCat(stringpiece_foo, stringpiece_bar));
-
-  // Many-many arguments.
-  EXPECT_EQ("foobarbazquxquuxquuzcorgegraultgarplywaldofredplughxyzzythud",
-            absl::StrCat("foo", "bar", "baz", "qux", "quux", "quuz", "corge",
-                         "grault", "garply", "waldo", "fred", "plugh", "xyzzy",
-                         "thud"));
-
-  // Numerical arguments.
-  const int16_t i = 1;
-  const uint64_t u = 8;
-  const double d = 3.1415;
-
-  EXPECT_EQ("1 8", absl::StrCat(i, " ", u));
-  EXPECT_EQ("3.14151181", absl::StrCat(d, i, i, u, i));
-  EXPECT_EQ("i: 1, u: 8, d: 3.1415",
-            absl::StrCat("i: ", i, ", u: ", u, ", d: ", d));
-
-  // Boolean arguments.
-  const bool t = true;
-  const bool f = false;
-
-  EXPECT_EQ("1", absl::StrCat(t));
-  EXPECT_EQ("0", absl::StrCat(f));
-  EXPECT_EQ("0110", absl::StrCat(f, t, t, f));
-
-  // Mixed string-like, numerical, and Boolean arguments.
-  EXPECT_EQ("foo1foo081bar3.14151",
-            absl::StrCat(kFoo, i, string_foo, f, u, t, stringpiece_bar, d, t));
-  EXPECT_EQ("3.141511bar18bar13.14150",
-            absl::StrCat(d, t, t, string_bar, i, u, kBar, t, d, f));
-}
-
-TEST(QuicStringUtilsTest, QuicStrAppend) {
-  // No arguments on empty string.
-  std::string output;
-  QuicStrAppend(&output);
-  EXPECT_TRUE(output.empty());
-
-  // Single string-like argument.
-  const char kFoo[] = "foo";
-  const std::string string_foo(kFoo);
-  const absl::string_view stringpiece_foo(string_foo);
-  QuicStrAppend(&output, kFoo);
-  EXPECT_EQ("foo", output);
-  QuicStrAppend(&output, string_foo);
-  EXPECT_EQ("foofoo", output);
-  QuicStrAppend(&output, stringpiece_foo);
-  EXPECT_EQ("foofoofoo", output);
-
-  // No arguments on non-empty string.
-  QuicStrAppend(&output);
-  EXPECT_EQ("foofoofoo", output);
-
-  output.clear();
-
-  // Two string-like arguments.
-  const char kBar[] = "bar";
-  const absl::string_view stringpiece_bar(kBar);
-  const std::string string_bar(kBar);
-  QuicStrAppend(&output, kFoo, kBar);
-  EXPECT_EQ("foobar", output);
-  QuicStrAppend(&output, kFoo, string_bar);
-  EXPECT_EQ("foobarfoobar", output);
-  QuicStrAppend(&output, kFoo, stringpiece_bar);
-  EXPECT_EQ("foobarfoobarfoobar", output);
-  QuicStrAppend(&output, string_foo, kBar);
-  EXPECT_EQ("foobarfoobarfoobarfoobar", output);
-
-  output.clear();
-
-  QuicStrAppend(&output, string_foo, string_bar);
-  EXPECT_EQ("foobar", output);
-  QuicStrAppend(&output, string_foo, stringpiece_bar);
-  EXPECT_EQ("foobarfoobar", output);
-  QuicStrAppend(&output, stringpiece_foo, kBar);
-  EXPECT_EQ("foobarfoobarfoobar", output);
-  QuicStrAppend(&output, stringpiece_foo, string_bar);
-  EXPECT_EQ("foobarfoobarfoobarfoobar", output);
-
-  output.clear();
-
-  QuicStrAppend(&output, stringpiece_foo, stringpiece_bar);
-  EXPECT_EQ("foobar", output);
-
-  // Many-many arguments.
-  QuicStrAppend(&output, "foo", "bar", "baz", "qux", "quux", "quuz", "corge",
-                "grault", "garply", "waldo", "fred", "plugh", "xyzzy", "thud");
-  EXPECT_EQ(
-      "foobarfoobarbazquxquuxquuzcorgegraultgarplywaldofredplughxyzzythud",
-      output);
-
-  output.clear();
-
-  // Numerical arguments.
-  const int16_t i = 1;
-  const uint64_t u = 8;
-  const double d = 3.1415;
-
-  QuicStrAppend(&output, i, " ", u);
-  EXPECT_EQ("1 8", output);
-  QuicStrAppend(&output, d, i, i, u, i);
-  EXPECT_EQ("1 83.14151181", output);
-  QuicStrAppend(&output, "i: ", i, ", u: ", u, ", d: ", d);
-  EXPECT_EQ("1 83.14151181i: 1, u: 8, d: 3.1415", output);
-
-  output.clear();
-
-  // Boolean arguments.
-  const bool t = true;
-  const bool f = false;
-
-  QuicStrAppend(&output, t);
-  EXPECT_EQ("1", output);
-  QuicStrAppend(&output, f);
-  EXPECT_EQ("10", output);
-  QuicStrAppend(&output, f, t, t, f);
-  EXPECT_EQ("100110", output);
-
-  output.clear();
-
-  // Mixed string-like, numerical, and Boolean arguments.
-  QuicStrAppend(&output, kFoo, i, string_foo, f, u, t, stringpiece_bar, d, t);
-  EXPECT_EQ("foo1foo081bar3.14151", output);
-  QuicStrAppend(&output, d, t, t, string_bar, i, u, kBar, t, d, f);
-  EXPECT_EQ("foo1foo081bar3.141513.141511bar18bar13.14150", output);
-}
-
-TEST(QuicStringUtilsTest, QuicStringPrintf) {
-  EXPECT_EQ("", quiche::QuicheStringPrintf("%s", ""));
-  EXPECT_EQ("foobar", quiche::QuicheStringPrintf("%sbar", "foo"));
-  EXPECT_EQ("foobar", quiche::QuicheStringPrintf("%s%s", "foo", "bar"));
-  EXPECT_EQ("foo: 1, bar: 2.0",
-            quiche::QuicheStringPrintf("foo: %d, bar: %.1f", 1, 2.0));
-}
-
-}  // namespace
-}  // namespace test
-}  // namespace quic
