diff --git a/public/llms.txt b/public/llms.txt index 9243091..c0781da 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -1,6 +1,6 @@ # Traverse -> Traverse is a governed capability runtime for portable business logic. Value loop: **discover → execute → trace**. Usual authoring is skill-first plain English via `traverse-capability-author` (contract → WASM → human-reviewed PR); manual authoring still uses Rust→WASM — you do **not** need to write Rust for the usual path. One shared `runtime.wasm`; browser, native desktop, CLI, and MCP are clients/embedders, not different Traverse runtimes. Shipped consumers today: JS/TS (`traverse-embedder-web`), Rust (`traverse-embedder`), agents via `traverse-mcp`; Python shells out to `traverse-cli capability-package execute` (**no Python SDK**). v0.15.0 headline: governed model execution on every host — signed exact-ref on native Rust, the browser, Swift, Kotlin/Android, and .NET; every host enforces model rights (`model_usage` is required); Core ML is an opt-in Apple placement (macOS cargo-test evidence plus the Decision 113 iPhone spike; governed-path iPhone evidence is traverse#1630, still open). Swift (xcframework `swift-host-v0.15.0`; `Package.swift` on main pins it), Kotlin (Maven Central `com.traverse-framework:traverse-embedder` 0.15.0), and .NET (nuget.org `TraverseEmbedder` 0.15.0) are published, pre-1.0, and not Certified; edge is planned; cloud placement is an explicit non-goal for v0.1 — see /platforms.html and /what-is-real-today.html. Apache 2.0, pre-1.0 (v0.15.0). The agent proposes; the runtime decides. +> Traverse is a governed capability runtime for portable business logic. Value loop: **discover → execute → trace**. Usual authoring is skill-first plain English via `traverse-capability-author` (contract → WASM → human-reviewed PR); manual authoring still uses Rust→WASM — you do **not** need to write Rust for the usual path. One shared `runtime.wasm`; browser, native desktop, CLI, and MCP are clients/embedders, not different Traverse runtimes. Shipped consumers today: JS/TS (`traverse-embedder-web`), Rust (`traverse-embedder`), agents via `traverse-mcp`; Python shells out to `traverse-cli capability-package execute` (**no Python SDK**). v0.15.0 headline: governed model execution on every host — signed exact-ref on native Rust, the browser, Swift, Kotlin/Android, and .NET; every host enforces model rights (`model_usage` is required); Core ML is an opt-in Apple placement (macOS cargo-test evidence plus the Decision 113 iPhone spike; governed-path iPhone evidence is traverse#1630, still open). Swift (xcframework `swift-host-v0.15.0`; `Package.swift` on main pins the `swift-host-v0.15.0-1` rebuild, traverse#1695), Kotlin (Maven Central `com.traverse-framework:traverse-embedder` 0.15.0), and .NET (nuget.org `TraverseEmbedder` 0.15.0) are published, pre-1.0, and not Certified; edge is planned; cloud placement is an explicit non-goal for v0.1 — see /platforms.html and /what-is-real-today.html. Apache 2.0, pre-1.0 (v0.15.0). The agent proposes; the runtime decides. - Start here (narrative): https://traverse-framework.com/blog/what-is-real-today-start-here.html - How do I start with Traverse as an agent?: https://traverse-framework.com/questions/how-do-i-start-with-traverse-as-an-agent.html - What does Traverse not claim yet?: https://traverse-framework.com/questions/what-does-traverse-not-claim-yet.html @@ -79,6 +79,10 @@ Current packages: crates.io Traverse at 0.15.0; npm `traverse-embedder-web@0.15. - [How do hosts trust signed models?](https://traverse-framework.com/questions/how-do-hosts-trust-signed-models.html): discover → execute → trace; one shared `runtime.wasm`; host-owned trust roots gate `register_package`; pin by digest + `model.sig.json`; `model_usage` required in v0.15.0; test-only digits-mlp key (custody #1567 still open); published exact-ref execute is native + web + Swift `swift-host-v0.15.0` + Kotlin and .NET 0.15.0; third-party ONNX can be packaged and signed with `traverse-cli model`. - [Which hosts run signed exact-ref models?](https://traverse-framework.com/questions/which-hosts-run-signed-exact-ref-models.html) · [Is production model signing ready?](https://traverse-framework.com/questions/is-production-model-signing-ready.html) · [Can Kotlin or .NET run exact-ref yet?](https://traverse-framework.com/questions/can-kotlin-or-dotnet-embedders-run-exact-ref-yet.html): discover → execute → trace; one shared `runtime.wasm`; published exact-ref is native + web 0.15.0 + Swift `swift-host-v0.15.0` + Kotlin and .NET 0.15.0 (#1651 closed); production signing custody is not finished (#1567 still open; v0.15.0 shipped key-generation tooling). - [What is ExactModelHost?](https://traverse-framework.com/questions/what-is-exact-model-host.html): host-side connector for governed exact-ref model packages (Spec 138). Register a signed package under host-owned trust roots, then execute under discover → execute → trace. Not a second runtime. Published in 0.15.0: native connector, web `ExactModelBrowserHost`, Swift `ExactModelHost` on `swift-host-v0.15.0`, Kotlin and .NET `ExactModelHost` in Maven/NuGet 0.15.0 (#1651 closed). Test-only digits-mlp key; custody #1567 still open. Not catalog `model.execute`. Not Hugging Face. +- [Signed models on every host. The rights travel with them.](https://traverse-framework.com/blog/signed-models-on-every-host.html): Oct 15 v0.15.0 narrative — discover → execute → trace; signed exact-ref on native Rust, web, Swift `swift-host-v0.15.0`, Kotlin and .NET 0.15.0 via small audited native boundaries sharing `traverse-model-host-frame`, byte-identical conformance vectors, one 21-case rights suite; **breaking** `model_usage`; `traverse-cli model` + `package-onnx` (install `traverse-cli-rs`, runner from `onnx-runner-v0.15.0`); ABI v3 prepare-once; Core ML opt-in on Apple (iPhone governed evidence traverse#1630 open). Caveats: web `modelUsage` not validated (traverse#1685), CLI verify usage (traverse#1686, main only), test-only key (custody #1567), registry capability revocation #1598 not shipped. No host Certified. +- [What is model_usage?](https://traverse-framework.com/questions/what-is-model-usage-in-traverse.html): since v0.15.0 apps with `exact_model_dependencies` must declare `model_usage: commercial | non_commercial` or fail closed with `usage_undeclared`; `commercial` rejects `prohibited` packages (`rights_policy_denied`); results carry `model_evidence`; Rust `ExactModelHostConnector::model_usage`, web `modelUsage`, Swift `modelUsage:` (no default), Kotlin/.NET `modelUsage`. Gaps: published web 0.15.0 accepts any string (traverse#1685); `traverse-cli-rs` 0.15.0 `model verify` has no usage flag (traverse#1686, fixed on main after release). +- [How do I package my own ONNX model?](https://traverse-framework.com/questions/how-do-i-package-an-onnx-model-for-traverse.html): `cargo install traverse-cli-rs --version =0.15.0 --locked` (Rust ≥ 1.94; crates.io `traverse-cli` is unrelated); `runner.wasm` from GitHub release `onnx-runner-v0.15.0` (sha256 `f3902703fe79cc161c13b87cf507dcb25cb53ea3c2a68bed6cc753f9df100966`); `model package-onnx` → sign → verify → conformance → pin; one input + one output tensor only (traverse#1661); post-processing belongs in capabilities, hosts stay UI + I/O. Not catalog `model.execute`, not Hugging Face. +- [What happens when a host marks a model package revoked?](https://traverse-framework.com/questions/what-happens-when-a-host-marks-a-model-package-revoked.html): v0.15.0 hosts own a package-status map for signed model packages — `revoked` blocks (`package_revoked`), `deprecated` runs and is flagged; `model_evidence` on every result. Not registry capability revocation (runtime refusal is traverse#1598, not shipped). - [Can Traverse run models on a GPU or the Apple Neural Engine?](https://traverse-framework.com/questions/can-traverse-run-models-on-a-gpu-or-neural-engine.html): Core ML is an opt-in Apple placement in v0.15.0. Default stays `wasm-cpu`. Ordered placements, on-device self-check, fail-closed `placement_unavailable`, placement evidence (Decision 112). Evidence so far is macOS cargo test plus the Decision 113 iPhone spike. Governed-path iPhone evidence is traverse#1630, still open. No web, Android, or desktop GPU adapter. No host is Certified. - [What is digits-mlp?](https://traverse-framework.com/questions/what-is-digits-mlp.html): first trained exact-ref package in v0.14.0 (UCI digits MLP, 96.10% held-out, bit-identical); test-only signing; not a general LLM. - [Does the website use the latest traverse-embedder-web?](https://traverse-framework.com/questions/does-the-website-use-the-latest-traverse-embedder.html): site pins `^0.15.0` (matching npm) and `/discover` admits its signed demo fixture through `registerPackage` with `modelUsage: non_commercial`; the site can lag future releases, so product apps pin published packages, not the website demo. diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro index 59d44b0..abdab0b 100644 --- a/src/pages/blog/index.astro +++ b/src/pages/blog/index.astro @@ -2,6 +2,7 @@ import SubpageLayout from '@layouts/SubpageLayout.astro'; const posts = [ + { href: '/blog/signed-models-on-every-host.html', title: 'Signed models on every host. The rights travel with them.', desc: 'Featured · Oct 15 · Traverse v0.15.0: signed exact-ref packages run on Swift, Kotlin/Android, and .NET as well as native Rust and the browser, on one framed protocol and one 21-case rights suite. model_usage is required (breaking). ONNX packaging via traverse-cli-rs, ABI v3 prepare-once, opt-in Core ML on Apple. Web modelUsage validation is #1685; iPhone evidence #1630; signing custody #1567. No host is Certified.' }, { href: '/blog/one-shared-runtime-two-loading-paths.html', title: 'One shared runtime. Not one shared .wasm file on every host.', desc: 'Featured · Oct 13 · One product runtime and one host ABI, two loading paths. Web BundleEmbedder digest-checks the bundle’s runtime.wasm. Rust traverse-embedder@0.14.0 links traverse-runtime natively. Capability WASM stays on that ABI. Hosts stay clients.' }, { href: '/blog/agent-mcp-exact-ref.html', title: 'Agent speaks MCP. Exact pin kills the freestyle.', desc: 'Featured · Oct 9 · Weekly demo: an agent calls MCP-shaped tools over ExactModelBrowserHost against the signed digits-mlp-1.0.0 package. Browser + Node bit-identical; tamper → digest_mismatch, empty trust → key_untrusted, rights lie → rights_mismatch. Traverse v0.14.0. Test-only key. Not the Mode A traverse-mcp binary.' }, { href: '/blog/you-dont-edit-a-published-capability.html', title: "You don't edit a published capability. You mark it.", desc: 'Featured · Oct 8 · Deprecation and revocation leave the contract in place. Ranges skip the marker. Exact pins in traverse-registry 0.27.0 still resolve with lifecycle status (registry#632). Runtime refusal is traverse#1598, not shipped in v0.14.0.' }, diff --git a/src/pages/blog/signed-models-on-every-host.astro b/src/pages/blog/signed-models-on-every-host.astro new file mode 100644 index 0000000..d7784ab --- /dev/null +++ b/src/pages/blog/signed-models-on-every-host.astro @@ -0,0 +1,159 @@ +--- +import SubpageLayout from '@layouts/SubpageLayout.astro'; + +const _body = ` +
+
+
+ + + Release + Models + Honesty +
+

