Vox application packaging SSOT (2026)
Vox application packaging SSOT (2026)
Section titled “Vox application packaging SSOT (2026)”This document is the normative contract for shipping installable Vox applications (desktop .exe / .msi / .dmg / .AppImage, mobile .apk / .aab / .ipa, and script binaries). It does not replace Vox portability SSOT, which remains authoritative for Docker/OCI-backed server deploys.
Relationship to other contracts
Section titled “Relationship to other contracts”| Concern | Authority |
|---|---|
| Server/container deploy | vox-portability-ssot, vox deploy, vox-container |
| End-user native installers | This document, vox compile, [bundle] and [workspace] in Vox.toml |
Toolchain binary releases (vox CLI zips) | binary-release-contract, vox ci release-build |
| CLI surface | cli.md, contracts/cli/command-registry.yaml |
User journeys and acceptance UX
Section titled “User journeys and acceptance UX”Journey A — Solo developer, desktop
Section titled “Journey A — Solo developer, desktop”- Author
.vox+ frontend;vox runfor dev. - Run
vox compile --target desktop(or--target native-binaryfor Axum + embedded SPA without Tauri bundler). - Acceptance: an executable or installer appears under
dist/(or project-configured output); double-click or./appstarts the UI without requiring a separatecargo runfromtarget/generated.
Journey B — Workspace suite
Section titled “Journey B — Workspace suite”- Root
Vox.tomldeclares[workspace.members]and optional root[bundle](brand, version, identifiers). - Member packages each have their own
Vox.tomland entry.vox. vox compile --workspacebuilds every member package with the requested--target; split target-specific packages into separate workspaces when a suite needs different packaging lanes.- Acceptance: one coherent version line and shared
[bundle]defaults; members may override per-package.
Journey C — Mobile (Tauri)
Section titled “Journey C — Mobile (Tauri)”vox compile --target mobile-androidemits the Tauri workspace under the repositorytarget/generated/tree (shared withvox build/vox bundle). Final.apk/.aabrequires Android SDK/NDK andcargo tauri android buildafter project init.vox compile --target mobile-ioson macOS + Xcode emits the same generated tree;.ipa/ simulator builds usecargo tauri ios build/ Xcode.- Acceptance: documented prerequisites (
vox doctor --compile-target …surfaces Rust targets, SDK roots, andcargo tauri --version); failures print toolchain hints.
Journey D — Script binary
Section titled “Journey D — Script binary”vox compile --target script path/to/script.vox(requiresscript-executionfeature).- Acceptance: single native binary (or
.wasmfor WASI), analogous to “compiled script” UX.
Declarative manifest
Section titled “Declarative manifest”Project-local Vox.toml MAY include:
[bundle]— identifier, display name, version, asset paths, signing env hints (seecontracts/manifest/vox-bundle.v1.schema.json).[workspace.members]— array of relative paths to member packages (Cargo-style workspace list).
Secrets MUST NOT be embedded in [bundle]; use Clavis / vox-secrets at runtime per AGENTS.md.
Native shell (Tauri 2)
Section titled “Native shell (Tauri 2)”Desktop and mobile installers are produced via Tauri 2 scaffolding emitted next to the generated Rust + Vite app (vox-tauri-codegen). The Axum + React emit path remains the codegen core; Tauri wraps the webview and bundling.
vox compile --target desktop|mobile-* also emits runtime-capabilities.projection.json beside tauri.conf.json when the workspace contains contracts/capability/runtime-capabilities.v1.yaml — a machine-readable projection filtered to the app’s compiler-derived capability ids (@uses / uses plus inferred packaging capabilities) with Tauri permission IDs / Android uses-permission / iOS plist keys for merging into upstream Tauri manifests.
For a codebase-wide implementation-vs-claim audit and follow-up decision criteria, see Tauri audit (2026-05-11).
For the accepted convergence decision and executable migration sequence, see ADR 037 — Tauri Convergence and Tauri convergence migration plan (2026-Q2).
Verification
Section titled “Verification”vox ci retirement-audit— scanvox-deprecated-since/retire-bymarkers against the workspace semver; fails when a marker is overdue.vox ci compile-matrix— local smoke forvox compile --help(prefers an existingtarget/{debug,release}/voxbinary when present so Windows avoids relinking a lockedvox.exe; if cargo run fails to relink, run from the builtvox.exe; falls back tocargo run -p vox-cli -- compile --help); CI matches.github/workflows/compile-matrix.yml.- CI:
.github/workflows/compile-matrix.ymlexercises compile wiring on Linux self-hosted, Windows, and macOS hosts. - Fixture workspace layout:
examples/compile-suite/([workspace.members]+ per-memberVox.toml).
Related
Section titled “Related”- GUI authoring / VUV — authoring layer unchanged; native promotion hooks are codegen concerns.
- Frontend convergence — Contract IR and TS emit remain SSOT seams.