STASIS
Docs / platform targets

Package the same game for its host.

Stasis keeps one source/state/tick/render contract across targets. The package command changes the host shell, linker, and platform prerequisites.

01 / Support matrix

Current targets.

Nightly compiler archives are published on GitHub Releases. Desktop release packaging is native AOT; play remains the JIT development path.

Desktop / Windows

Windows x64

stasis-nightly-win-x64.zip

  • Development: JIT through stasis play.
  • Release: native AOT with stasis package --target desktop.
  • The archive carries the Windows runtime and LLVM linker tools.
Desktop / Linux

Linux x64

stasis-nightly-linux-x64.tar.gz

  • Development: JIT through stasis play.
  • Release: native AOT with stasis package --target desktop.
  • Native AOT linking needs the host platform cc driver.
Desktop / macOS

macOS arm64

stasis-nightly-osx-arm64.tar.gz

  • Development: JIT through stasis play.
  • Release: native AOT with stasis package --target desktop.
  • Native AOT linking needs the host platform cc driver.
  • No current macOS x64 nightly archive is claimed.
Browser / WebAssembly

Web / Wasm

stasis package --target web

  • Outputs index.html, game.js, game.wasm, reachable assets, and stasis_provenance.json.
  • Serve the package over HTTP(S); opening it from file:// can block Wasm loading.
  • Output is not a single-file HTML document. Release size optimization with wasm-opt is optional.
Mobile / Android

Android arm64

stasis package-mobile --target android-arm64

  • Release AOT app project; production ABI is arm64-v8a only.
  • Requires JDK 17, Android SDK 35, NDK, CMake 3.22.1, Ninja, Gradle 8.9, and SDL3/SDL3_image source checkouts.
  • android-x86_64 is development/emulator test-only with --development-build, not a production distribution target.
Mobile / Apple

iOS / iPadOS arm64

stasis package-mobile --target ios-arm64

  • Release AOT Xcode project for device arm64.
  • Requires macOS/Xcode and device-capable SDL3/SDL3_image xcframeworks.
  • Simulator and multi-architecture packaging are out of scope. Device installation requires signing and provisioning.
02 / Common commands

One project, explicit output.

stasis fmt
stasis check
stasis test
stasis play
stasis package --target desktop
stasis package --target web
stasis package-mobile --target android-arm64
stasis package-mobile --target ios-arm64

Release is the default package mode. --development-build explicitly requests visibly labeled diagnostic output. Android x86_64 emulator testing requires it; web development packages keep diagnostic names and skip wasm-opt.

03 / Same contract

What stays the same.

  • Global state remains the model.
  • main() initializes it; tick() advances it; render() projects it.
  • Reachable assets are prepared and validated before packaging.
  • Desktop, web, and mobile packages carry provenance for the selected toolchain and game.

The host changes. The Stasis source and simulation boundaries do not.