Skip to content

v0.6.0: Structured Concurrency and Composable HTTP/TLS

Latest

Choose a tag to compare

@Coldwings Coldwings released this 12 Oct 03:19
c662f33

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_group and task_scope, runtime cancellation contexts,
    move-only lazy tasks, and structured when_all, when_any and with_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_any joins losers, and timeout cancellation can wait for token-ignoring
    work to complete.
  • Replace direct use of the removed vthread_stack allocator 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-time transport_config::configure_tls. Proxy TLS uses its own
    proxy.configure_tls and verification policy.
  • Update HTTP response framing, task<reply> handlers, exhaustive reply
    visitors and owned SSE producers. The complete-response close marker and
    headers-only build_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