What problem does it solve? Shaping the exported API of a UniFFI boundary crate is error-prone: wrong Record versus Object choices, non-Send/Sync state, borrowed returns, panics reaching foreign callers, and cryptic bindgen errors all break Kotlin and Swift consumers. This Skill provides the decision rules, version floors, and error triage tables needed to author or review that surface correctly. ## Core Features & Use Cases - Surface design rules: Decide between uniffi::Object and uniffi::Record, enforce Send + Sync on exported Objects, and apply ownership rules for Arc handles, borrowed arguments, and &[u8] buffers. - Foreign callbacks and async exports: Implement ProgressListener-style foreign traits with proper error mapping, and configure async exports with the correct Tokio runtime attribute and drop-safe await points. - Error triage and review: Diagnose UniFFI macro and bindgen failures (UniFfiTag, Lift/Lower bounds, UnexpectedUniFFICallbackError) with a symptom-cause-fix table, plus a 19-item merge checklist. - Use Case: When adding a new exported method to a Rust engine crate consumed by an Android and iOS app, use this Skill to choose the right types, keep the surface panic-free, and verify both generated bindings compile from one build. ## Quick Start Ask the agent to review the UniFFI boundary crate's exported API for correctness before merging the change.