Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 17:58
fd052b6

0.2.0 (2026-10-12)

⚠ BREAKING CHANGES

  • extras: ActivityLogger no longer takes a Clock nor exposes formatLogEntry and getFullUrl; lines are written when the exchange ends rather than when the response head is sent.

Features

  • add HTTP/3 options to the bootstrap and properties (762408b)
  • admin listener, readiness and drain (fe6a9c6)
  • ClientHello inspection, SNI host rules, transparent HTTPS, ALPN mirroring and reverse mode (e6fbb1a)
  • content views with schema-less protobuf and gRPC decoding (ba65b61)
  • contentviews: show DNS messages as dig does (190274f)
  • core: add ScriptCallObserver, which sees every call into a script (b6a91e5)
  • core: add server states, drain with Envoy's strategies, a drain time and a health check (1b908ac)
  • core: count bytes to and from clusters, and HTTP/3 clients' bytes (4213928)
  • core: count chained proxies' failovers and backoffs, and those backing off (6aca5d2)
  • core: count CONNECT-UDP flows, their datagrams, capsules and refusals, and the UDP hooks (71416b4)
  • core: count HTTP/2 codec events both ways under Envoy's http2 names (89f3147)
  • core: count HTTP/3 codec events, early data, Alt-Svc origins and TCP fallbacks (205f6c9)
  • core: count QUIC connections by scope as they close, and write their qlog (11634a5)
  • core: count requests, connections and clusters under Envoy's stat names (30a52ae)
  • core: count SOCKS clients by version, refused authentication and replies by code (b0c2e7e)
  • core: count SOCKS clients' tunnels as a kind of their own (f7bb3e9)
  • core: count the hooks' calls, errors, drops, rewrites and latency per family (fe92c48)
  • core: count transparent QUIC flows, their drops by reason and relayed bytes (2a9c8d2)
  • core: count tunnels by kind and WebSocket sessions, frames, messages and close codes (05b9f9d)
  • core: describe an UpstreamProxyManager's proxies with their credentials masked (29c06ad)
  • core: give each exchange a failure, Envoy-style response flags and details (a628b6a)
  • core: let an exchange's trace start spans of the proxy's own work (fbb179b)
  • core: record each exchange, tunnel and flow when it ends (6dbae5e)
  • core: resolve per-protocol, hook and chained-proxy stats once per proxy (18eadb2)
  • core: serve Envoy's admin API on a listener of its own (49ecbb5)
  • core: total each exchange's script calls, and log them with %MP_SCRIPT_*% (fdfd36c)
  • dns: encode DNS messages and read them through a public view (1b2e81d)
  • extras: add Envoy-style access-log filters with a compact syntax (9acaac7)
  • extras: compute JA3 and JA4 fingerprints of a ClientHello (5029b30)
  • extras: flag requests the concurrency limiter refuses as rate limited (0257b39)
  • extras: parse Envoy-compatible access-log format strings once (40241ed)
  • extras: register the concurrency limiter's state as stats (5ff1921)
  • extras: show response flags and details in HttpLogger lines (7b84f54)
  • extras: write access logs per finished exchange through the new formatter (1b4d37b)
  • forward a client's absolute-form requests inside a session to the session's server (d00811a)
  • forward a CONNECT inside a plain HTTP session to the HTTP proxy (0bb2528)
  • forward a CONNECT inside an intercepted session to the intercepted server (4785380)
  • forward CONNECT inside an intercepted session to the intercepted HTTPS proxy (df917ee)
  • forward proxy requests inside sessions to the proxy the client chose (0a672c5)
  • HTTP/2 and HTTP/3 frame interception, with Starlark on_frame and an http3-codec module (ff6de8d)
  • HTTP/3 forward-proxy listener, CONNECT, WebSockets and MASQUE CONNECT-UDP over HTTP/3 (4467192)
  • http3: answer 421 for other hosts on intercepted HTTP/3 connections (a9edf4b)
  • http3: choose the congestion controller of the proxy's QUIC connections (3e73d48)
  • http3: resume clients' QUIC sessions, and take 0-RTT with --http3-0rtt (c60292a)
  • http3: resume sessions with servers and send safe requests as 0-RTT data (f296349)
  • http3: serve HTTP/3 next to a forward proxy's TLS listener (a8a24d4)
  • http3: serve HTTP/3 to clients of a reverse proxy (103cb9c)
  • http3: speak HTTP/3 to servers known to support it (7a46b25)
  • http3: tunnel CONNECT over HTTP/3 request streams (c06565d)
  • http3: WebSockets over HTTP/3 with extended CONNECT (RFC 9220) (d96dee2)
  • http3: WebSockets to HTTP/3 servers that enable extended CONNECT (d992165)
  • intercept TLS that does not carry HTTP and relay it through the TCP hooks (a5846cb)
  • join WebSocket messages and read through permessage-deflate (aaacf2a)
  • launcher: add --access-log, --access-log-format, --access-log-json and --access-log-filter (2970289)
  • launcher: add --admin-port, --admin-address, --admin-token, --drain-time, --drain-strategy and the health-check flags (de9b21d)
  • launcher: add --log-http-view and --proto-descriptors (a89f890)
  • launcher: add --masque-intercept-quic and --masque-quic-ports (ce4a921)
  • launcher: add --metrics, --statsd, --dogstatsd, --stats-prefix and cluster bounds (dabe823)
  • launcher: add --mode socks5 and --socks (cea1512)
  • launcher: add --qlog-dir and --qlog-max-files for per-connection qlog files (95c0686)
  • launcher: add --quic-congestion cubic|newreno|bbr (2fb5f71)
  • launcher: add --quic-hosts (293a7ae)
  • launcher: add --script-max-steps, --script-max-time, --script-max-alloc and --script-name (ee311d6)
  • launcher: add --transparent-quic-port, its relay idle timeout and --http3-retry (dcc7175)
  • launcher: add the CONNECT-UDP template, idle timeout and flow limits (79d2fa2)
  • launcher: add the HTTP/3 flags and a TLS listener from a key store (b010126)
  • live HTTP/3 in the proxy: reverse-mode h3, upstream h3 and live frame interception (0e7121f)
  • masque: decide on QUIC inside CONNECT-UDP flows as on transparent QUIC (a8520d3)
  • masque: proxy UDP with CONNECT-UDP over HTTP/3 (RFC 9298) (b03bf8c)
  • message framing for QUIC stream hooks, with DNS and protobuf decoders (e5e06cc)
  • metrics registry with Envoy-style stats, Prometheus and statsd (f4b51f6)
  • mitmproxy-style addons, flow filters, HAR export and replay (efccd57)
  • name HTTP/3 in HttpVersion and FlowContext (bfb4255)
  • open CONNECT tunnels on HTTP/2 connections to servers (6d3b269)
  • OpenTelemetry traces, metrics and logs over OTLP, with no dependencies (9e72395)
  • otel: add a microproxy-otel module with W3C, B3 and Jaeger propagation and samplers (4394758)
  • otel: encode OTLP traces, metrics and logs as protobuf and JSON (01369ea)
  • otel: export the spans an exchange's trace starts as its INTERNAL children (0623fe2)
  • otel: trace exchanges and export spans, metrics and access logs over OTLP/HTTP (9824ee7)
  • otel: turn OpenTelemetry on from the launcher (28485a7)
  • per-exchange failures, Envoy response flags and Envoy-compatible access logs (9cb1d71)
  • per-protocol and hook stats, QUIC connection stats and qlog (9410b1d)
  • permessage-deflate codec for WebSocket relays (b066198)
  • proxy: keep QUIC flows going when their clients move (405b142)
  • quic-tls: NewSessionTicket, PSK resumption and 0-RTT with an anti-replay policy (278a5c5)
  • quic-tls: PSK binder, early traffic secret and resumption PSK in the key schedule (082df7b)
  • quic-tls: stateless ticketer with rotating AES-GCM keys, and a client ticket cache (36ea414)
  • quic: 0-RTT packets, remembered transport parameters and NEW_TOKEN (97081d0)
  • quic: add a virtual-thread I/O runtime and blocking connection and stream API (d7375ea)
  • quic: add ACK frequency state (b970171)
  • quic: add connection ID generation, issuance and retirement (01e6278)
  • quic: add connection timer table (a11f52e)
  • quic: add DPLPMTUD path MTU discovery with black hole detection (e285b51)
  • quic: add every RFC 9000 frame, DATAGRAM and ACK frequency, with budgeted encoders and a validating decoder (b75fdb3)
  • quic: add packet and header protection keys, Initial keys per version, key updates and Retry integrity (b5b4c6d)
  • quic: add packet headers, partial decoding, coalesced datagrams, packet numbers and packet protection (134bca5)
  • quic: add packet number spaces, sent-packet tracking and ACK generation (df4f6c5)
  • quic: add QuicInterceptor, hooks for the streams and datagrams of intercepted QUIC (a679839)
  • quic: add range set, stream reassembly and send buffer (91c3f79)
  • quic: add RFC 9002 loss detection, PTO and persistent congestion (d7ed16b)
  • quic: add RTT estimator and NewReno and CUBIC congestion control (322e13e)
  • quic: add sealed Retry and NEW_TOKEN address validation tokens (7ac891e)
  • quic: add streams with state machines, flow control and priorities (c5709e9)
  • quic: add the BBR congestion controller, ported from quinn (18aa3d6)
  • quic: add the encryption levels, cipher suites, secrets and errors the handshake and packet protection share (de03391)
  • quic: add the sans-I/O connection state machine (2063061)
  • quic: add the sans-I/O endpoint with Retry, Version Negotiation and stateless resets (1934f90)
  • quic: add the TLS 1.3 codec, handshake messages and extension payloads, ported from rustls (f9188fc)
  • quic: add the TLS 1.3 key schedule, transcript, key exchange and signatures, checked against RFC 8448 (8c8b082)
  • quic: add the TLS session for QUIC with its client and server handshakes (330965e)
  • quic: add token-bucket pacer and injectable nanosecond clock (0b3807f)
  • quic: add transport parameters with per-role validation, GREASE and version information (810cc44)
  • quic: add transport, endpoint, server and client configuration (555e811)
  • quic: add variable-length integers, connection IDs, versions 1 and 2, and stateless reset tokens (0c68ac3)
  • quic: BBR congestion control (6ab0cc6)
  • quic: carry a bandwidth estimate in ControllerMetrics (46fa687)
  • quic: connection migration, path validation and preferred address (defede0)
  • quic: connections, endpoints, a blocking stream API and aioquic interop (2d5278f)
  • quic: cut stream bytes into messages with framers (cd5aaa0)
  • quic: expose connection statistics, endpoint counts and a connection observer (09e635f)
  • quic: expose the ClientHello random for key logging (e2ede1f)
  • quic: follow migrating clients, probe new paths, preferred address (074e325)
  • quic: leave the packet builder unchanged when a header does not fit (aef4669)
  • quic: let a congestion controller set the pacing rate (5da50e6)
  • quic: let a server filter the datagrams no connection claims (50bb7d9)
  • quic: let an endpoint take its randomness from EndpointConfig (0f6a817)
  • quic: migrate client connections to new sockets (88ec345)
  • quic: packets, frames, transport parameters and packet protection (b7016f9)
  • quic: port quinn's BBR max filter and bandwidth estimator (2c96c0e)
  • quic: rebind a client connection without probing the new path (5ca6be4)
  • quic: report the anti-amplification budget (b15aa78)
  • quic: report the key exchange group of a connection (063bf85)
  • quic: resumption and 0-RTT in the blocking API (cfe8529)
  • quic: sample the delivery rate per packet (a49eecd)
  • quic: session resumption, 0-RTT and NEW_TOKEN, in the QUIC module and the proxy (85b4296)
  • quic: show intercepted QUIC streams to hooks as whole messages (989446b)
  • quic: streams, flow control, loss recovery and congestion control (5dbd2f5)
  • quic: TLS 1.3 handshake for QUIC, client and server (c88063c)
  • quic: unbound servers, per-connection configurations and awaitStopped (3d5c70c)
  • raw TCP hooks and TLS interception for non-HTTP protocols (a9dd6bb)
  • relay tcp_hosts as raw TCP even when they look like HTTP (d822f6d)
  • serve SOCKS5 and SOCKS4a clients (466055a)
  • SOCKS5 and SOCKS4a server (f149dbe)
  • starlark: add on_quic_start, on_quic_stream_data, on_quic_datagram and on_quic_end (ad80688)
  • starlark: add on_udp_start, on_udp_message and on_udp_end (810b88c)
  • starlark: count calls into scripts under hooks.starlark (cf8bf43)
  • starlark: count the bytes of the values a call creates, against a budget (d9e2758)
  • starlark: count what the re, base64, digest, codecs, url, protobuf, grpc and dns builtins make (76c6e2f)
  • starlark: ctx.forwarded_via names the intercepted proxy a request goes through (d0ec163)
  • starlark: ctx.socks_version tells SOCKS clients apart (bba5a7a)
  • starlark: expose ctx.failure, ctx.response_flags and ctx.response_code_details (223e08e)
  • starlark: give regular expressions and pbkdf2 the call's nanosecond deadline (db9eeea)
  • starlark: give scripts a stats module of bounded script.<name> metrics (5c07b57)
  • starlark: measure each hook call per script and hook, with a memory budget (a254140)
  • starlark: on_quic_message, a dns module and framers in scripts (ade6b31)
  • starlark: on_tcp_start, on_tcp_message and on_tcp_end (1084730)
  • starlark: on_websocket_message and websocket_message() (4fe4da1)
  • starlark: per-hook execution metrics, memory/time/step budgets and hook spans (db64329)
  • starlark: protobuf and grpc modules (09978e9)
  • starlark: show scripts the exchange's trace, and let them add to its span (b87609e)
  • starlark: tell early data with ctx.early_data (1f57bf6)
  • starlark: tell transparent QUIC flows with ctx.transparent_quic (e369968)
  • starlark: trace each hook call as a span of its exchange (37edff5)
  • stats: add a registry of Envoy-named metrics and their Prometheus exposition (7815e3e)
  • stats: count framed QUIC messages, the message hook and framing errors (50ef2e0)
  • stats: count QUIC migrations, NAT rebindings and failed path validations (d6c8aef)
  • stats: extract the per-protocol stats' tags and add microsecond buckets (5dff377)
  • stats: push metrics to statsd and DogStatsD from a virtual thread (01a8442)
  • stats: render only the metrics a predicate accepts, and tell used ones (c5c7b34)
  • stats: tag script hook stats with the script, the hook and the exhausted budget (c9a08b2)
  • stream hooks for non-HTTP/3 QUIC, and interception of QUIC inside MASQUE flows (b7dad57)
  • TCP stream hooks for raw tunnels (6a3d592)
  • tls: hand key material and trust managers to TLS stacks other than the JDK's (c9e8f7d)
  • trace: add a FlowTracer hook for distributed tracing of exchanges and flows (c9f93af)
  • transparent QUIC/HTTP/3 interception on UDP 443 (57d2781)
  • transparent: intercept or relay QUIC redirected to a transparent UDP port (79e7335)
  • transparent: intercept QUIC that is not HTTP/3 stream by stream (6ee27e6)
  • transparent: read a QUIC client's ClientHello from its Initial packets (2d3eb29)
  • udp: add UdpInterceptor, hooks for the datagrams of UDP flows (a4612cc)
  • WebSocket message hooks and permessage-deflate (c927b69)
  • WebSocketMessage and the filterWebSocketMessage hooks (2c3089b)