Signed models on every host. The rights travel with them.

+ +
+
+ +
+
+ +
+ +

Traverse v0.15.0 shipped on October 13. In v0.14.0 a signed exact-ref model package ran on native Rust and in the browser. In v0.15.0 the same package runs on the Swift, Kotlin/Android, and .NET embedders too, and every one of those hosts checks the package's rights before it runs. The loop is the one Traverse always had: discover → execute → trace. Find the pinned package, run exactly those bytes or refuse, and leave a record of what ran and under which rights.

+ +
+ Short version: pin a model by the digest of its manifest, and check its detached signature against keys the host already trusts. That now works on five published hosts: native Rust, traverse-embedder-web@0.15.0, Swift swift-host-v0.15.0, Maven Central com.traverse-framework:traverse-embedder 0.15.0, and nuget.org TraverseEmbedder 0.15.0. Declaring model_usage is now required, and that is a breaking change. Core ML on Apple is opt-in. No host is Certified. The citeable matrix is which hosts run signed exact-ref models? +
+ +

Three more hosts, one small boundary each

+ +

Each new host gets a small, audited native boundary. None of them gets its own copy of the model path. Swift's ExactModelHost (Decision 104) runs packages on wasmi behind one C-ABI symbol, traverse_swift_host_model_call. Execution runs in fuel slices, so cancelling a Swift Task or hitting a deadline interrupts an inference that is already running. Kotlin/Android (Decision 108) runs on wasmi through the traverse-android-host JNI shim. The AAR ships arm64-v8a and x86_64 libraries, 16 KB page-aligned, and an emulator CI job runs the instrumented model tests against them. .NET (Decision 111) goes through two audited P/Invoke functions, and the NuGet package carries the native engine for win-x64, win-arm64, and linux-x64.

