Skip to content

Releases: colliery-io/fidius

v0.5.2 — Facade completeness (drop the fidius-host dep)

Choose a tag to compare

@dylanbstorey dylanbstorey released this 21 Jun 02:32

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): adds PluginHostBuilder, LoadedLibrary, LoadedPlugin, PluginExecutor, PluginRuntimeKind (alongside the existing PluginHost, PluginHandle, PluginInfo, LoadPolicy, CallError, LoadError).
  • WASM (under wasm): EgressPolicy, EgressDenied, and the http crate re-exported as http_types — so an EgressPolicy::authorize impl can name http_types::request::Parts (+ Uri, HeaderMap, …) without depending on http directly.
  • PluginHostBuilder is now also at the fidius-host crate 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

Choose a tag to compare

@dylanbstorey dylanbstorey released this 21 Jun 01:42

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 wasm feature (= ["host", "fidius-host/wasm"]) that re-exports them — fidius::{EgressPolicy, EgressDenied}. Enable fidius/wasm to 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

Choose a tag to compare

@dylanbstorey dylanbstorey released this 21 Jun 00:31

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 (Stream in 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 brokered wasi:http client for WASM connectors, gated by an http capability 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 PluginError round-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.