<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: zhuweiye</title>
    <description>The latest articles on DEV Community by zhuweiye (@antruly).</description>
    <link>https://dev.to/antruly</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4212821%2F75c8a58d-d8ef-4a49-902e-105b1639a90d.jpg</url>
      <title>DEV Community: zhuweiye</title>
      <link>https://dev.to/antruly</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/antruly"/>
    <language>en</language>
    <item>
      <title>libuvcpp v1.9.0: Redefining the C++ Network Stack with Raw Performance</title>
      <dc:creator>zhuweiye</dc:creator>
      <pubDate>Thu, 29 Oct 2026 03:51:00 +0000</pubDate>
      <link>https://dev.to/antruly/libuvcpp-v190-redefining-the-c-network-stack-with-raw-performance-ffi</link>
      <guid>https://dev.to/antruly/libuvcpp-v190-redefining-the-c-network-stack-with-raw-performance-ffi</guid>
      <description>&lt;p&gt;&lt;strong&gt;libuvcpp v1.9.0 is a "fill-the-gaps" release.&lt;/strong&gt; Instead of introducing new top-level modules, this version meticulously patches up HTTP consistency, finalizes h3/WebTransport support, enhances TLS/WS server capabilities, and adds much-needed QUIC observability. &lt;/p&gt;

&lt;p&gt;More importantly, in the latest authoritative HttpArena benchmarks, libuvcpp just delivered a performance report card that demands the C++ community's attention: &lt;strong&gt;it ranks #1 among all C++ frameworks and sits firmly in the global top tier across all three core protocols: HTTP/1.1, HTTP/2, and HTTP/3.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Performance: Dominating the Authoritative Benchmarks
&lt;/h2&gt;

