smix-ffi
UniFFI v0.29+ scaffolding crate for smix v7 cross-language SDK initiative.
Status
v7.0 c2 — MVP scaffolding. Single function resolve_selector exposed via UDL.
v7.0 c3+ will expand to ~10 runner async fn covering act / sense per
design.md §3 D6 + D8. Per spike #4
(decomposition report docs/plan-history/v7.0-c1-decomposition-report.md),
each async endpoint will gain a sibling cancel_{op}(handle) for
cancellation (UniFFI does not internally support coroutine cancellation).
Build pipeline
# Workspace dev test (macOS host)
# iOS sim slice (v7.0 c3 起)
# Android sim slice (v7.0 c4 起)
# Swift bindings generation (v7.0 c3)
# Kotlin bindings generation (v7.0 c4)
# XCFramework packaging (v7.0 c3)
Architecture
Wraps stone API (smix-selector + smix-selector-resolver + smix-screen)
into UDL-defined FFI surface. UniFFI generates:
- Rust scaffolding (C-ABI extern "C" fns + RustCallStatus + RustBuffer marshalling)
- Swift bindings (typed Swift API with
async throws+Sendable) - Kotlin bindings (typed Kotlin API with
suspend fun+ sealed class errors)
Per design.md §10 iron rule §9 #13,
this FFI ships only to SDK consumers (XCUITest target / instrumentation test
target / Expo dev-client), NEVER linked into app binary. Release app
build has 0 smix-ffi bytes.
License
Apache-2.0 OR MIT (workspace inherited).