v0.6.0
Breaking
- WASM engine migrated from Extism to wasmtime Component Model. Capsules must be rebuilt targeting
wasm32-wasip2. The#[capsule]macro now generatesimpl Guest+export!()instead ofextern "C"exports. The ABI is completely different — existing.wasmbinaries will not load. (#27) - All
&[u8]parameters changed to&str. IPC topics, KV keys, filesystem paths, and uplink params now require UTF-8 at compile time (was runtime validation). (#31) - Approval API simplified to OS permission model.
approval::request(action, resource) -> Result<bool>replaces the 3-param version withRiskLevel. RemovedRiskLevel,ApprovalDecision,ApprovalResult. Capsules declare what they want; the kernel classifies risk. (#31, astrid-runtime/astrid#641) - Interceptor errors halt the chain. The
#[capsule]macro returns"deny"on error (was"error"which the kernel silently treated as"continue"). (#27) CallerContextfields corrected.session_id→source_id(capsule UUID), addedtimestamp. (#27)identity::linkreturnsResult<()>. WasResult<Link>with emptylinked_atfield. (#27)
Removed
ipc::publish_bytes,ipc::publish_msgpack,ipc::poll_bytes,ipc::recv_bytes— use typedpublish/publish_json/poll/recv. (#31)uplink::send_bytes— useuplink::send. (#31)net::bind_unix(path)— usenet::bind_unix()(no path arg). (#31)hooks::trigger(&[u8])— nowtrigger(&str) -> String. (#31)process::ProcessRequest,SubscriptionHandle::as_bytes(),host_result.rs,cronmodule. (#27, #31)extism-pdkandrmp-serdedependencies. (#27, #31)
Added
wit_events!proc macro. Reads a.witfile and generates Rustpub struct/pub enumdefinitions for every named WIT record and enum, withSerialize + Deserialize + PartialEq + Clone + Debugderives and///doc comments preserved. Capsule authors write WIT once — the same file feedswit_events!()for Rust types and the core'swit-parserfor JSON Schema extraction. Zero type duplication. (#32)- Serde derives on all WIT-generated types.
astrid-sysnow passesgenerate_unused_types: trueandadditional_derives: [serde::Serialize, serde::Deserialize, PartialEq]towit_bindgen::generate!. (#32) - Typed IPC poll/recv.
ipc::poll()/ipc::recv()returnPollResult { messages: Vec<Message>, dropped, lagged }. (#31) - HTTP Response exposes status + headers.
Response::status(),Response::headers(),Response::is_success(). (#31) log::trace(). All log functions now return()(wasResult). (#31)- Component Model test capsule.
examples/test-capsule/validates the full SDK→macro→WIT pipeline, includingwit_events!generated types used inipc::publish_json(). (#27, #32) - Mandatory WIT exports.
#[capsule]macro generates all 4 guest exports with no-op stubs for unused ones. Solves astrid-runtime/astrid#638. (#27)
Changed
astrid-sysuseswit_bindgen::generate!instead ofextism_pdkFFI. (#27)SysError::HostErrorwrapsString(wasextism_pdk::Error). (#27)- Handle types internally wrap
u64with consistentid()accessor. (#31) http::Responsefields private with accessor methods. (#31)interceptors::pollhandler receives typed&ipc::PollResult. (#31)- State not persisted on tool error. Install/upgrade/run errors logged. (#27)
#![forbid(unsafe_code)]onastrid-sdk. (#27)
With many thanks from the following Astrinauts 🚀
- Joshua J. Bouw