Releases
v0.4.0
Compare
Sorry, something went wrong.
No results found
[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
You can’t perform that action at this time.