+ +

The part that matters is underneath. All three share one framed protocol crate, traverse-model-host-frame. They match the signed conformance vectors byte for byte, and they pass the same 21-case rights suite. "Every host" is a claim about behavior, not a row of logos. If a pinned package meant one thing in Swift and another in .NET, the pin would not be worth much.

+ +

Hosts still do UI and I/O. The model hands back raw values. Turning those into a label, a threshold, or a decision is business logic. It belongs in a capability with a contract, not once in a Kotlin view model and again in a Swift one. Where business logic lives is the longer version of that rule.

+ +

Rights are checked, not just written down

+ +

This is the breaking change. An app with exact_model_dependencies must declare model_usage: commercial or non_commercial. Leave it out and registration and execution fail closed with usage_undeclared. Rust sets ExactModelHostConnector::model_usage. Web passes modelUsage to ExactModelBrowserHost. Swift's ExactModelHost initializer takes modelUsage: with no default, so existing Swift call sites stop compiling until you add it. That is on purpose. A rights check you can forget to turn on is not much of a check.

+ +

A commercial usage, declared by the app or forced by the host, rejects any package whose rights say commercial_use: prohibited, with rights_policy_denied. Hosts also own a package-status map: a revoked package is blocked and a deprecated one is flagged. Every result carries model_evidence, the verified rights record, so the trace shows which rights the answer ran under. Earlier this month I wrote that model rights are data, not a README. v0.15.0 is the release where every host acts on that data.

