Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 02 May 08:41
· 389 commits to main since this release

[0.4.0] - 2026-05-02

🚀 Features

  • [breaking] Drop raw_connect from public surface
  • (core) Decompress inbound request bodies on serve path
  • (api) [breaking] Rename node.connect→dial, node.sessions→incoming, session_→Session::
  • (api) Node.dial() accepts httpi:// URLs (closes #166)
  • (compression) [breaking] Make zstd always-on, drop build-time feature flag
  • (ffi) Impl Sink for BodyWriter (#174)
  • (ffi) Pass StackConfig knobs through FFI — fetch timeout/decompress, serve decompress, per-call response limit (#189)
  • (node) [breaking] Migrate iroh-http-node from napi v2 to v3 (#146)

🐛 Bug Fixes

  • (core) Align compression docs and implementation
  • (core) Replace slab with slotmap in endpoint registry
  • (release) Regenerate lockfile with all platform optional deps
  • (tauri) Drop "connect" from build.rs command list
  • (deno) Close_all signals serve queues so SIGINT exits cleanly
  • (deno) Widen FFI endpoint handle to u64 to preserve slotmap version bits
  • (compression) Align min_body_bytes default with docs (1 KiB) (closes #167)
  • (server) Box ServeService and collapse pipeline assembly into one chain
  • (server) Add max_request_body_decoded_bytes to guard against zstd bombs (#190)
  • (tauri) Rename max_request_body_bytes in ServeArgs and ServeOptions mapping (#190 follow-up)
  • (server) Poll_ready logs+Pending instead of swallowing; add clippy.toml disallowed-types
  • (ffi) Forward fetch knobs in Node/Deno adapters; add AC regression tests (#189)
  • (ci) Narrow version-bump-policy to actual version-field diffs (#196)
  • (api) Tidy stale references after #194 rename
  • (shared) Export FetchOptions from adapter barrel
  • (deny) Ignore hickory CVEs blocked on iroh upstream
  • (audit) Ignore hickory CVEs in cargo-audit config
  • (bench) Replace serve() with ffi_serve() in bench fixtures
  • (shared) Export FetchOptions from public index barrel
  • (node) Make start_transport_events async to satisfy tokio runtime
  • (node) Make raw_serve async to run inside tokio runtime
  • (bench) Clean up formatting in QUIC stream and HTTP benchmarks
  • (core) Resolve P3 issues #199, #200, #201, #202, #203
  • (build) Auto-repair bare lockfile stubs in check-lockfile.mjs

🚜 Refactor

  • (core) Introduce unified Body newtype (slice 1 of #159)
  • (core) Make RequestService infallible (slice 2 of #159)
  • (core) Collapse serve-loop wiring with option_layer (slice 3 of #159)
  • (core) Split RequestService into FfiDispatcher + IrohHttpService (slice 4 of #159)
  • (core) Rename TowerErrorHandler → HandleLayerError + ADR-013 doc (slice 6 of #159)
  • (core) Use tower_http::RequestBodyLimitLayer for request-body size enforcement
  • (core) Unify response body via MapResponseBodyLayer + Body::new
  • (core) Extract config and stats types out of endpoint.rs
  • (server) Use tower-http NotForContentType for compression skip rules (closes #172)
  • (server) Extract per-bistream pipeline assembly into server_pipeline (closes #169)
  • (stream) Impl http_body::Body for BodyReader directly (refs #170)
  • (endpoint) Split EndpointInner into named subsystems (closes #171)
  • (server) IrohHttpService.remote_node_id is Arc, not Option
  • (server_pipeline) Extract build_stack so the guardrail tests the real chain
  • (core) [breaking] Slice A — introduce mod http / mod ffi split + architecture test
  • (core) Slice B — typed StackConfig + shared build_stack/build_client_stack (#184)
  • (core) Slice C.0 — boxed-per-layer stack composition (#185)
  • (core) Slice C.1+C.3 — pure-Rust serve(svc) + RemoteNodeId extension (#185)
  • (core) Move FfiDispatcher into mod ffi (Slice C.2 of #185)
  • (core) Delete dead duplex CONNECT/Upgrade branch (Slice C.5, closes #180)
  • (core) Typed ConnectionTracker / RequestTracker (Slice C.4, closes #178)
  • (core) Collapse src/ to endpoint.rs + http/ + ffi/ (#185)
  • (server) Split http/server/mod.rs to ≤200 LoC (Slice C.7 of #185)
  • (core) Pure-Rust http::fetch(addr, req, &cfg) -> Result<Response, FetchError> (Slice D, closes #186)
  • (client) Finish Slice D acceptance — pumps to ffi, drop hyper string match, wire timeout/decompress through ffi::fetch (#186 review)
  • (ffi) Slice E — move session under mod ffi, lock canonical layout (closes #187)
  • (api) Rename serve_service → serve; demote FFI serve to ffi_serve (#194)
  • (endpoint) Split endpoint.rs into endpoint/ subsystem modules (ADR-014 D1, #192)
  • (endpoint) Extract lifecycle.rs; update ADR-014 status note (#192 follow-up)

📚 Documentation

  • (spec) Add missing public types and Rust API coverage
  • (adr) Draft ADR-014 runtime architecture
  • (adr) Add ADR-013 lean on the ecosystem
  • (internals) Add core-assessment-2026-04
  • (core) Warn FFI adapters not to truncate slotmap handles to u32
  • (compression) Document zstd-only policy and runtime support (closes #173)
  • (lib,session) Regroup Session re-export under FFI banner; doc rationale (#187 review MAINT-1, INFO-1, TEST-2)
  • (adr-014) Record D4 perf-vs-elegance split after Slice E
  • (adr-014,ffi) Record D4 resolution; backlink pumps to #174
  • (adr-014,epic-182) Recalibrate D1 LoC targets; record subsystem split gap (#195)
  • (guidelines) Document FFI payload field naming convention; add handle doc comments (#143)

⚡ Performance

  • (build) Add .cargo/config.toml, prefer cargo nextest, document linker and sccache (closes #168)
  • (node) Use zero-copy buffer transfers in napi bridge

🎨 Styling

  • (core) Rustfmt fixes after Slice C.2/C.5
  • Move allow attr out of doc-comment block; drop trailing blank lines
  • Rustfmt + napi v3 generated bindings

🧪 Testing

  • (core) Regression test for #161 u32-handle truncation
  • (server_pipeline) Adding a no-op layer is one append (closes #175)
  • (core) Add layered channel and QUIC micro-benchmarks
  • (node) Add FFI bridge isolation benchmark

⚙️ Miscellaneous Tasks

  • Gate publish on extended tests passing
  • (core) Cargo fmt
  • Remove reviews/ — findings filed as issues #190-#195
  • (docs) Remove stale Slice E comment, fix fetch intra-doc links, delete dead apply_handle_layer_error
  • (release) Gate version bumps to chore-release commits; guard version.sh against dirty trees (#196)
  • Update deno.lock
  • Release v0.4.0

◀️ Revert

  • (release) Roll workspace back to 0.3.4 to unbreak CI