&lt;p&gt;HttpArena is one of the most comprehensive HTTP open-source benchmarking platforms, covering HTTP/1.1, HTTP/2, HTTP/3, gRPC, and WebSocket scenarios.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTP/1.1: Composite Score 7064 (Global #7, C++ #1)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Among the 81 frameworks tested in the HTTP/1.1 benchmark, libuvcpp ranked &lt;strong&gt;#7&lt;/strong&gt; globally with a composite score of &lt;strong&gt;7064&lt;/strong&gt;, making it the highest-ranked C++ framework. It sits right behind a handful of frameworks hyper-optimized for raw speed, like dusty (Zig), tako (Rust), and actix (Rust).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ircffxbd5l8vfit7wi2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ircffxbd5l8vfit7wi2.png" alt="HTTP/1.1 Benchmark" width="799" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTP/2: Composite Score 4339 (Global #1)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;HTTP/2 is where libuvcpp truly shines. With a composite score of &lt;strong&gt;4339&lt;/strong&gt;, it took the &lt;strong&gt;#1 spot globally&lt;/strong&gt;, followed by OCaml's aaraara (4188) and Mojo's flare (3870). libuvcpp performs exceptionally well across all HTTP/2 sub-configurations (baseline, static, h2c).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6sivu5ogzenr2p7t2rcn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6sivu5ogzenr2p7t2rcn.png" alt="HTTP/2 Benchmark" width="799" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTP/3: Composite Score 2188 (Global #1)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the latest HTTP/3 benchmarks, libuvcpp also claimed &lt;strong&gt;#1&lt;/strong&gt; with a composite score of &lt;strong&gt;2188&lt;/strong&gt;, beating bun (TS, 1775) and flare (Mojo, 1770). HTTP/3, built on QUIC, is notoriously difficult to implement. Winning here proves that libuvcpp's investment in modern transport protocols has paid off.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg8jn1sfa2oi4lfgy4r2p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg8jn1sfa2oi4lfgy4r2p.png" alt="HTTP/3 Benchmark" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Global Perspective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Looking at the combined leaderboards, libuvcpp is one of the few frameworks to break into the global top 10 across &lt;strong&gt;all three protocol families&lt;/strong&gt;. And in HTTP/2 and HTTP/3, it goes straight to the top.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note: Benchmark results are influenced by hardware, configuration, and testing methodologies. However, for libuvcpp to consistently land in the top tier across multiple independent protocol benchmarks speaks volumes about the strength of its underlying performance.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What’s New in v1.9.0?
&lt;/h2&gt;

&lt;p&gt;Version 1.9.0 folds the development line from 1.8.11 to 1.8.15 into one release, focusing on four main areas: &lt;strong&gt;HTTP consistency, h3/WebTransport finalization, TLS &amp;amp; WebSocket server capabilities, and QUIC observability.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTP Consistency&lt;/strong&gt; is the most "unsexy but critical" part of this update. The response side of h2/h3 now validates &lt;code&gt;content-length&lt;/code&gt;—responses lying about their length will no longer be treated as successfully completed. Trailers in h1 finally go through a real chunked stream (&lt;code&gt;send_trailers()&lt;/code&gt; / &lt;code&gt;set_trailers()&lt;/code&gt;). Status codes like 1xx/204/304 no longer redundantly append &lt;code&gt;content-length: 0&lt;/code&gt;. Clients can also opt-in to follow redirects (same-origin only, with a hop limit).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;h3 / WebTransport:&lt;/strong&gt; The webapp now supports h3 trailers and streaming responses (&lt;code&gt;begin_chunked&lt;/code&gt; → &lt;code&gt;write_chunk&lt;/code&gt; → &lt;code&gt;end&lt;/code&gt;). WebTransport establishment timing, &lt;code&gt;on_open&lt;/code&gt; delivery, Close/Drain capsules, and &lt;code&gt;SESSION_GONE&lt;/code&gt; stream resets have all been aligned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TLS &amp;amp; WebSocket Server Capabilities:&lt;/strong&gt; Two practical gaps were filled: Server Name Indication (SNI) multi-certificates (wildcard, exact match priority, fallback to default), and server-side WS subprotocol selection (App config on h1, returning the first subprotocol on h2/h3).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observability:&lt;/strong&gt; &lt;code&gt;uvcpp_quic_connection::stats()&lt;/code&gt; now gives you direct access to RTT, cwnd, packet loss, and send/receive counts—QUIC is no longer a black box.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚠️ Breaking Changes:&lt;/strong&gt; v1.9.0 introduces breaking changes: &lt;code&gt;send_trailers()&lt;/code&gt; error code semantics on h1 have changed, and the C API's &lt;code&gt;expected_body()&lt;/code&gt; behavior has been corrected. Public classes have new members/methods, so users compiling against older headers must recompile. The repository does not guarantee binary layout compatibility across versions.&lt;/p&gt;




&lt;h2&gt;
  
  
  More Than a Wrapper: Modular Architecture and WebApp
&lt;/h2&gt;

&lt;p&gt;libuvcpp is organized in layers, from bottom to top: &lt;strong&gt;core → handle/req → net → ssl → http2 → web → webapp&lt;/strong&gt;, with QUIC and HTTP/3 integrated as parallel transport layers.&lt;/p&gt;

&lt;p&gt;The bottom layer is a RAII encapsulation of libuv handles and requests. Classes like &lt;code&gt;uvcpp_loop&lt;/code&gt;, &lt;code&gt;uvcpp_tcp&lt;/code&gt;, &lt;code&gt;uvcpp_timer&lt;/code&gt;, and &lt;code&gt;uvcpp_write&lt;/code&gt; give event loops and async operations clear C++ ownership semantics. The Net layer provides &lt;code&gt;uvcpp_tcp_client/server&lt;/code&gt; and &lt;code&gt;uvcpp_udp_client/server&lt;/code&gt;, where the TCP client is a &lt;strong&gt;dual-mode API&lt;/strong&gt;: asynchronous callbacks, or synchronous &lt;code&gt;wait()&lt;/code&gt; with timeouts.&lt;/p&gt;

&lt;p&gt;The Web layer covers HTTP/1.1, WebSocket, and HTTP/2 (via nghttp2). All optional features are opt-in: zlib/brotli compression, OpenSSL, nghttp2, QUIC, HTTP3, and yyjson are independently toggleable. Enabling &lt;code&gt;UVCPP_BUILD_WEB=ON&lt;/code&gt; won't silently drag in a pile of dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The WebApp Framework&lt;/strong&gt; is a higher-level application abstraction. You write handlers, not wire formats:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;uvcpp_web_app&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_port&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;web_middleware_access_log&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
   &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;web_middleware_cors&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/hello"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[](&lt;/span&gt;&lt;span class="n"&gt;uvcpp_web_request&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;uvcpp_web_response&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;uvcpp_web_next&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json_str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s"&gt;hello&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s"&gt;world&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s"&gt;}"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;websocket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/echo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[](&lt;/span&gt;&lt;span class="n"&gt;uvcpp_web_ws_request&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;auto&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;on_text&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;send_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c_str&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This snippet covers routing, middleware, JSON responses, and a WebSocket echo server—in the raw libuv C API, this would require a significant amount of boilerplate just to reach the same starting line. WebApp also comes with static file serving (ETag, Range, SPA fallback), streaming multipart uploads, request body streaming, and a WebSocket client with auto-reconnect.&lt;/p&gt;

