Releases: colliery-io/fidius
Release list
v0.5.2 — Facade completeness (drop the fidius-host dep)
Makes the fidius facade a complete boundary for host applications (and white-label re-export crates), so they no longer need a direct fidius-host dependency.
What changed
The facade previously re-exported only part of fidius-host's public surface, which forced wasm host code to reach into fidius-host directly. Now it mirrors the whole crate-root API:
- Host (under
host): addsPluginHostBuilder,LoadedLibrary,LoadedPlugin,PluginExecutor,PluginRuntimeKind(alongside the existingPluginHost,PluginHandle,PluginInfo,LoadPolicy,CallError,LoadError). - WASM (under
wasm):EgressPolicy,EgressDenied, and thehttpcrate re-exported ashttp_types— so anEgressPolicy::authorizeimpl can namehttp_types::request::Parts(+Uri,HeaderMap, …) without depending onhttpdirectly. PluginHostBuilderis now also at thefidius-hostcrate root (it wasn't before).- Compile-test guards lock the full surface so a future drop fails the build.
Result
fidius = { version = "0.5.2", features = ["wasm", "streaming"] }
# …and drop the direct `fidius-host` dependency entirely.Everything a host app needs — PluginHost/load_wasm/call_streaming/EgressPolicy/http_types — now comes through one namespace.
Additive only — no ABI or wire change (ABI stays 500); 0.5.x plugins remain compatible.
v0.5.1 — Re-export the WASM egress contract
Patch fix for white-label / facade consumers.
EgressPolicy and EgressDenied were pub only at fidius_host::executor::wasm and were never re-exported up — so consumers naming the host API through the fidius facade (including white-label re-export crates) couldn't name them to implement a PluginHost egress policy, even though PluginHost::builder().egress(..) takes them.
- fidius-host: re-exported at the crate root —
fidius_host::{EgressPolicy, EgressDenied}. - fidius (facade): new
wasmfeature (= ["host", "fidius-host/wasm"]) that re-exports them —fidius::{EgressPolicy, EgressDenied}. Enablefidius/wasmto reach them through the facade.
Additive only — no ABI or wire change (ABI stays 500); 0.5.x plugins remain compatible.
v0.5.0 — Streaming cross-product, configured instances, guest HTTP
The streaming release: fidius::Stream<T> now works in all three directions across cdylib, WASM, and Python.
Highlights
Streaming, all directions
- Client-streaming (
Stream<T>argument) — the host produces, the plugin pulls and reduces. - Bidirectional (
Streamin and out) — a plugin-owned transform (synchronous lazy-pull composition; ADR-0010). - Records as stream items (input as bincode; output via WIT resource), user-typed WIT args alongside streams.
- Lazy host producer on all three backends — an unbounded input streams with bounded memory.
- Unified host API:
PluginHandle::call_client_streaming/call_bidi_streaming. A runnable example per direction (03/06/07).
Configured plugin instances
- Bind config once, call many:
#[plugin_impl(Trait, config = C)]+configure. Config crosses the boundary once; N differently-configured instances coexist (cdylib/WASM/Python).
Guest HTTP & production connectors
fidius::http— a brokeredwasi:httpclient for WASM connectors, gated by anhttpcapability and a required embedder egress policy (two-key, fail-closed).- Rich WIT types (maps/tuples/nesting), typed-record streaming over WASM, per-request HTTP timeouts, structured
PluginErrorround-trip.
Capabilities
- Path-scoped filesystem (
fs:ro:<path>/fs:rw:<path>preopens) and per-variable environment (env:VAR_NAME).
⚠️ Breaking
- ABI 400 → 500 (unified construct/destroy instance ABI). Plugins built against 0.4.x must be rebuilt; the host rejects an ABI mismatch loudly at load.