Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
179 commits
Select commit Hold shift + click to select a range
562d383
ci: enable pre-release workflow for v3 alpha on release/next
st0o0 May 31, 2026
ae326e3
ci: trigger release pipeline on release/next, skip docs for pre-releases
st0o0 May 31, 2026
d52d0bf
feat(servus): add TransportBuffer.Wrap for zero-copy buffer handoff
st0o0 May 31, 2026
9440aca
refactor(servus): convert backing fields to auto-properties across tr…
st0o0 May 31, 2026
22c84cc
refactor(server): remove unused form and header context abstractions
st0o0 May 31, 2026
ea1eb2c
feat(server): per-protocol connection options with resolved limit pro…
st0o0 May 31, 2026
ad4d0b7
feat(server): data-rate monitoring and protocol server option resolution
st0o0 May 31, 2026
a1a1a7e
refactor(protocol): streamline body encoders/decoders and content cla…
st0o0 May 31, 2026
c49104f
feat(server): connection-per-stage pipeline with fair-share dispatch
st0o0 May 31, 2026
211d2af
test: align protocol server specs with new options and decoder APIs
st0o0 May 31, 2026
4960b3f
test(server): shared integration fixture, stress collection, and repr…
st0o0 May 31, 2026
43b65cb
test: refactor shared test helpers and fakes
st0o0 May 31, 2026
db4dc71
test: refresh public API approval baseline
st0o0 May 31, 2026
7b7c233
docs(server): reflect ASP.NET Core IServer architecture and new options
st0o0 May 31, 2026
55cadd5
docs(client): correct namespaces, option defaults, and examples
st0o0 May 31, 2026
e5331e7
docs(architecture): update engine and pipeline descriptions
st0o0 May 31, 2026
3e3e6e2
docs(diagrams): fix LikeC4 client pipeline order and component metadata
st0o0 May 31, 2026
1906807
docs(site): exclude internal docs from build, fix meta description, w…
st0o0 May 31, 2026
a9b581c
feat(server): enforce four previously-unwired server options
st0o0 May 31, 2026
9043b06
docs(server): align option reference with code, fix stale architecture
st0o0 May 31, 2026
e75fce7
refactor(codec): bundle body encoder/decoder factory params into opti…
st0o0 May 31, 2026
b0c4e1f
refactor(client): flatten client protocol options and project via ext…
st0o0 May 31, 2026
ccf32c2
refactor(client): drop Validate from client option records
st0o0 May 31, 2026
d0bd68e
refactor(codec): project BodyDecoderOptions via ToBodyDecoderOptions …
st0o0 May 31, 2026
af232d6
refactor(server): project BodyEncoderOptions via ToBodyEncoderOptions…
st0o0 May 31, 2026
e7cdd11
build(pack): bundle local Servus.Akka into the package instead of a N…
st0o0 May 31, 2026
b2460e0
build: enforce packages.lock.json via RestoreLockedMode in CI
st0o0 May 31, 2026
e1407f6
feat(ci): Add release-next to CI triggers
st0o0 May 31, 2026
e8b6e9a
feat!: publish accumulated v3 work as alpha prereleases
st0o0 May 31, 2026
44a2254
test: increase concurrency test timeout
st0o0 May 31, 2026
611e5b3
fix(tests): adjust maxParallelThreads to 0.5x
st0o0 May 31, 2026
ac38857
chore(release-next): release 3.0.0-alpha
github-actions[bot] May 31, 2026
3bd9ddd
fix(client): propagate handler exceptions, wire per-request timeout, …
st0o0 Jun 1, 2026
bfe7106
test(e2e): expand End2End coverage for connection reuse, multiplexing…
st0o0 Jun 1, 2026
c1b073d
test(server): add multi-protocol TLS fixture, ALPN negotiation and HT…
st0o0 Jun 1, 2026
2621603
test(server): add HTTP/3 (QUIC) server integration specs
st0o0 Jun 1, 2026
96dbb37
test(server): fix H2 POST test — earlier "H2-POST downgrade" was a te…
st0o0 Jun 1, 2026
8a9b5b0
refactor(server): migrate H1.0/H1.1 data-rate clock to TimeProvider
st0o0 Jun 1, 2026
86363a4
refactor: simplify constructor parameter passing
st0o0 Jun 1, 2026
5217ba1
test(server): H2/H3 session-manager data-rate violation tests with in…
st0o0 Jun 1, 2026
5bf8b84
refactor(http2): Simplify session manager constructor
st0o0 Jun 1, 2026
d878aa2
refactor(transport): inject TimeProvider into connection pool leases …
st0o0 Jun 1, 2026
7e47256
refactor(client): move H1.1 MaxPipelineDepth out of decoder options
st0o0 Jun 1, 2026
0324e4a
test(e2e): connection-pooling cap test + wire-pipelining finding (ski…
st0o0 Jun 1, 2026
a78c352
fix(server): pull next pipelined response after an outbound body comp…
st0o0 Jun 1, 2026
4debf0f
feat(client): Add WithFirstPartyContext and WithTimeout
st0o0 Jun 1, 2026
7bd8566
refactor: replace local Servus.Akka with git submodule
st0o0 Jun 1, 2026
2db9f0e
test(e2e): verify client routes requests through a configured proxy
st0o0 Jun 1, 2026
d4eb2ac
feat(http3): improve session manager logic
st0o0 Jun 1, 2026
2762854
feat(http2): project client http2 options to encoder
st0o0 Jun 1, 2026
28c8c07
refactor: rename instrumentation extensions
st0o0 Jun 1, 2026
6a6413d
feat(http2): add WindowScaler BDP growth formula
st0o0 Jun 1, 2026
0995bb1
feat(http2): add RttEstimator for PING-based min-RTT measurement
st0o0 Jun 1, 2026
028c49e
feat(http2): adaptive receive-window growth in FlowController (client…
st0o0 Jun 1, 2026
8537293
feat(http2): adaptive window-scaling client options + projection
st0o0 Jun 1, 2026
5cf1549
feat(http2): wire client adaptive window scaling + RTT probes
st0o0 Jun 1, 2026
db3e376
refactor(http2): move RttEstimator ownership into FlowController
st0o0 Jun 1, 2026
fd722ad
feat(http2): enable adaptive window scaling
st0o0 Jun 1, 2026
3185b7b
chore: code cleanup
st0o0 Jun 1, 2026
b7b751f
docs: update config docs
st0o0 Jun 1, 2026
24b8c5e
feat(options): Rename maxEndpointSubstreams to maxConcurrentEndpoints
st0o0 Jun 1, 2026
9467b52
feat(options): Rename body size properties
st0o0 Jun 1, 2026
2c5623c
feat: Consolidate timer names with constants
st0o0 Jun 1, 2026
b67bc5d
feat(http2): Improve HTTP/2 protocol robustness and RFC compliance
st0o0 Jun 1, 2026
32ec3f9
feat(h3): connection-error teardown on the server (stop swallow, clos…
st0o0 Jun 1, 2026
322a53b
feat(security): extend CVE-class protections to HTTP/3 + close HPACK
st0o0 Jun 1, 2026
f016208
chore: code cleanup
st0o0 Jun 1, 2026
ce844b5
feat(http2): raise per-stream receive window to 1 MB + E2E flow contr…
st0o0 Jun 1, 2026
fb9bb12
feat(server): add generic DynamicHub keyed fan-out stage
st0o0 Jun 1, 2026
5d3c6e4
test(server): DynamicHub backpressure and no-data-loss coverage
st0o0 Jun 1, 2026
b8f824b
test(server): DynamicHub pending and lifecycle coverage
st0o0 Jun 1, 2026
6196f0c
test(server): DynamicHub single-consumer parity with BroadcastHub
st0o0 Jun 1, 2026
cb81c9c
feat(server): introduce ServerPipeline owning shared + per-connection…
st0o0 Jun 1, 2026
0667861
refactor(server): wire ServerPipeline, remove ResponseDispatcherHub
st0o0 Jun 1, 2026
6f97dc2
refactor(server): move DynamicHub to shared Streams.Stages namespace
st0o0 Jun 1, 2026
dc3d6c6
feat(server): add actor-based FairShareCoordinator
st0o0 Jun 1, 2026
67f875c
refactor(server): FairShareAdmissionStage + ServerPipeline use actor-…
st0o0 Jun 1, 2026
f74f0ef
chore(server): delete Lock-based FairShareDispatcher
st0o0 Jun 1, 2026
638a946
refactor(server): rewrite ListenerActor to spawn ConnectionActor per …
st0o0 Jun 1, 2026
9ea7cb2
feat(server): add ConnectionActor for per-connection lifecycle
st0o0 Jun 1, 2026
52afa92
chore(server): delete ConnectionStage (replaced by ConnectionActor)
st0o0 Jun 1, 2026
21c3c4b
feat(streams): migrate DynamicHub tests and impl
st0o0 Jun 1, 2026
a64314c
feat(http2): Improve interim response and trailer handling
st0o0 Jun 1, 2026
4caed0d
chore(servus): Update subproject commit
st0o0 Jun 1, 2026
0ceaad9
feat(http2): validate client stream IDs per RFC 9113 §5.1.1
st0o0 Jun 1, 2026
1c0124b
feat(server): extract W3C trace context from inbound requests
st0o0 Jun 1, 2026
86fae26
fix(server): close idle H2/H3 connections on keep-alive timeout
st0o0 Jun 1, 2026
56876e3
fix(http2): reject empty :path pseudo-header for non-CONNECT requests
st0o0 Jun 1, 2026
4e73f7c
feat(http3): process inbound SETTINGS and reject duplicates
st0o0 Jun 1, 2026
e532447
feat(server): validate options on startup
st0o0 Jun 1, 2026
b815e42
fix(client): resolve typed clients via ActivatorUtilities instead of …
st0o0 Jun 1, 2026
b211aec
chore: code cleanup
st0o0 Jun 1, 2026
eb64e58
ci: Specify package name in release workflow
st0o0 Jun 2, 2026
0aec815
chore(release-next): release 3.0.0-alpha.1
github-actions[bot] Jun 2, 2026
566381d
ci: Simplify CI workflow triggers
st0o0 Jun 2, 2026
5281774
feat: pipe transport, body redesign, server simplification
st0o0 Jun 6, 2026
9fe6335
test: update tests for body redesign, add regression specs
st0o0 Jun 6, 2026
561ff28
fix(body): H10 truncated body error propagation, H11 chunked boundary…
st0o0 Jun 6, 2026
0759dc9
test(client): add Channel API integration tests for H11
st0o0 Jun 6, 2026
a249088
fix(bench): prevent streaming benchmark deadlocks
st0o0 Jun 7, 2026
a7be4f4
fix(bench): add IterationCleanup drain for streaming benchmarks
st0o0 Jun 7, 2026
9a54267
fix(bench): raise QUIC stream limit and harden streaming benchmarks
st0o0 Jun 7, 2026
48fe358
fix(bench): add 30s timeout to all benchmark clients
st0o0 Jun 7, 2026
9773bab
feat(client): expose pipe buffer tuning via TurboClientOptions
st0o0 Jun 7, 2026
e1b512f
perf(tcp): update submodule with write coalescing
st0o0 Jun 7, 2026
863db54
test: update submodule with async test fixes
st0o0 Jun 7, 2026
a16fd7f
perf(tcp): update submodule with server transport alignment
st0o0 Jun 7, 2026
bf3effd
fix: client flush backpressure, QUIC pipe options, test fixes
st0o0 Jun 7, 2026
ef32fea
fix(tcp): update submodule with concurrent PipeWriter access fix
st0o0 Jun 7, 2026
70dd46f
test(e2e): increase timeouts for timing-sensitive E2E tests
st0o0 Jun 7, 2026
e18b2e3
fix(server): always call TryPullResponse from OnNetworkPull
st0o0 Jun 7, 2026
fa5d3bd
fix(bench): prevent benchmark reports from overwriting previous runs
st0o0 Jun 7, 2026
82b1cb7
fix(bench): add 30s timeout guard to all benchmark iterations
st0o0 Jun 7, 2026
b9cd7e0
fix(bench): add CancellationToken timeout to all warmup and SendAsync…
st0o0 Jun 7, 2026
7cee693
fix(quic): update submodule with QUIC accept loop resilience
st0o0 Jun 7, 2026
564e753
fix(bench): align H3 client MaxConcurrentStreams with Kestrel default
st0o0 Jun 7, 2026
be01236
fix(bench): drain stale responses at start of each streaming iteration
st0o0 Jun 7, 2026
564968a
fix(bench): drop CL=4096 from streaming benchmarks
st0o0 Jun 8, 2026
e74d9d2
feat(protocol): add CancellationToken infrastructure for per-request …
st0o0 Jun 7, 2026
9602238
feat(client): propagate effective CancellationToken onto request options
st0o0 Jun 7, 2026
bcb808e
feat(stage): register per-request CancellationToken callbacks in conn…
st0o0 Jun 7, 2026
323097d
feat(h2): emit RST_STREAM on per-request cancellation
st0o0 Jun 7, 2026
6b51616
feat(h10): per-request cancellation with disconnect
st0o0 Jun 7, 2026
3b01383
feat(h11): per-request cancellation with pipelining awareness
st0o0 Jun 7, 2026
0cbe4d9
feat(h3): emit STOP_SENDING on per-request cancellation
st0o0 Jun 7, 2026
9fdf269
test: add end-to-end cancellation integration tests
st0o0 Jun 7, 2026
fd4bf5e
feat(client): default timeout for channel path + CancelPendingRequest…
st0o0 Jun 8, 2026
7d125ac
test(cancel): add H3/QUIC cancellation tests, refactor to Theory
st0o0 Jun 8, 2026
1defdbb
fix(quic): update submodule — drain pending acquires on release/estab…
st0o0 Jun 8, 2026
a02761a
fix(bench): restore CL=4096 for streaming benchmarks
st0o0 Jun 8, 2026
3075351
test(e2e): harden ConcurrentLargePost interleaved test for CI
st0o0 Jun 8, 2026
daab86a
fix(bench): switch heavy benchmarks to /upload route + throttle strea…
st0o0 Jun 8, 2026
fe255b2
refactor(bench): remove Binkraken benchmarks entirely
st0o0 Jun 8, 2026
fb5c55a
fix(body): QueuedBodyReader.ReadAsync now respects CancellationToken
st0o0 Jun 8, 2026
63a1319
fix(quic): update submodule — server stream accept loop exception han…
st0o0 Jun 8, 2026
03a6d9c
perf(server): fix QUIC stream leak, reduce allocations, improve H2 th…
st0o0 Jun 8, 2026
bc21107
fix(body): resolve pending ReadAsync on Reset to prevent InvalidOpera…
st0o0 Jun 8, 2026
f27b895
perf: pool TransportData wrappers + convert PipeTo messages to readon…
st0o0 Jun 8, 2026
575375e
fix(benchmarks): protocol-aware fan-out limits and scaled timeouts
st0o0 Jun 8, 2026
5e54fe3
perf: right-size body drain buffers using content-length
st0o0 Jun 8, 2026
49b3032
perf(h3): pool FrameDecoder and rent StreamState from pool in server
st0o0 Jun 8, 2026
1ff7130
perf(h3): cache QPACK encode buffer across Encode() calls
st0o0 Jun 8, 2026
0ea3214
perf(server): eliminate SetOnStarting closure allocation
st0o0 Jun 8, 2026
ea52a12
perf(server): synchronous body read bypass for pre-buffered responses
st0o0 Jun 8, 2026
1988ddb
perf: reduce QueuedBodyReader default capacity from 64 to 8
st0o0 Jun 8, 2026
3857fc9
feat(server): expose TransportBufferOptions with protocol-optimized d…
st0o0 Jun 9, 2026
4b65fb3
perf: pass sizeHint to GetMemory() + sync body read bypass for H10 se…
st0o0 Jun 9, 2026
6a06a89
perf(server): recycle FeatureCollection after response body consumption
st0o0 Jun 9, 2026
f4a1bb4
perf(client): remove .Async() boundary from EndpointDispatchStage
st0o0 Jun 9, 2026
35e45fa
perf(h3): reduce QUIC pipe MinimumSegmentSize from 16KB to 4KB
st0o0 Jun 9, 2026
721c992
perf(server): dual-mode ResponsePipeWriter with lazy Pipe upgrade
st0o0 Jun 9, 2026
8823dec
perf(server): buffered body fast path for all protocol SMs
st0o0 Jun 9, 2026
3db8272
perf(server): pool ArrayBufferWriter<byte> for response body buffering
st0o0 Jun 9, 2026
93a9f26
fix: Remove unused OpenTelemetry package
st0o0 Jun 9, 2026
d2cc47f
feat(server): Add transport buffer options
st0o0 Jun 9, 2026
f31784e
fix(h2): track stream-level send window in FlowController.OnDataSent
st0o0 Jun 9, 2026
a64f68b
fix(server): split buffered body into MAX_FRAME_SIZE-compliant DATA f…
st0o0 Jun 9, 2026
2f57852
fix(h2/server): partial send in DrainOutboundBuffer when flow control…
st0o0 Jun 9, 2026
e56b38d
refactor: Remove unused MemoryPool reference
st0o0 Jun 9, 2026
4ed9c42
fix(h10/server): dispatch streaming request bodies before full receipt
st0o0 Jun 9, 2026
e6c6f56
fix(e2e): use ctx.RequestAborted instead of TestContext CancellationT…
st0o0 Jun 9, 2026
579897f
chore: Remove Claude agent definitions
st0o0 Jun 9, 2026
cbc2252
fix(e2e): stabilize E2E integration tests
st0o0 Jun 9, 2026
f8d2485
fix(http2/3): correct body read pending state
st0o0 Jun 10, 2026
91fdab1
fix(http): fix http version comparison and null checks
st0o0 Jun 10, 2026
6ec29cb
fix(http): Improve flow control and stream draining
st0o0 Jun 10, 2026
98f2e92
test(ci): Enable parallel test execution
st0o0 Jun 10, 2026
0dae2a3
fix(test): Disable parallel test collections
st0o0 Jun 10, 2026
a1d783f
fix(ci): Disable parallel test modules
Dirnei Jun 10, 2026
9dce6a6
fix(test): make integration test infrastructure parallel-safe
Dirnei Jun 11, 2026
0ed7e7f
fix(ci): run two test modules in parallel
Dirnei Jun 11, 2026
0db412f
docs(notes): document H2 response truncation race with repro steps
Dirnei Jun 11, 2026
ba89a9c
fix(http2): make QueuedBodyReader thread-safe and fail truncated resp…
Dirnei Jun 11, 2026
65dd73f
fix(test): raise client timeout in LargePayloadSpec for CI contention
Dirnei Jun 11, 2026
93544d5
ci: add matrix strategy for test backends
st0o0 Jun 11, 2026
90b7e9e
chore(servus.akka): update subproject commit
st0o0 Jun 11, 2026
66aaa08
chore(release-next): release 3.0.0-alpha.2
github-actions[bot] Jun 11, 2026
4c3f186
docs: align option references and client API docs with current code
st0o0 Jun 11, 2026
4667f8a
feat(client): add CONNECT support
st0o0 Jun 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
234 changes: 0 additions & 234 deletions .claude/agents/spec-refactorer.md

This file was deleted.

16 changes: 0 additions & 16 deletions .claude/settings.json

This file was deleted.

22 changes: 9 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,8 @@
name: Build & Test

on:
push:
branches: ["main"]
paths-ignore:
- "docs/**"
- "notes/**"
- "*.md"
- ".github/workflows/docs.yml"
- ".github/workflows/commitlint.yml"
- ".github/workflows/codeql.yml"
- ".github/workflows/release.yml"
pull_request:
branches: ["main"]
branches: ["main", "release-next"]
paths-ignore:
- "docs/**"
- "notes/**"
Expand Down Expand Up @@ -40,13 +30,17 @@ permissions:
jobs:
build-and-test:
runs-on: ubuntu-latest
if: "github.event_name == 'pull_request' || !startsWith(github.event.head_commit.message, 'chore(main): release')"
strategy:
fail-fast: false
matrix:
backend: [kestrel, docker]

steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 1
submodules: true

- name: Install libmsquic (QUIC/HTTP3 support)
run: |
Expand All @@ -72,8 +66,10 @@ jobs:
--no-restore
${{ env.PROJECT_PATH }}

- name: Run tests
- name: Run tests (backend=${{ matrix.backend }})
working-directory: "./src"
env:
TURBOHTTP_TEST_BACKEND: ${{ matrix.backend }}
run: >
dotnet test
--configuration Release
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
submodules: true

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/commitlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: PR & Commit Lint

on:
pull_request:
branches: ["main"]
branches: ["main", "release-next"]
types: [opened, edited, synchronize]

permissions:
Expand Down
13 changes: 8 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Release & Publish

on:
push:
branches: [ "main" ]
branches: [ "main", "release-next" ]

env:
GLOBAL_JSON_PATH: "./src/global.json"
Expand All @@ -28,6 +28,7 @@ jobs:
id: release
uses: googleapis/release-please-action@v5
with:
target-branch: ${{ github.ref_name }}
config-file: release-please-config.json
manifest-file: .release-please-manifest.json

Expand All @@ -42,6 +43,7 @@ jobs:
with:
fetch-depth: 1
lfs: 'true'
submodules: true

- name: Install .NET
uses: actions/setup-dotnet@v5
Expand Down Expand Up @@ -75,7 +77,7 @@ jobs:
uses: actions/upload-artifact@v7
with:
name: nuget-packages
path: ${{ env.PACKAGE_OUTPUT_DIRECTORY }}/*.nupkg
path: ${{ env.PACKAGE_OUTPUT_DIRECTORY }}/TurboHTTP.*.nupkg

nuget-publish:
runs-on: ubuntu-latest
Expand All @@ -95,7 +97,7 @@ jobs:
- name: Push to NuGet.org
run: >
dotnet nuget push
${{ env.PACKAGE_OUTPUT_DIRECTORY }}/*.nupkg
${{ env.PACKAGE_OUTPUT_DIRECTORY }}/TurboHTTP.*.nupkg
--source https://api.nuget.org/v3/index.json
--api-key ${{ secrets.NUGET_SECRET }}
--skip-duplicate
Expand All @@ -104,12 +106,12 @@ jobs:
uses: softprops/action-gh-release@v3
with:
tag_name: ${{ needs.release-please.outputs.tag_name }}
files: ${{ env.PACKAGE_OUTPUT_DIRECTORY }}/*.nupkg
files: ${{ env.PACKAGE_OUTPUT_DIRECTORY }}/TurboHTTP.*.nupkg

docs-build:
runs-on: ubuntu-latest
needs: release-please
if: needs.release-please.outputs.release_created == 'true'
if: needs.release-please.outputs.release_created == 'true' && github.ref == 'refs/heads/main'
defaults:
run:
working-directory: docs
Expand All @@ -120,6 +122,7 @@ jobs:
with:
fetch-depth: 0
lfs: 'true'
submodules: true

- name: Setup Node.js
uses: actions/setup-node@v6
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -373,4 +373,5 @@ TurboHTTP/.obsidian/
.maggus/logs/
.maggus/worktrees/

*.ps1
*.ps1
TURBOHTTP_GAP_ANALYSIS.md
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "lib/servus.akka"]
path = lib/servus.akka
url = https://github.com/Bavaria-Black/servus.akka.git
Loading
Loading