&lt;p&gt;For cross-language scenarios, libuvcpp provides a &lt;strong&gt;C ABI&lt;/strong&gt; (&lt;code&gt;uvcpp_c_*&lt;/code&gt;). By version 1.5.3, it had 402 functions covering foundation, net, webapp, HTTP/2, QUIC, HTTP/3, and db. The repository even includes a C# binding.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Prebuilt packages cover six platforms: Windows x64/arm64 (MSVC and MinGW), and Linux x64/arm64 (GCC). Each package includes both Release and Debug libraries, public headers, &lt;code&gt;uvcpp.pc&lt;/code&gt;, and CMake package configs—no need to carry around DLLs or &lt;code&gt;.so&lt;/code&gt; files manually.&lt;/p&gt;

&lt;p&gt;System-level installation is straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Debian / Ubuntu&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;libuvcpp-dev

&lt;span class="c"&gt;# Fedora / RHEL&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;libuvcpp-devel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build requirements are C++11 or higher, CMake ≥ 3.20, MSVC 2019+ / GCC 7+ / Clang 5+. If libuv isn't found on the system, it will automatically fetch it via FetchContent.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;libuv's performance has been proven repeatedly. What the C++ ecosystem truly lacks isn't another event loop, but a wrapper that &lt;strong&gt;doesn't sacrifice performance while feeling natural to C++ developers&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The value of libuvcpp 1.9.0 lies in how it layers on "production-grade details" one by one—HTTP consistency, HTTP/3/WebTransport, TLS SNI, WS subprotocols, QUIC metrics—while expanding its usability from a low-level library to an application stack via the WebApp framework and C ABI.&lt;/p&gt;