+ +

One caveat, and it is a real one. The published web host does not validate the value yet. traverse-embedder-web@0.15.0 accepts strings other than commercial and non_commercial, so a typo such as "Commercial" quietly skips the commercial check. That is #1685. A fix is in review (#1698) and is not in a release. Native Rust uses an enum and cannot express a bad value. Until a release fixes the web host, pass exactly commercial or non_commercial, and test the commercial path once on purpose. The short page is what is model_usage?

+ +

Package your own ONNX model

+ +

Before v0.15.0, getting a model into a signed package meant writing a guest yourself. Now traverse-cli model covers digest, sign, verify, pin, and conformance generate|check. model package-onnx turns an ONNX file into a Spec 138 package on an audited, import-free runner guest built on tract. The runner rebuilds byte for byte in CI. The digits-onnx-1.0.0 fixture scores 1727 of 1797 on every engine.

+ +

Watch the crate name. The CLI is published as traverse-cli-rs (the binary is traverse-cli). traverse-cli on crates.io is an unrelated tool. You need Rust 1.94 or newer:

+ +
cargo install traverse-cli-rs --version =0.15.0 --locked
+ +

The runner guest is not inside the crate. Download runner.wasm from the onnx-runner-v0.15.0 release, check its sha256 (f3902703fe79cc161c13b87cf507dcb25cb53ea3c2a68bed6cc753f9df100966), and pass it as the first argument to package-onnx. Then sign with a key you keep outside the repo, verify, generate a conformance vector, and pin. The walk-through is how do I package an ONNX model?