Bug Fixes

  • a TCP tunnel whose TLS closes whole after its client finished ends without an error (e203abc)
  • core: close the listeners before the state says DRAINING (c374625)
  • core: count a frame interceptor's added frames as a rewrite, and keep qlog times from going negative (70fa804)
  • core: count SOCKS replies before sending them, and the RTT of every connection that completed its handshake (25b1555)
  • core: end a request's active count only after the rest of it is counted (6f2098f)
  • core: end QUIC connections', tunnels' and CONNECT-UDP flows' active counts only after the rest of them is counted (820801f)
  • core: keep a + in admin query parameters a plus (f45e647)
  • core: record misdirected HTTP/2 requests and client read timeouts (b481048)
  • core: record refused clients, relayed QUIC upstreams and resets that fail the server side (1ff039b)
  • core: say stream_idle_timeout in the details of idle tunnels and UDP flows (76d4140)
  • core: wait for the acceptor when the listeners close (d0088bf)
  • dns: show IPv6 addresses in the short form (45389f0)
  • forwarded tunnels read the ClientHello, as CONNECT tunnels do (e823915)
  • HTTP/2 WebSocket and CONNECT stream gaps, plus interception of CONNECT streams (7a87703)
  • http3: advertise the reverse proxy's HTTP/3 when stripping left no Alt-Svc (6e77b5d)
  • http3: close with the connection error's code, and tell a reset response from a finished one (67841ae)
  • http3: count a client's reset before its stream's exchange learns of it (958fead)
  • http3: count a client's reset before its stream's exchange learns of it (c61cf2d)
  • http3: share one anti-replay record among the proxy's QUIC servers (2127782)
  • launcher: show the default allocation budget, 256m (1f99c36)
  • mirror an HTTP/1.1-only client's ALPN when forwarding CONNECT (1f38d8d)
  • otel: end a SERVER span no earlier than its CLIENT spans (626fcbc)
  • otel: extract as OpenTelemetry's composite propagator does (e964e7e)
  • otel: take a CLIENT span's scheme and protocol from the real connection (95db55c)
  • quic: close a connection relayed stream by stream with its client connection (1aa4200)
  • quic: contain unexpected exceptions to the connection that raised them (e65b8dd)
  • quic: document DeliveryRate's constructor, and give hasRetransmits its comment back (4402c80)
  • quic: keep reporting a stream reset to later reads (fefbdec)
  • quic: leave a connection application limited when a poll runs out of data (d57888f)
  • quic: let each stream's relay threads go when the stream ends (91280f6)
  • quic: let migrate wait for a probe already under way (e5fccc5)
  • quic: make BBR follow the BBRv1 draft where quinn's port does not (7b644aa)
  • quic: probe for 1-RTT data sent before the handshake is confirmed (7f3e19c)
  • quic: queue a new connection's first datagram before others can reach it (6cfa7e4)
  • quic: queue a new connection's first datagram before others can reach it (0525233)
  • quic: run QUIC relayed stream by stream with the chosen congestion controller (99140e1)
  • quic: send 0-RTT data again after a Retry (c85fb8f)
  • quic: send one close datagram per occasion and tolerate runtimes without jdk.net (0874567)
  • quic: update keys only once the handshake is confirmed, and never send empty datagrams (d2cfd31)
  • quic: validate a path by a PATH_RESPONSE that comes back on any path (cebeeb1)
  • read the ClientHello in tunnels that a session's proxy opens (1be193c)
  • send a client's own CONNECT to a chained proxy only for its target (c781987)
  • starlark: make the default allocation budget 256 MiB a call (ce1ceb6)
  • starlark: put the stats module's method comments before their annotations (db0ba75)
  • starlark: report excessive bytes repeats as before, and let a new allocation budget re-arm a thread (07fd522)
  • stop waiting for HTTP/2 connections held up by a ClientHello (ae69752)
  • TCP hooks name a tunnel's own server, never its session's (d6fb572)
  • treat frames on a stream closed both ways as a connection error at once (1b07b54)
  • treat frames on a stream closed both ways as a connection error at once (62aaa24)
  • write logged trailers with the shared JSON writer (aefad89)