&lt;p&gt;If you're already using libuv, or if you're looking for a C++ async networking solution beyond Boost.Asio, v1.9.0 deserves a spot on your comparison list. And the fact that it swept the #1 spots for both HTTP/2 and HTTP/3 on HttpArena is proof that this project's performance foundation can withstand independent scrutiny.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/Antruly/libuvcpp" rel="noopener noreferrer"&gt;https://github.com/Antruly/libuvcpp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v1.9.0 Release&lt;/strong&gt;: &lt;a href="https://github.com/Antruly/libuvcpp/releases/tag/v1.9.0" rel="noopener noreferrer"&gt;https://github.com/Antruly/libuvcpp/releases/tag/v1.9.0&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HttpArena Benchmarks&lt;/strong&gt;: &lt;a href="https://www.http-arena.com/" rel="noopener noreferrer"&gt;https://www.http-arena.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: Module-by-module guides in the &lt;code&gt;doc/&lt;/code&gt; directory; all code examples are compiled and verified by CI.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cpp</category>
      <category>networking</category>
      <category>opensource</category>
      <category>performance</category>
    </item>
    <item>
      <title>uvscope: the Swiss Army knife of web debugging</title>
      <dc:creator>zhuweiye</dc:creator>
      <pubDate>Wed, 28 Oct 2026 11:20:19 +0000</pubDate>
      <link>https://dev.to/antruly/uvscope-a-local-first-multi-protocol-debugging-workbench-2idh</link>
      <guid>https://dev.to/antruly/uvscope-a-local-first-multi-protocol-debugging-workbench-2idh</guid>
      <description>&lt;p&gt;Debugging a request that crosses HTTP → WebSocket → raw TCP usually means juggling four or five tools: a REST client, a socket client, &lt;code&gt;nc&lt;/code&gt;, a proxy, and a terminal. Every switch costs you context — headers here, frames there, logs somewhere else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;uvscope&lt;/strong&gt; is my attempt to collapse that stack into one place — a Swiss Army knife for web debugging. It puts HTTP, WebSocket, TCP, UDP, TLS, SOAP/WSDL and managed reverse proxies behind a single Vue 3 control plane, backed by a C++ daemon that owns the event loop, the SQLite store, authentication and all outbound network traffic. The browser only renders state and sends commands.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6injwnnyaokf1xp4ser2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6injwnnyaokf1xp4ser2.png" alt="uvscope dashboard" width="799" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why another debugging tool?
&lt;/h2&gt;

&lt;p&gt;Most tools stop at request/response. uvscope is built around the whole handshake:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One workbench for every protocol&lt;/strong&gt; — HTTP/1.1 and HTTP/2, WebSocket, raw TCP/UDP, X.509 and WSDL-driven SOAP, with the same history, telemetry and export model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A real gateway, not a mock&lt;/strong&gt; — reverse proxies with routing rules, weighted upstreams, retries, health checks, circuit breaking and WebSocket pass-through, with live traffic in view.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-lived services without a second stack&lt;/strong&gt; — TCP/UDP listeners, SOCKS5 servers, reverse proxies and terminal PTYs run in child processes under one desired-state supervisor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local-first&lt;/strong&gt; — SQLite, server-side sessions, PBKDF2 password hashing, RBAC and a first-run admin flow. No telemetry, no cloud account, no external database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One network stack&lt;/strong&gt; — every target connection is driven by &lt;a href="https://github.com/Antruly/libuvcpp" rel="noopener noreferrer"&gt;libuvcpp&lt;/a&gt; 1.8.2, from socket to UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A UI that keeps context&lt;/strong&gt; — collapsible navigation, cached multi-tab workspaces, live telemetry and an offline command library built with Vue 3, Pinia and Vite.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's inside
&lt;/h2&gt;

