diff --git a/wpiutil/examples/webserver/webserver.cpp b/wpiutil/examples/webserver/webserver.cpp
index e112d04..503405f 100644
--- a/wpiutil/examples/webserver/webserver.cpp
+++ b/wpiutil/examples/webserver/webserver.cpp
@@ -1,16 +1,13 @@
-/*----------------------------------------------------------------------------*/
-/* Copyright (c) 2018 FIRST. All Rights Reserved.                             */
-/* Open Source Software - may be modified and shared by FRC teams. The code   */
-/* must be accompanied by the FIRST BSD license file in the root directory of */
-/* the project.                                                               */
-/*----------------------------------------------------------------------------*/
+// Copyright (c) FIRST and other WPILib contributors.
+// Open Source Software; you can modify and/or share it under the terms of
+// the WPILib BSD license file in the root directory of this project.
 
 #include <cstdio>
 
+#include "fmt/format.h"
 #include "wpi/EventLoopRunner.h"
 #include "wpi/HttpServerConnection.h"
 #include "wpi/UrlParser.h"
-#include "wpi/raw_ostream.h"
 #include "wpi/uv/Loop.h"
 #include "wpi/uv/Tcp.h"
 
@@ -26,7 +23,7 @@
 };
 
 void MyHttpServerConnection::ProcessRequest() {
-  wpi::errs() << "HTTP request: '" << m_request.GetUrl() << "'\n";
+  fmt::print(stderr, "HTTP request: '{}'\n", m_request.GetUrl());
   wpi::UrlParser url{m_request.GetUrl(),
                      m_request.GetMethod() == wpi::HTTP_CONNECT};
   if (!url.IsValid()) {
@@ -35,23 +32,25 @@
     return;
   }
 
-  wpi::StringRef path;
-  if (url.HasPath()) path = url.GetPath();
-  wpi::errs() << "path: \"" << path << "\"\n";
+  std::string_view path;
+  if (url.HasPath()) {
+    path = url.GetPath();
+  }
+  fmt::print(stderr, "path: \"{}\"\n", path);
 
-  wpi::StringRef query;
-  if (url.HasQuery()) query = url.GetQuery();
-  wpi::errs() << "query: \"" << query << "\"\n";
+  std::string_view query;
+  if (url.HasQuery()) {
+    query = url.GetQuery();
+  }
+  fmt::print(stderr, "query: \"{}\"\n", query);
 
   const bool isGET = m_request.GetMethod() == wpi::HTTP_GET;
-  if (isGET && path.equals("/")) {
+  if (isGET && path == "/") {
     // build HTML root page
-    wpi::SmallString<256> buf;
-    wpi::raw_svector_ostream os{buf};
-    os << "<html><head><title>WebServer Example</title></head>";
-    os << "<body><p>This is an example root page from the webserver.";
-    os << "</body></html>";
-    SendResponse(200, "OK", "text/html", os.str());
+    SendResponse(200, "OK", "text/html",
+                 "<html><head><title>WebServer Example</title></head>"
+                 "<body><p>This is an example root page from the webserver."
+                 "</body></html>");
   } else {
     SendError(404, "Resource not found");
   }
@@ -69,8 +68,10 @@
     // when we get a connection, accept it and start reading
     tcp->connection.connect([srv = tcp.get()] {
       auto tcp = srv->Accept();
-      if (!tcp) return;
-      wpi::errs() << "Got a connection\n";
+      if (!tcp) {
+        return;
+      }
+      std::fputs("Got a connection\n", stderr);
       auto conn = std::make_shared<MyHttpServerConnection>(tcp);
       tcp->SetData(conn);
     });
@@ -78,7 +79,7 @@
     // start listening for incoming connections
     tcp->Listen();
 
-    wpi::errs() << "Listening on port 8080\n";
+    std::fputs("Listening on port 8080\n", stderr);
   });
 
   // wait for a keypress to terminate