Documentation

  • connection migration, the preferred address and relayed clients that move (a2b07f8)
  • content views, gRPC and protobuf inspection, and script modules (1bc9cb6)
  • core: describe where the stats live and how QUIC is counted (0257132)
  • describe BBR, its departures from quinn, and --quic-congestion (fb06a31)
  • describe large QUIC ClientHellos without naming a browser (e716617)
  • describe OpenTelemetry tracing and OTLP export (d89dc57)
  • describe QUIC resumption, 0-RTT, NEW_TOKEN and their replay safety (35f4418)
  • describe transparent QUIC, its iptables rules and NAT, and who keeps Alt-Svc h3 (2ad02ce)
  • document Envoy-compatible access logs, response flags and filters (a96a14d)
  • document hook call spans, and where trace attributes go (322af83)
  • document metrics, their Envoy names, Prometheus labels and cardinality bounds (6985719)
  • document scripts' budgets, the allocation estimate, per-hook stats and %MP_SCRIPT_*% (8167e53)
  • document the admin interface, readiness, draining and shutdown (502f38e)
  • document the per-protocol, hook and chained-proxy stats, and qlog files (99f25f7)
  • forwarded tunnels decide by the client's first bytes, as CONNECTs do (88e5694)
  • give the raw-session decision's order in its Javadoc (dd1459f)
  • how SOCKS tunnels and raw tunnels reach the TCP hooks (eb2ee8f)
  • http3: an HTTP/3 forward-proxy listener, CONNECT, WebSockets and MASQUE over HTTP/3 (166a726)
  • http3: describe a forward proxy's HTTP/3, and streams as sockets over HTTP/3 too (c4580a0)
  • http3: describe HTTP/3 to clients and servers, and live HTTP/3 frames (5a7253b)
  • impl: describe HTTP/3 roles, tunnels, WebSockets and CONNECT-UDP flows (256e78a)
  • MicroProxy in front of an HTTP proxy, and who picks the server (65a0eed)
  • MicroProxy in front of an HTTPS proxy (81480b2)
  • QUIC message framing, on_quic_message and the dns module (02dd210)
  • QUIC stream hooks, --quic-hosts, QUIC inside CONNECT-UDP flows and the transparent QUIC decision (0223eec)
  • quic: describe connections, endpoints and the blocking API (003b0d7)
  • quic: describe delivery rate sampling, BBR's departures from quinn, and seeded pairs (f086f31)
  • quic: describe the connection internals (7b773c7)
  • quic: describe the GREASE value bound by its source (7aa868e)
  • quic: describe the packet layer, its versions and its limits (34d6d39)
  • quic: describe the TLS 1.3 handshake API, what it supports and what is out of scope (c706364)
  • quic: document QuicException's error code field (ccb2b12)
  • quic: document serialized exception fields and stream write results (bb61711)
  • quic: document the HTTP/3 interop and build its dependency in CI (c336ad2)
  • quic: document the serialized error code so javadoc has no warnings (fecd9bd)
  • quic: record loopback throughput and the connection fuzz test (a372c87)
  • raw TCP streams, TLS that does not carry HTTP, TCP hosts and the script hooks (af24723)
  • SOCKS5 mode, its replies and authentication (687a5dc)
  • starlark: QuicContext serves on_quic_message too (eece9a6)
  • WebSocket messages, permessage-deflate and the script examples (2fed6e5)