&lt;h3&gt;
  
  
  HTTP and APIs
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HTTP/1.1 + HTTPS debugger with headers, body, timing and history&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Body modes: raw, form-urlencoded, multipart with files&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cURL / HAR / OpenAPI / Postman import and export&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environments with &lt;code&gt;{{variables}}&lt;/code&gt;, pre-request and post-response scripts&lt;/td&gt;
&lt;td&gt;Stable (browser-side)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP/2 over TLS with ALPN, stream IDs, GOAWAY and frame summary&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gzip / deflate / brotli decoding with a raw-body toggle&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Streaming download with progress, cancel and Range resume&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Response preview: sandboxed HTML, images, audio, video and PDF&lt;/td&gt;
&lt;td&gt;Stable (scripts opt-in)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOAP 1.1 + WSDL operation discovery&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP/3 and raw QUIC probes&lt;/td&gt;
&lt;td&gt;Supported in QUIC-enabled builds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7hl41073e2yf7dh483kj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7hl41073e2yf7dh483kj.png" alt="HTTP debugger" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ks5yo62whvb2tlf1ohh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ks5yo62whvb2tlf1ohh.png" alt="HTTP/2 frame view" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Realtime and transports
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket console: daemon-side backend sessions and browser-native mode&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend WebSocket headers, subprotocols, frames, ping/pong, close codes&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One-shot TCP and UDP probes (text / hex)&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Persistent TCP sessions with repeated sends and event logs&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP / UDP server listeners with sessions, datagrams and replies&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOCKS5 client and server (CONNECT / BIND / UDP ASSOCIATE)&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Virtual terminal (Unix PTY / Windows ConPTY) with offline command library&lt;/td&gt;
&lt;td&gt;Stable — off by default&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu2auh76f87xsz1x13p8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu2auh76f87xsz1x13p8e.png" alt="WebSocket console" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyh4krielndxvikq5bh0c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyh4krielndxvikq5bh0c.png" alt="TCP/UDP probes" width="799" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Gateway and long-lived services
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reverse proxy: exact / prefix / regex rules, redirects and rewrites&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Header / method / host conditions, weighted upstreams, retries&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active upstream health checks, per-upstream circuit breaker, QPS/latency metrics&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proxy config hot reload with runtime config versions&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket pass-through in the reverse proxy&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Child-process isolation for proxies, listeners, SOCKS5 servers and terminals&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unified desired-state supervisor with restart, backoff and event log&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Managed TLS certificates, local CA, CA-signed certs and in-place renewal&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3wtu7wqtq0c0ytisdea5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3wtu7wqtq0c0ytisdea5.png" alt="Reverse proxy rules" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22njpfryumjv6h4572q1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22njpfryumjv6h4572q1.png" alt="Upstream health and metrics" width="799" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Operations and security
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SQLite persistence, first-run setup, local auth, RBAC (admin / operator / viewer)&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server-side sessions, active-session revocation, audit log&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backup download and staged restore&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Module toggles, factory reset, update check, about/help&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chinese / English UI with browser-language detection and manual switch&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dark / light / follow-system theme&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux tar/deb/rpm, Windows zip + installer, macOS tar.gz&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0iadq3hoajurv8ct4lbn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0iadq3hoajurv8ct4lbn.png" alt="Virtual terminal" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F93ayuky91xu3b69mcni2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F93ayuky91xu3b69mcni2.png" alt="TLS certificate management" width="799" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb0gsoskkg4mkhy2jubu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb0gsoskkg4mkhy2jubu9.png" alt="Service supervisor" width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Requirements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;C++17 compiler, CMake ≥ 3.20, Ninja&lt;/li&gt;
&lt;li&gt;Node.js 20+ and npm&lt;/li&gt;
&lt;li&gt;libuv, zlib, SQLite and OpenSSL development headers&lt;/li&gt;
&lt;li&gt;Linux, macOS, or Windows with MSYS2 MinGW-w64&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On Debian/Ubuntu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;build-essential cmake ninja-build libuv1-dev zlib1g-dev &lt;span class="se"&gt;\&lt;/span&gt;
  libssl-dev libsqlite3-dev git curl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Build from source
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Antruly/uvscope.git
&lt;span class="nb"&gt;cd &lt;/span&gt;uvscope
./scripts/build.sh
./build/uvscope &lt;span class="nt"&gt;--port&lt;/span&gt; 8787 &lt;span class="nt"&gt;--open&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;build.sh&lt;/code&gt; clones the libuvcpp v1.8.2 release into &lt;code&gt;.deps/&lt;/code&gt;, applies one minimal upstream patch shipped in &lt;code&gt;patches/upstream/&lt;/code&gt; (WebSocket handshake headers), builds the frontend, then builds uvscope and runs &lt;code&gt;--self-check&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you already have a libuvcpp 1.8.2 SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nt"&gt;--prefix&lt;/span&gt; web ci &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nt"&gt;--prefix&lt;/span&gt; web run build
cmake &lt;span class="nt"&gt;-S&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-B&lt;/span&gt; build &lt;span class="nt"&gt;-G&lt;/span&gt; Ninja &lt;span class="nt"&gt;-DCMAKE_BUILD_TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Release &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-DUVCPP_ROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/libuvcpp
cmake &lt;span class="nt"&gt;--build&lt;/span&gt; build &lt;span class="nt"&gt;-j&lt;/span&gt;
./build/uvscope &lt;span class="nt"&gt;--self-check&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;a href="http://127.0.0.1:8787" rel="noopener noreferrer"&gt;http://127.0.0.1:8787&lt;/a&gt;. The first visit creates the administrator account. Runtime state lives in the data directory printed at startup (&lt;code&gt;~/.local/share/uvscope&lt;/code&gt; on Linux by default; override with &lt;code&gt;--data-dir&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;uvscope [options]

  --host &amp;lt;addr&amp;gt;       Listen address (default 127.0.0.1)
  --port &amp;lt;port&amp;gt;       Listen port (default 8787, 0 picks a free port)
  --data-dir &amp;lt;path&amp;gt;   SQLite and runtime data
  --web-root &amp;lt;path&amp;gt;   Built frontend directory
  --tls-cert &amp;lt;pem&amp;gt;    Serve the workbench UI over HTTPS
  --tls-key &amp;lt;pem&amp;gt;     Private key paired with --tls-cert
  --open              Open the workbench in the default browser
  --self-check        Run offline smoke tests and exit
  --version           Print version and exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hidden child modes (&lt;code&gt;--proxy-child&lt;/code&gt;, &lt;code&gt;--listener-child&lt;/code&gt;, &lt;code&gt;--socks5-child&lt;/code&gt;, &lt;code&gt;--terminal-child&lt;/code&gt;, &lt;code&gt;--ipc-child&lt;/code&gt;) are spawned by the daemon and are not meant to be invoked by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vue 3 SPA (multi-tab, cached workspaces)
        │ same-origin HTTP + WebSocket + cookies
        ▼
