OpenStrata turns VFX compatibility into executable, validated, distributable runtime layers.
OpenStrata is a VFX Reference Platform aware runtime / build / extension / validation
platform for VFX and OpenUSD work. The CLI is ost. It treats each VFX Reference
Platform calendar year as a machine-readable target and turns it into certified,
reproducible runtime layers, extension artifacts, and builds.
See docs/ — overview, architecture,
examples, roadmap, and the full
design.
Phases 0–3 are implemented, and Phase 4 (the OpenUSD plugin verification harness)
is largely in: a real OpenUSD runtime can be adopted (--from-usd) or
built from source (--build, via build_usd.py or CMake-direct), and the
plugin pyramid runs Levels 0–5 (ost plugin new|inspect|build|doctor|run|test).
ost plugin build also regenerates co-hosted schema.usda contracts and can
link generated typed schema APIs into an existing plugin library.
Tagged binary releases (v*) are live via cargo-dist. The digest-addressed
artifact registry, plugin publishing, artifact-backed runtime pulls (local and
read/write OCI transport), and GitHub support-matrix generation are in, along with
a portable CI contract (runner profiles, lanes, digest-pinned hosted source-CI).
The current release is v0.19.0 — independently reachable packaged
workspaces, aggregate product artifacts, named build intents, and digest-pinned
Formation composition through ost formation resolve|inspect|lock|run.
Per-release detail (objective, shipped capabilities, compatibility, known
limitations) lives in docs/releases/; active, incomplete work is
in the roadmap.
The active v0.20.0 milestone closes downstream package/product reproducibility and renderer-workflow findings. DCC host integration is explicitly deferred to v0.21.0; sessions, GPU/AI, and broader DCC matrices remain ahead. Linux x86_64 is the first-class target; other OS targets are modeled and partially working — these examples were exercised on Windows.
OpenStrata is developed against real OpenUSD projects rather than isolated examples. Its reference projects validate the plugin-workspace, renderer, plain-library, artifact, CI, and execution contracts across repository boundaries:
- USD 3DGS Plugins — a
read-only Gaussian PLY
SdfFileFormatbundle plus a format-independent ordinary library. It demonstrates bootstrapping a real plugin workspace from the OpenStrata scaffold, a bundle-to-library dependency, OpenUSD 26.05 Gaussian schema authoring, three-OS generated CI, package-origin validation, and reproducibility dogfooding. - USD VRM Plugins — a multi-bundle OpenUSD plugin workspace (typed schemas, a VRM file-format plugin, a package resolver, a shared container library). It demonstrates workspace dependency composition, plugin lifecycle testing, packaging, clean-install validation, and generated CI matrices.
- hdMerlin — a host-neutral
Vulkan renderer with an optional Hydra 2 adapter. It demonstrates renderer
projects that are not plugin workspaces, managed CMake execution, renderer
evidence, capability-aware validation, runtime artifact adoption, and the
managed
usdviewworkflow.
Together they exercise distinct plugin-workspace shapes and the renderer side of the ecosystem, including the cross-repository Formation composition surface shipped in v0.19.0. See docs/projects/.
ost is a single self-contained binary. Tagged releases (v*) publish
prebuilt binaries, checksums, and installers for Linux (static musl), macOS
(arm64 + x86_64), and Windows via cargo-dist.
Each release also carries SLSA build-provenance attestations, verifiable with
gh attestation verify <asset> --repo animu-sphere/open-strata.
# Linux / macOS — fetch the installer for your host (from v0.1.0 onward)
curl --proto '=https' --tlsv1.2 -LsSf \
https://github.com/animu-sphere/open-strata/releases/latest/download/ost-cli-installer.sh | sh
# Windows (PowerShell)
powershell -c "irm https://github.com/animu-sphere/open-strata/releases/latest/download/ost-cli-installer.ps1 | iex"
# With cargo-binstall (reads the release's dist manifest)
cargo binstall ost-cliFrom source (no prebuilt needed):
cargo install --path crates/ost-cli # installs the `ost` binarycargo build
cargo test
cargo clippy --workspace --all-targetsFor Windows or agent-driven local gates, prefer an isolated target directory so
stale file locks in target/ do not block Cargo:
$env:CARGO_TARGET_DIR = Join-Path $env:TEMP "ost-cargo-target-$PID"
$env:CARGO_INCREMENTAL = "0"
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --lockedNative build/package lifecycle tests run automatically on non-Windows hosts when cmake, ninja, and a compiler are available. On Windows they are skipped by default; opt in explicitly when you want that coverage:
$env:OST_RUN_NATIVE_LIFECYCLE = "1"
cargo test -p ost-cli --test lifecycle --locked -- --nocaptureost platform list | show <cy> | diff <a> <b> inspect VFX platform years
ost init [--template cpp-library|renderer|usd-plugin|usd-plugin-workspace|--bare] scaffold a buildable project
ost runtime pull | list | show | validate | repair | explain | export manage runtimes in the store
ost env <cy> --profile <p> [--shell bash|pwsh] print the activating environment
ost devshell <cy> --profile <p> enter an interactive runtime shell
ost doctor [<cy> --profile <p>] host + tools + runtime diagnostics
ost configure [--target <cy>] [--profile <p>] generate toolchain + CMake presets
ost presets install | diff | uninstall wire per-target presets into CMakePresets.json
ost build [--check] [--dry-run] [--jobs N] preflight, then cmake build (Ninja)
ost package install + tar.zst artifact + manifest
ost validate validate a built/packaged target
ost extension list | why <id> | add <id> inspect/request controlled extensions
ost plugin new | inspect | build | doctor | run | test | view | test-view | schema add | package | publish OpenUSD plugin bundles + workspace graph validation
ost renderer view [scene] open a built Hydra renderer in the matching usdview session
ost artifact import | list | show | verify | export | extract local digest-addressed artifact registry
ost ci init | validate | plan | generate github runtime×plugin support matrix -> CI workflow
ost lock [--check] generate/verify strata.lock
ost uv <args...> run uv pinned to the runtime Python
Every command accepts --json for machine-readable output: a single, versioned
{ok, schema, data, warnings} envelope on stdout, with structured errors
(error.code / error.category) and category-based exit codes for CI. See
docs/reference/json-output.md for the contract and
docs/guides/examples.md for a copy-pasteable tour of every command.
ost runtime pull materializes a runtime from a backend source: a placeholder
mock layout, an adopted existing install (--from-usd), a from-source
build (--build, via build_usd.py or CMake-direct with --deps), or a
prebuilt registry artifact (--from-artifact <digest>, produced by
ost runtime export).
ost="cargo run -q -p ost-cli --"
# Inspect a platform year and scaffold a project
$ost platform show cy2026
$ost init --name my-show --platform cy2026
# Pull a USD runtime: mock (offline), or a real one via --from-usd / --build
$ost runtime pull cy2026 --profile usd # mock layout
$ost runtime pull cy2026 --profile usd --from-usd /opt/usd # adopt a real install
$ost runtime explain cy2026 --profile usd # capability -> extension graph
# Activate it
$ost env cy2026 --profile usd --shell bash # eval "$(... )"
$ost devshell cy2026 --profile usd
# Build a project against the runtime, then package and validate
$ost configure # writes .strata/targets/... + strata.lock
$ost build # cmake --preset + cmake --build (Ninja)
$ost package # dist/<name>/<ver>/<target>/*.tar.zst
$ost validate
# Diagnose, lock, and run uv pinned to the runtime Python
$ost doctor cy2026 --profile usd
$ost lock --check
$ost uv sync --locked
# Scaffold and verify an OpenUSD plugin (L2+ need a real runtime)
$ost plugin new usd-fileformat toy --extension toy
$ost plugin build toy --target cy2026 --profile usd
$ost plugin test toy --target cy2026 --profile usd # L0..L5 + report
$ost plugin test --workspace --up-to 1 # validate graph, then test every bundle
$ost plugin package toy --target cy2026 --profile usd
$ost plugin publish toy --target cy2026 --profile usd # register by digest
$ost artifact list # what the registry holdsOn Windows, ost build auto-loads the MSVC developer environment (vcvars64.bat);
pass --no-vcvars to opt out.
crates/
ost-cli/ the `ost` binary (argument parsing + rendering)
ost-core/ shared primitives: catalog loader, paths, host, variant, digest, tools
ost-platform/ platform manifest model, loader, diff
ost-runtime/ runtime identity, profiles, env generation, runtime manifest + validation
ost-build/ build target model, toolchain/preset generation, packaging, MSVC bootstrap
ost-extension/ controlled extensions: model, loader, capability resolver
ost-plugin/ OpenUSD plugin bundles: model, scaffold, verification levels, reports
ost-artifact/ artifact registry: identity records, content-addressed store, verification
ost-ci/ CI support matrix (openstrata.ci.yaml) and workflow generation
ost-manifest/ project (openstrata.toml) + lock (strata.lock) models
platforms/ built-in VFX Reference Platform calendar-year manifests
profiles/ capability bundles (core / dev / usd / lookdev)
extensions/ controlled extension manifests (openusd / materialx)
templates/ project + plugin scaffolds (including codeless/compiled USD schemas)
schemas/ JSON schemas for platform / project / lock / plugin-report documents
State lives under ~/.ost (override with OST_HOME): runtimes/, extensions/,
artifacts/, cache/, sessions/, logs/. User-provided manifests in
~/.ost/{platforms,profiles,extensions}/*.yaml are layered over the built-in
definitions and override them by id.
Tool overrides for non-PATH installs: OST_NINJA (ninja), OST_UV (uv). Runtime
source fallbacks for ost runtime pull: OST_USD_ROOT (adopt), OST_USD_SRC
(build), OST_USD_DEPS (CMake deps).
On macOS source builds, full Xcode may be needed for upstream codesign; with
CMake 4 and bundled dependencies, retry with
--build-arg -DCMAKE_POLICY_VERSION_MINIMUM=3.5 if configure fails.
OpenStrata is being hardened across build, runtime, plugins, CI, and the distribution path. Landed so far:
- Packaging rejects symlinks and special files (FIFO/socket/device) anywhere in the staging tree, so an artifact cannot absorb a link target's bytes or recurse outside the tree.
- Plugin manifests may only reference paths inside their bundle;
.., absolute, drive, and UNC paths are refused when the bundle loads. - Atomic writes create their temp file with
O_EXCLunder an unpredictable name and refuse to write through a symlinked destination. - CI pins every third-party GitHub Action to a full commit SHA, and release artifacts carry SLSA build-provenance attestations.
Remaining work — installer/asset signature verification and a runtime trust policy — is tracked in the roadmap backlog (shipped baseline detail: delivery history).
To report a vulnerability, see SECURITY.md (private disclosure).
OpenStrata is licensed under the Apache License, Version 2.0; see also
NOTICE. Source files carry an SPDX header
(SPDX-License-Identifier: Apache-2.0).
Third-party components that OpenStrata bundles, links, or distributes (Rust dependencies and runtime/extension content such as OpenUSD, MaterialX, and their transitive dependencies) retain their own upstream licenses. Complete per-artifact third-party attribution is tracked in the roadmap backlog.