+ +

Two limits to know before you start. The packager handles one input tensor and one output tensor, so most Hugging Face text encoders, which take input_ids and attention_mask, do not fit yet (#1661). And model verify in traverse-cli-rs 0.15.0 cannot take a model usage; it always verifies as non_commercial. That is #1686, fixed on main after the release and not in 0.15.0.

+ +

Prepare once, run many

+ +

Guest ABI v3 lets the host run model_prepare once, then restore a clean snapshot into a fresh instance on every call, bounded by a new max_snapshot_bytes ceiling. Output is byte-identical on the fresh path and the snapshot path, on every host. ONNX packages built by package-onnx prepare once. ABI v1 and v2 guests keep working, and packages signed for v0.14.0 do not need re-signing.

+ +

Core ML on Apple, if you ask for it

+ +

A package can carry a signed Core ML variant. It runs only if the execution policy lists that placement and the variant passes an on-device self-check against its signed conformance vector, within tolerance. If it does not qualify, the call falls back down the ordered placements and the trace says so. If nothing qualifies, the call fails with placement_unavailable. Every result carries placement_evidence. The default placement is still wasm-cpu. The accelerator is a host detail. The package, the contract, and the trace stay the same.

+ +

Evidence so far is macOS test runs, where the signed digits-onnx-coreml package matches wasm-cpu within tolerance on every compute-unit setting, plus an earlier iPhone spike. Governed-path iPhone evidence is #1630, still open, so this post quotes no iPhone timings. There is no GPU adapter for web, Android, or desktop. More detail: can Traverse run models on a GPU or the Neural Engine?

+ +

What this release does not say

+ +
    +
  • No host is Certified under Spec 529. Swift, Kotlin, and .NET are published and pre-1.0.
  • +
  • digits-mlp-1.0.0 is signed with a test-only key. v0.15.0 adds signing-key tooling (key generation, opt-in TRAVERSE_MODEL_SIGNING_KEYS, a dispatch-only signing workflow). Custody, rotation, and revocation of a production key are #1567, still open. See is production model signing ready?
  • +
  • The host package-status map is not registry revocation. Runtime refusal of a revoked registry capability is #1598, not shipped. See what happens when a host marks a model package revoked?
  • +
  • This is the host connector path. It is not a catalog model.execute capability, and it is not a Hugging Face integration.
  • +
  • Python is still CLI-only. There is no Python SDK.
  • +
+ +

Upgrading

+ +

Read docs/upgrade-to-v0.15.0.md. Short version: declare model_usage on every host that runs pinned models. If you build ExecutionPolicy or HostConnectorHostResult with struct literals, or match every ModelFailureReason, add the new fields and variants. Pin the crates and traverse-embedder-web together at 0.15.0, with traverse-registry at 0.28.0. On Swift, Package.swift on main now pins the swift-host-v0.15.0-1 rebuild, which adds the Spec 138 guest reject codes (#1695).

+ +

The release notes and the v0.15.0 announcement are the source for everything above. If this post and those disagree, trust them, and open an issue.

+ +
+ + + +
+
+ +`; +--- + + + + diff --git a/src/pages/changelog.astro b/src/pages/changelog.astro index c4ad365..7b15cab 100644 --- a/src/pages/changelog.astro +++ b/src/pages/changelog.astro @@ -7,7 +7,7 @@ import SubpageLayout from '@layouts/SubpageLayout.astro';
Changelog

Release history

What shipped in Traverse. Each release is backed by versioned, reviewable work.

View all releases on GitHub →

-

Governed model execution on every host

v0.15.0 is a minor lockstep crate + npm release with breaking Spec 138 exact-ref changes (this repo's 0.x convention uses a minor bump). Signed exact-ref packages now run on the Swift, Kotlin/Android, and .NET embedders, in addition to native Rust and the browser. Every host enforces model rights. Discover → execute → trace, on one shared runtime.wasm. No host is Certified under Spec 529.

Pins: crates.io, npm, Maven Central, and nuget.org at 0.15.0. This release pins traverse-registry at =0.28.0 (registry#636). digits-mlp-1.0.0 remains a test-only key; production custody, rotation, and revocation are still #1567. The web embedder reports its real package version (#1654).

Product Release: Traverse v0.15.0 · Release notes · Upgrade guide.

+

Governed model execution on every host

v0.15.0 is a minor lockstep crate + npm release with breaking Spec 138 exact-ref changes (this repo's 0.x convention uses a minor bump). Signed exact-ref packages now run on the Swift, Kotlin/Android, and .NET embedders, in addition to native Rust and the browser. Every host enforces model rights. Discover → execute → trace, on one shared runtime.wasm. No host is Certified under Spec 529.

Pins: crates.io, npm, Maven Central, and nuget.org at 0.15.0. This release pins traverse-registry at =0.28.0 (registry#636). digits-mlp-1.0.0 remains a test-only key; production custody, rotation, and revocation are still #1567. The web embedder reports its real package version (#1654).

Product Release: Traverse v0.15.0 · Release notes · Upgrade guide.

Signed exact-ref models + digits-mlp

v0.14.0 is a minor lockstep crate + npm release with breaking Spec 138 exact-ref surface changes (0.x minor convention). Model manifests move to schema 2.0.0 with detached Ed25519 model.sig.json; host-owned trust roots; first trained digits-mlp-1.0.0 (test-only key; production signing tracked separately). Discover → execute → trace, on one shared runtime.wasm. Published exact-ref execute is native Rust and the web embedder in this cut, plus Swift ExactModelHost on xcframework swift-host-v0.14.0-4 (Package.swift pin; first on swift-host-v0.14.0-1, #1579 closed 2026-09-30). Kotlin ExactModelHost is on main (#1580) and is not in Maven Central 0.14.0. .NET ExactModelHost is on main (#1602) and is not in nuget.org TraverseEmbedder 0.14.0. Next package cuts: #1651. Pin the Traverse crates and npm at 0.14.0. That release pins traverse-registry at =0.25.0; crates.io has since published traverse-registry 0.27.0. Product Release: Traverse v0.14.0.

App state machine and target-neutral host authorities

v0.13.0 is a minor lockstep crate + npm release. Its throughline is the discover → execute → trace loop for governed, standalone embedder apps: Spec 139-embedder-app-state-machine-execution lands the app command state machine that drives that loop end to end, and Spec 140-host-authority-wit-adapters gives it target-neutral host authorities — including a real audio-input capability. crates.io and npm packages are at 0.13.0.

Upgrade note: pin traverse-embedder-web@0.13.0 with crates at 0.13.0 (lockstep). Apps using invoke.input_from with host_connector_result.<field> need Spec 139 0.2.0 / Spec 138 0.3.0 or later. Swift consumers: TraverseSwiftHost now resolves from the swift-host-v0.13.0 release — there is no GitHub Release object for v0.13.0 (immutable-releases policy). The certified runtime.wasm digest changes in this cut (sha256:a254c161…).

Read the v0.13.0 release notes → · Announcement

Exact-ref governed model.execute

v0.12.0 is a minor lockstep crate + npm release. Spec 138-governed-exact-model-execution / ADR-0074 lands host-staged traverse.model-runtime / model.execute for exact pinned WASM model packages on native and browser wasm-cpu. crates.io and npm packages are at 0.12.0.

Upgrade note: apps that want local exact-ref models must declare exact_model_dependencies and use matching model_ref digests — provider authority fields on model.execute payloads fail closed. Pin traverse-embedder-web@0.12.0 with crates at 0.12.0. Pin traverse-registry =0.22.0 if you consume it directly. Certified runtime.wasm digest is unchanged from 0.11.0.

Read the v0.12.0 release notes →
diff --git a/src/pages/platforms.astro b/src/pages/platforms.astro index ed18b20..844c705 100644 --- a/src/pages/platforms.astro +++ b/src/pages/platforms.astro @@ -63,7 +63,7 @@ const _body = `

Swift / iOS

In progress -

The engine blocker recorded here as of July 19, 2026 is resolved. The wasmi feasibility spike below was adopted the next day: ADR-0014 selected the wasmi Apple runtime profile, ADR-0015 governed a production Swift wasmi C ABI, and Spec 074 (Approved) now defines the resource-control certification conditions. packages/swift/TraverseEmbedder ships a production WasmiHostBridgeClient backed by TraverseSwiftHost — a released XCFramework wrapping the wasmi interpreter behind a narrow C ABI — that enforces host-owned artifact-size, memory, fuel-per-invocation, and I/O limits on every call. The earlier WasmKit path, which never exposed those controls, has been removed from the package entirely (Decision 96, #1469); WasmKit is not supported. The xcframework ships as versioned swift-host-v* GitHub release assets. The current asset is swift-host-v0.15.0, and Package.swift on main pins that zip (#1675). The v0.15.0 tag's Package.swift still pointed at swift-host-v0.14.0-4. That published xcframework includes ExactModelHost for signed exact-ref execute (GitHub Release + SPM binary target). Apple hosts can opt in to a package's signed Core ML variant under the same policy, tolerance, and evidence rules; the default placement stays wasm-cpu. Evidence so far is macOS cargo test plus the Decision 113 iPhone spike. Governed-path iPhone evidence is still open (traverse#1630).

+

The engine blocker recorded here as of July 19, 2026 is resolved. The wasmi feasibility spike below was adopted the next day: ADR-0014 selected the wasmi Apple runtime profile, ADR-0015 governed a production Swift wasmi C ABI, and Spec 074 (Approved) now defines the resource-control certification conditions. packages/swift/TraverseEmbedder ships a production WasmiHostBridgeClient backed by TraverseSwiftHost — a released XCFramework wrapping the wasmi interpreter behind a narrow C ABI — that enforces host-owned artifact-size, memory, fuel-per-invocation, and I/O limits on every call. The earlier WasmKit path, which never exposed those controls, has been removed from the package entirely (Decision 96, #1469); WasmKit is not supported. The xcframework ships as versioned swift-host-v* GitHub release assets. The v0.15.0 asset is swift-host-v0.15.0. The current asset is its rebuild swift-host-v0.15.0-1 (same v0.15.0 workspace, plus the Spec 138 guest reject codes, #1692), and Package.swift on main pins that zip (#1695). The v0.15.0 tag's Package.swift still pointed at swift-host-v0.14.0-4. That published xcframework includes ExactModelHost for signed exact-ref execute (GitHub Release + SPM binary target). Apple hosts can opt in to a package's signed Core ML variant under the same policy, tolerance, and evidence rules; the default placement stays wasm-cpu. Evidence so far is macOS cargo test plus the Decision 113 iPhone spike. Governed-path iPhone evidence is still open (traverse#1630).

The iOS and macOS clients in reference-apps run embedded: in-process TraverseEmbedder loading a digest-pinned runtime.wasm, with no traverse-cli serve sidecar. What's still open: Spec 529 (approved September 13, 2026) defines one host-neutral Certified/Preview classification across Web, Linux/Rust, Apple, Android, and Windows/.NET, but the five-platform conformance runner it calls for is later work, so no host is Certified today. Treat this as real, resource-bounded, pre-1.0 execution, not a certified release.

-

Native Swift, Kotlin, and .NET embedders are published and pre-1.0: Swift ships a wasmi xcframework on swift-host-v0.15.0 (Package.swift on main pins it), Kotlin is com.traverse-framework:traverse-embedder 0.15.0 on Maven Central, and .NET is TraverseEmbedder 0.15.0 on nuget.org. They are marked In progress. No host is Certified under Spec 529. Signed exact-ref models run on those hosts as well as native Rust and the browser. Check Platforms before assuming a target is shipped.

+

Native Swift, Kotlin, and .NET embedders are published and pre-1.0: Swift ships a wasmi xcframework on swift-host-v0.15.0 (Package.swift on main pins the swift-host-v0.15.0-1 rebuild), Kotlin is com.traverse-framework:traverse-embedder 0.15.0 on Maven Central, and .NET is TraverseEmbedder 0.15.0 on nuget.org. They are marked In progress. No host is Certified under Spec 529. Signed exact-ref models run on those hosts as well as native Rust and the browser. Check Platforms before assuming a target is shipped.