uvscope daemon (C++17 / libuvcpp)
  ├─ auth + RBAC + SQLite + audit + backup
  ├─ HTTP API and static asset server
  ├─ probes, debug sessions and terminal sessions
  ├─ desired-state supervisor
  └─ optional child processes (isolated services)
        ├─ reverse proxy runtime
        ├─ TCP/UDP listener runtime
        ├─ SOCKS5 server runtime
        └─ terminal PTY / ConPTY
              │
              └─ libuvcpp → libuv → sockets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The daemon is the only process that serves the UI and owns SQLite. In the default in-process mode it also owns every outbound socket; with isolation enabled, a service opens its own sockets inside its child process. The WebSocket view additionally offers a browser-native mode, because origin, mixed-content and certificate prompts are part of what is being debugged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Isolation and supervision
&lt;/h2&gt;

&lt;p&gt;Proxies, TCP/UDP listeners, SOCKS5 servers and virtual terminals accept &lt;code&gt;isolated: true&lt;/code&gt;. The parent process keeps the API state, scrollback and ownership metadata; the service runs in a child process and talks to the parent over a length-prefixed JSON IPC channel.&lt;/p&gt;

&lt;p&gt;All four service kinds are registered with one desired-state supervisor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a crashed child is restarted with exponential backoff (2–60 s) and a new PID;&lt;/li&gt;
&lt;li&gt;restart counts and events are visible in &lt;code&gt;/api/supervisor&lt;/code&gt; and &lt;code&gt;/api/supervisor/events&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;stopping a service clears its desired state, so the watchdog leaves it down;&lt;/li&gt;
&lt;li&gt;deleting a service unregisters it before teardown;&lt;/li&gt;
&lt;li&gt;a normal terminal &lt;code&gt;exit&lt;/code&gt; is &lt;strong&gt;not&lt;/strong&gt; a crash — the child stays alive so scrollback and the exit code remain readable. A crashed terminal is respawned with a fresh shell, and attached WebSocket clients receive a &lt;code&gt;reset&lt;/code&gt; frame before the new output.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security model
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Default bind is &lt;code&gt;127.0.0.1&lt;/code&gt;. Do not expose uvscope to an untrusted network without an authenticating proxy.&lt;/li&gt;
&lt;li&gt;Passwords are PBKDF2-HMAC-SHA256 (210,000 iterations); sessions are server-side and stored as SHA-256 token hashes. Cookies are &lt;code&gt;HttpOnly&lt;/code&gt; + &lt;code&gt;SameSite=Lax&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Anyone who can authenticate can reach the host network, start listeners/proxies, and — when the terminal module is enabled — obtain a shell as the daemon user. Treat access as equivalent to code execution on that host.&lt;/li&gt;
&lt;li&gt;Isolated services run as the same OS user; isolation is a fault boundary, not a security sandbox.&lt;/li&gt;
&lt;li&gt;Use the TLS Inspector and “Allow insecure TLS” only against systems you control.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Platforms and downloads
&lt;/h2&gt;

