Repository navigation
Elio v0.6.0 — 2026-10-12
Elio 0.6.0 is the first formal release of the 0.6 line. It brings structured
concurrency, clearer coroutine and I/O ownership, and composable HTTP/TLS
streaming to the Linux C++20 header-only library. It includes intentional
source and behavior changes from 0.5.x.
Highlights
- Scheduler-bound
task_groupandtask_scope, runtime cancellation contexts,
move-only lazy tasks, and structuredwhen_all,when_anyandwith_timeout. - Worker/generation-pinned I/O ownership, one-shot scheduler teardown,
cancellation-aware synchronization, and safer task/frame retirement. - Incremental HTTP/1 response decoding, owned HTTP/SSE streaming replies,
scoped client response consumption and server-owned CONNECT tunnels. - Shared immutable HTTP Transports, route-bound leases, opt-in finite
admission, owned client errors, and explicit HTTP/HTTPS proxies with
independent proxy and origin TLS policies. - Generic
basic_tls_stream<Lower>composition, bounded TLS output and
protocol-aware output completion. - Bounded DNS observation, positional file transfer/persistence helpers,
asynchronous task-destruction observation, and correctness/conformance
diagnostics for networking workloads.
Breaking changes and migration
Read the 0.6 migration guide
before upgrading from 0.5.x. In particular:
- Transfer lazy tasks by move. Direct awaits share their execution context;
independent spawn roots and task scopes have explicit cancellation boundaries. - Combinators return move-only lazy tasks and join accepted children.
when_anyjoins losers, and timeout cancellation can wait for token-ignoring
work to complete. - Replace direct use of the removed
vthread_stackallocator and old custom
I/O affinity helpers; retain pending frames and borrowed buffers through
normal completion and cleanup. - Replace mutable HTTP/1
client::tls_context()customization with
construction-timetransport_config::configure_tls. Proxy TLS uses its own
proxy.configure_tlsand verification policy. - Update HTTP response framing,
task<reply>handlers, exhaustive reply
visitors and owned SSE producers. The complete-response close marker and
headers-onlybuild_sse_response()helper were removed. - TCP scatter/gather writes return
task<io_result>and can make partial
progress; review buffer lifetimes and exact-transfer requirements.
Validation
The underlying code passed x64 and arm64 Release/Debug CI, ASAN/TSAN partitions,
installed-package consumption, HTTP streaming/peer examples, CodeQL and
benchmark conformance. The release documentation was checked against current
headers and contracts and passed its PR review and applicable CI. Documentation
path filtering intentionally avoids rerunning unchanged code matrices.
Known limitations
- Cancellation remains cooperative. It does not authorize asynchronous frame
destruction, undo writes, guarantee peer delivery, or force token-ignoring
work/libc DNS calls to stop. - The high-level HTTP/2 client uses sequential pooled connections; separate
clients are required for parallel application requests. It does not expose
pushed responses or implement HTTP/2 CONNECT. - The historical HTTP TLS metrics timeout in
#1219
remains unclassified because the original causal partial-response evidence
is unavailable. Its administrative closure is not a repair claim. Preserve
full logs, revision/configuration and response/deadline state on recurrence. - Shared-runner benchmark results are diagnostics and conformance evidence;
they do not establish cross-library performance rankings.
See the complete changelog
and documentation.
Full comparison: v0.5.3...v0.6.0