&lt;p&gt;Prebuilt &lt;strong&gt;v1.0.1&lt;/strong&gt; assets are on the &lt;a href="https://github.com/Antruly/uvscope/releases/tag/v1.0.1" rel="noopener noreferrer"&gt;Releases page&lt;/a&gt;, shipped with &lt;code&gt;SHA256SUMS&lt;/code&gt;, a Sigstore keyless signature and a generated SPDX SBOM.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Release&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Linux x64&lt;/td&gt;
&lt;td&gt;tar.gz, deb, rpm&lt;/td&gt;
&lt;td&gt;Primary CI and smoke matrix&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux arm64&lt;/td&gt;
&lt;td&gt;tar.gz, deb, rpm&lt;/td&gt;
&lt;td&gt;Release build and self-check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows x64 (MinGW)&lt;/td&gt;
&lt;td&gt;zip, setup.exe&lt;/td&gt;
&lt;td&gt;CI build, self-check and ConPTY smoke&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS arm64&lt;/td&gt;
&lt;td&gt;tar.gz&lt;/td&gt;
&lt;td&gt;CI build, self-check and HTTP/2 runtime check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP/3 / QUIC&lt;/td&gt;
&lt;td&gt;QUIC-enabled builds&lt;/td&gt;
&lt;td&gt;Requires OpenSSL 3.6+; default assets keep QUIC off&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Verify a download with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sha256sum&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; SHA256SUMS
cosign verify-blob &lt;span class="nt"&gt;--bundle&lt;/span&gt; SHA256SUMS.sigstore.json &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--certificate-identity-regexp&lt;/span&gt; &lt;span class="s1"&gt;'https://github.com/Antruly/uvscope/.*'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--certificate-oidc-issuer&lt;/span&gt; https://token.actions.githubusercontent.com &lt;span class="se"&gt;\&lt;/span&gt;
  SHA256SUMS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdeyqq3vons8jmpk29knc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdeyqq3vons8jmpk29knc.png" alt="Theme and language settings" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;uvscope is MIT-licensed and the docs live at &lt;a href="https://antruly.github.io/uvscope/" rel="noopener noreferrer"&gt;https://antruly.github.io/uvscope/&lt;/a&gt; — including the &lt;a href="https://github.com/Antruly/uvscope/blob/main/docs/API.md" rel="noopener noreferrer"&gt;HTTP API&lt;/a&gt;, &lt;a href="https://github.com/Antruly/uvscope/blob/main/docs/ARCHITECTURE.md" rel="noopener noreferrer"&gt;architecture notes&lt;/a&gt;, &lt;a href="https://github.com/Antruly/uvscope/blob/main/docs/EVENTS.md" rel="noopener noreferrer"&gt;event schema&lt;/a&gt; and &lt;a href="https://github.com/Antruly/uvscope/blob/main/ROADMAP.md" rel="noopener noreferrer"&gt;roadmap&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If it saves you a debugging session, a star on &lt;a href="https://github.com/Antruly/uvscope" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; helps other protocol wranglers find it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>tooling</category>
      <category>debugging</category>
    </item>
  </channel>
</rss>
