Roadmap and Spec Compliance
July 3, 2026 · View on GitHub
Feature parity with the AOUSD Core Specification v1.0.1 and the C++ reference implementation (OpenUSD).
Legend: :white_check_mark: Supported | :construction: Planned | :thinking: Considering
Status is scoped to the feature text in each row. If the implementation covers only part of the referenced spec section, the notes call out what remains before that broader spec behavior can be considered fully covered.
Foundational Data Types (Spec 6)
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Scalar types (bool, int, float, double, half, string, token, asset, timecode, int64, uint, uint64, uchar) | 6.2 | :white_check_mark: | 0.1.1 | sdf::Value enum |
| Dimensioned types (vectors, matrices, quaternions) | 6.3 | :white_check_mark: | 0.1.2 | float2..4, double2..4, matrix2d..4d, quath/f/d, int2..4, half2..4 |
| Algebraic types (opaque) | 6.4 | :white_check_mark: | 0.2.0 | Value::Opaque |
| Semantic aliases (color, normal, point, vector, texCoord, frame) | 6.5 | :thinking: | Parsed as underlying types; semantic role not tracked separately | |
| Arrays | 6.6.1 | :white_check_mark: | 0.1.2 | All scalar and dimensioned array variants |
| Dictionaries | 6.6.2 | :white_check_mark: | 0.1.2 | Including nested dictionaries |
| Dictionary combining | 6.6.2.1 | :white_check_mark: | 0.4.0 | Recursive merge of stronger/weaker dictionaries during value resolution |
| List operations (explicit, composable) | 6.6.3 | :white_check_mark: | 0.2.0 | int, int64, uint, uint64, token, string, path, reference, payload |
| List op combining | 6.6.3.6 | :white_check_mark: | 0.2.0 | ListOp::combined_with |
| List op reducing | 6.6.3.8 | :white_check_mark: | 0.2.0 | ListOp::reduced |
| List op chaining | 6.6.3.9 | :white_check_mark: | 0.2.0 | Applied during composition arc evaluation |
Document Data Model (Spec 7)
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Layer structure (specs, paths, fields) | 7.2 | :white_check_mark: | 0.1.1 | AbstractData trait |
| Spec forms (layer, prim, attribute, relationship, variant set, variant) | 7.3 | :white_check_mark: | 0.1.1 | SpecType enum |
| Core metadata fields (layer spec) | 7.6.1 | :white_check_mark: | 0.1.2 | subLayers, subLayerOffsets, defaultPrim, documentation, etc. |
| Core metadata fields (prim spec) | 7.6.2 | :white_check_mark: | 0.1.2 | specifier, primChildren, propertyChildren, references, payload, inherits, specializes, variantSets, variantSelection, etc. |
| Core metadata fields (attribute spec) | 7.6.3 | :white_check_mark: | 0.1.2 | typeName, default, timeSamples, connectionPaths, variability, custom |
| Core metadata fields (relationship spec) | 7.6.4 | :white_check_mark: | 0.1.2 | targetPaths, variability, custom |
| Core metadata fields (variant set/variant spec) | 7.6.5-7 | :white_check_mark: | 0.2.0 | |
| Spline specialized type | 7.4.2.4 | :construction: | SplineKnot, interpolation modes, extrapolation, looping | |
| Retiming specialized type (layer offsets) | 7.6.1.2.2 | :white_check_mark: | 0.1.2 | 0.1.2 — parsed from subLayerOffsets0.4.0 — composed through arcs0.5.0 — applied during value resolution (§12.3.2.1) |
Paths (Spec 8)
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Absolute/relative paths | 8.1 | :white_check_mark: | 0.1.1 | sdf::Path |
| Prim paths | 8.1 | :white_check_mark: | 0.1.1 | |
| Property paths | 8.1 | :white_check_mark: | 0.1.1 | |
| Variant selection paths | 8.1 | :white_check_mark: | 0.2.0 | {set=selection} syntax |
| Path grammar (PEG) | 8.5 | :white_check_mark: | 0.1.4 | Parsed from USDA and USDC |
| Element ordering | 8.2 | :white_check_mark: | 0.5.0 | sdf::element_cmp |
| Relative path resolution | 8.1 | :white_check_mark: | 0.2.0 | Anchoring via make_absolute |
| Legacy path compatibility | 8.7 | :thinking: | Extended grammar with [target] and .mapper paths |
Resource Interface (Spec 9)
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Resource identifiers (URI) | 9.2 | :white_check_mark: | 0.1.1 | Asset paths via sdf::AssetPath (asset / asset[]) |
| Relative resource identifiers (anchored) | 9.4.1 | :white_check_mark: | 0.2.0 | ./ and ../ resolution relative to containing layer |
| Non-anchored identifiers (search paths) | 9.4.2 | :white_check_mark: | 0.2.0 | DefaultResolver with search paths |
| Resolving identifiers to locations | 9.5 | :white_check_mark: | 0.2.0 | Resolver trait |
| Resolving extensions | 9.6 | :white_check_mark: | 0.2.0 | .usd/.usda/.usdc/.usdz dispatch |
| Packaged resources | 9.7 | :white_check_mark: | 0.2.0 | asset.usdz[sublayer.usd] syntax |
file URI scheme (RFC 8089) | 9.8 | :construction: | Filesystem paths accepted but not as file:/// URIs | |
usd-anon scheme (in-memory resources) | 9.8.1 | :thinking: | For transient layers not backed by files |
Composition (Spec 10)
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Sublayers | 10.3.1 | :white_check_mark: | 0.1.2 | Layer stack construction |
| Sublayer offset composition | 10.3.1.1 | :white_check_mark: | 0.4.0 | Effective offsets composed through nested sublayers and applied during value resolution (§12.3.2.1); scale <= 0 falls back to identity |
| References (internal + external) | 10.3.2.1 | :white_check_mark: | 0.1.2 | Including defaultPrim fallback |
| Reference namespace mapping | 10.3.2.1.1 | :white_check_mark: | 0.3.0 | MapFunction with source/target pairs |
| Reference offset composition | 10.3.2.1.2 | :white_check_mark: | 0.4.0 | Reference offsets composed with target layer-stack offsets and applied during value resolution (§12.3.2.1); scale <= 0 falls back to identity |
| Payloads | 10.3.2.2 | :white_check_mark: | 0.1.2 | Treated identically to references |
| Payload loading control | 10.3.2.2 | :white_check_mark: | 0.4.0 | StageBuilder::load supports loading all payloads or leaving them unloaded |
| Payload offset composition | 10.3.2.2.2 | :white_check_mark: | 0.4.0 | Loaded payload offsets compose like references (unloaded ignored) and applied during value resolution (§12.3.2.1); scale <= 0 falls back to identity |
| Inherits | 10.3.2.3 | :white_check_mark: | 0.2.0 | Including implied inherit propagation |
| Inherit namespace mapping (with identity) | 10.3.2.3.1 | :white_check_mark: | 0.3.0 | from_pair_identity adds (/, /) catch-all |
| Specializes | 10.3.2.4 | :white_check_mark: | 0.2.0 | |
| Specializes global weakness | 10.4.1 | :white_check_mark: | 0.3.0 | Stable-partition reorders specialize-introduced nodes after all others |
| Variants | 10.3.2.5 | :white_check_mark: | 0.2.0 | Including deferred evaluation after R/P |
| Variant selection computation | 10.3.2.5.1 | :white_check_mark: | 0.2.0 | Strongest opinion wins, fallback to first variant |
| Variant fallback map | 10.3.2.5.1 | :white_check_mark: | 0.3.0 | VariantFallbackMap via StageBuilder |
| Relocates | 10.3.2.6 | :white_check_mark: | 0.3.0 | layerRelocates, source path resolution, child remapping |
| Relocates validation rules | 10.3.2.6 | :construction: | 7 restriction checks not enforced | |
| Relocates namespace mapping | 10.3.2.6.1 | :white_check_mark: | 0.3.0 | Composed with reference arc mappings |
Arc permissions (permission = private) | 10.3.3 | :white_check_mark: | main | sdf::Permission metadata is parsed, stored, and round-tripped, but never enforced by composition — matching C++'s own _EnforcePermissions/_TargetIsPermitted, which are compiled out for the Usd-mode caches UsdStage always uses |
| LIVERPS strength ordering | 10.4 | :white_check_mark: | 0.3.0 | ArcType with Ord derived from discriminant |
| Namespace mappings (MapFunction) | 10.5 | :white_check_mark: | 0.3.0 | Compose, inverse, longest-prefix matching |
| Composition errors (non-fatal) | 10.6 | :white_check_mark: | 0.3.0 | pcp::Error with StageBuilder::on_error callback; missing/unreadable sublayers report raw from the loader and are filtered by Stage::composition_errors against the composed-stack effective set, so muting a branch suppresses its diagnostic and unmuting restores itRemaining — precise target-diagnostic liveness (an orphaned interned target over-reports; see pcp module docs) |
| List op arc computation | 10.3.2 | :white_check_mark: | 0.2.0 | Weakest-to-strongest list-op chaining |
Stage Population (Spec 11)
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Composed stage | 11.2 | :white_check_mark: | 0.2.0 | Stage::open with depth-first traversal |
| Populating the stage | 11.3 | :white_check_mark: | 0.2.0 | Lazy per-prim composition via pcp::Cache |
| Population mask | 11.3 | :white_check_mark: | 0.4.0 | StageBuilder::mask limits stage queries, traversal, and root layer-stack dependency collection to a masked working set |
| Prim child discovery | 11.3.1 | :white_check_mark: | 0.2.0 | Merged primChildren with relocate adjustment. Full normative ordering is tracked in the primOrder row below. |
Ordered prim children (primOrder reordering) | 11.3.1 | :white_check_mark: | 0.5.0 | Prim::children; weak-to-strong fold reapplying primOrder and relocates per layer |
| Ordered property children | 11.3.2 | :white_check_mark: | 0.2.0 | Merged propertyChildren |
Ordered property children (propertyOrder reordering) | 11.3.2 | :white_check_mark: | 0.5.0 | Property names fold weakest-to-strongest, reapplying each layer's propertyOrder as it merges (shares the primChildren fold) |
| Scene graph instancing | 11.3.3 | :white_check_mark: | 0.5.0 | Instances share one composed prototype; descendants take only the shared subtree. The /__Prototype_N namespace composes independently (proxies redirect onto it), so nested instances and target remapping (§12.4) work; variant selections key the prototype, content honors the population mask, invalidation is change-targeted |
| Model hierarchy (kind) | 11.4 | :white_check_mark: | 0.4.0 | Model/group/component/subcomponent queries validate the contiguous kind hierarchy |
| Stage queries (Active, Loaded, Defined, Abstract, Instance, InPrototype) | 11.5 | :white_check_mark: | 0.4.0 | Per-prim status flags and PrimPredicate traversal filtering0.5.0 — IN_PROTOTYPE and the instance-proxy traversal toggle (see Scene graph instancing, §11.3.3) |
| Session layer | 11.2 | :white_check_mark: | 0.3.0 | StageBuilder::session_layer |
Value Resolution (Spec 12)
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Metadata resolution (strongest opinion wins) | 12.2 | :white_check_mark: | 0.2.0 | Strongest authored opinion wins, with ValueBlock support for scalar fieldsSpecial field classes are tracked separately below |
| Specifier resolution | 12.2.1 | :white_check_mark: | 0.4.0 | def/class/over precedence with direct-inherit awareness |
| typeName resolution (from prim definition) | 12.2.2 | :construction: | Uses strongest opinion, not prim definition | |
| variability resolution (weakest opinion) | 12.2.3 | :white_check_mark: | 0.4.0 | Weakest authored opinion wins |
| custom field resolution (any-true) | 12.2.4 | :white_check_mark: | 0.4.0 | Logical OR across opinions |
| Dictionary combining | 12.2.5 | :white_check_mark: | 0.4.0 | Recursive merge across dictionary-valued opinions |
| List op resolution | 12.2.6 | :construction: | Composition-arc list ops, composed apiSchemas, connectionPaths/targetPaths, and clipSets order folded across layersRemaining — schema-registry-driven generic list-op field resolution so any field declared list-op composes without a hand-wired call site | |
| Layer metadata (root layer only) | 12.2.7 | :white_check_mark: | 0.2.0 | defaultPrim, timing fields, etc. |
| Fallback values | 12.2.8 | :construction: | Requires schema registry | |
| Basic attribute resolution | 12.3 | :white_check_mark: | 0.5.0 | 0.2.0 — resolves authored default, timeSamples, and ValueBlock0.5.0 — layer-offset retiming appliedValue clips and splines are tracked separately |
| Time-sample lookup and interpolation | 12.3, 12.5.1-2 | :white_check_mark: | 0.5.0 | 0.1.2 — time-sample parsing0.4.0 — Stage::value_at performs held/linear interpolation over composed samples0.5.0 — per-node retiming and value clips |
| Layer-offset retiming during value resolution | 12.3.2.1 | :white_check_mark: | 0.5.0 | Each node's sample times mapped to stage time through its composed offset (stage_t = scale*layer_t + offset; sublayer/reference/payload)Strongest timeSamples node wins, ValueBlock blocks weaker layers |
| Spline evaluation | 12.5.3 | :construction: | Bezier/Hermite curve interpolation | |
| Interpolation (Held) | 12.5.1 | :white_check_mark: | 0.4.0 | Stage::value_at(attr, time) with InterpolationType::Held. |
| Interpolation (Linear) | 12.5.2 | :white_check_mark: | 0.4.0 | Stage::value_at(attr, time) with InterpolationType::Linear (default)All §12.5.2 types incl. quath/f/d via slerpHeld-fallback for unsupported types and past-last-sample |
| Value clips | 12.3.4 | :white_check_mark: | 0.5.0 | Explicit + template clips resolved during value resolution: parsing, manifest gating, active-clip selection, stage-to-clip time mapping (incl. jumps), clip strength below local opinions, with a full-parity ClipsAPI read/write viewTemplate clips (§12.3.4.1.3) expand to explicit sets, retimed by layer offset; interpolateMissingClipValues + missing-value sentinelsRemaining — clip-manifest generation ( ComputeClipManifest) |
| Relationship targets (raw + forwarded) | 12.4 | :white_check_mark: | 0.5.0 | Composed raw targetPaths, folding list-op edits across contributing layers and remapping through arcsForwarded targets recursively chase relationship-to-relationship chains to prim/attribute terminals with cycle breaking and dedup |
| Attribute connections | 12.4 | :white_check_mark: | 0.5.0 | Composed connectionPaths folding list-op edits across contributing layers, with authoring on AttributeStage-wide connection graph indexes every edge and resolves chains to terminal sources |
Schemas (Spec 13)
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Schema registry | 13.3 | :construction: | Type hierarchy, prim definitions | |
| Typed schemas (IsA) | 13.3.1 | :construction: | typeName readable; registry not implemented | |
| Applied schemas (HasA) | 13.3.2 | :construction: | apiSchemas list-ops compose across layers, with registry-free authoring of applied schema tokensRemaining — schema registry, application validation, built-in/auto-apply inclusions, composed prim definitions, fallback values | |
| Schema inclusions (built-ins, auto-applies) | 13.3.2.1 | :construction: | ||
| Prim definitions (property fallbacks) | 13.3 | :construction: | ||
| Core schema types | 13.4 | :construction: | ||
| Value type names | 13.3 | :construction: | Attribute type validation | |
| Extension metadata fields (fallbackPrimTypes, apiSchemas, clips, clipSets) | 13.2 | :construction: | Fields readable; apiSchemas list-op composition + value-clip semantics for clips/clipSets resolved (§12.3.4)Remaining — composed-prim fallbackPrimTypes | |
| Schema codegen | 13.3 | :construction: | Generate typed APIs from schema definitions |
Color (Spec 14)
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| Supported color spaces | 14.1 | :thinking: | ||
| Core metadata extensions (colorSpace) | 14.2 | :thinking: | ||
| ColorSpaceDefinitionAPI | 14.3 | :thinking: |
Collections (Spec 15)
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| CollectionAPI | 15.1 | :white_check_mark: | 0.5.0 | Multi-apply UsdCollectionAPI in usd::collection: instance discovery, expansionRule / includeRoot / includes / excludes accessors, read + authoring (apply_collection, include_path / exclude_path with edit minimization)Remaining — pattern-based membershipExpression mode (the SdfPathExpression engine) |
| Authoring and evaluating collections | 15.2 | :white_check_mark: | 0.5.0 | MembershipQuery (closest-ancestor is_path_included), compute_membership_query with nested-collection merge + cycle guard, and compute_included_paths stage traversal (excludes precedence, property expansion) |
Core File Formats (Spec 16)
| Feature | Spec | Status | Version | Notes |
|---|---|---|---|---|
| USDA (text) reading | 16.2 | :white_check_mark: | 0.1.4 | Recursive descent parser with logos tokenizer |
| USDA (text) writing | 16.2 | :white_check_mark: | 0.4.0 | usda::TextWriter; round-trips the compliance suite opinion-for-opinion |
| USDC (binary) reading | 16.3 | :white_check_mark: | 0.1.1 | Crate format with LZ4/integer compression |
| USDC (binary) writing | 16.3 | :white_check_mark: | 0.4.0 | usdc::CrateWriter; streaming packer with integer compression, LZ4 blocks, DFS path encoder |
| USDZ (package) reading | 16.4 | :white_check_mark: | 0.2.0 | ZIP-based package reader |
| USDZ (package) writing | 16.4 | :white_check_mark: | 0.4.0 | usdz::ArchiveWriter; STORED-only, 64-byte aligned entries |
Format auto-detection (.usd) | 16.1 | :white_check_mark: | 0.2.0 | Magic byte detection |
Beyond Core Spec
Features from the C++ reference implementation not covered by the core specification.
| Feature | Status | Version | Notes |
|---|---|---|---|
| Variable expressions | :white_check_mark: | 0.2.0 | 13 built-in functions, string interpolation (expr module); session and root layer expressionVariables compose together (C++ PcpExpressionVariables, expr::compose_layer_variables), so a session opinion resolves the root's ${VAR} sublayersRemaining — a runtime session-variable change that newly selects an unopened root ${VAR} sublayer does not load it (open-time only) |
| Parallelism (Rayon) | :construction: | Composition graph is &-only, ready for parallel execution | |
| Incremental invalidation | :white_check_mark: | main | Every Stage edit drains an sdf::ChangeList through pcp::Changes (did_change → apply); a reverse layer/site → [index] map (pcp::Dependencies) scopes the drop to affected indices — subtree-scoped for a significant arc edit, an in-place has_specs rescan for an inert spec add/remove (memoized per-node spec stack), a per-property memo clear for a targetPaths/connectionPaths edit, and a layer-stack-scoped drop for a subLayers/offset/timeCodesPerSecond/expressionVariables edit; unaffected siblings stay cachedRemaining — per-prim composition revision, query_errors compute-once, spec-stack-refresh splice |
| UsdGeom (geometry, transforms, cameras) | :white_check_mark: | 0.4.0 | Trait-views behind geom (the SchemaBase → … → Curves chain, read + author): all intrinsic shapes, Camera, Xform/Scope, Mesh + GeomSubset, curve/point/patch types, PointInstancer; full xformOpOrder evaluatorRemaining — PrimvarsAPI / ModelAPI / MotionAPI / VisibilityAPI / BBoxCache / XformCache |
| UsdShade (materials, shaders) | :white_check_mark: | 0.5.0 | Trait-views behind shade (read + author): the Connectable interface (inputs:/outputs:, connectability, renderType, connect_to) backing Shader / NodeGraph / Material, render-context terminals, Material::compute_surface_source, the single-apply MaterialBindingAPI (direct + collection, purpose-namespaced, strength) with compute_bound_material resolution, and the UsdPreviewSurface + UsdUVTexture readerRemaining — UsdShadeInput/Output as distinct types; GetValueProducingAttributes; NodeGraph interface-consumer maps; Material base-material; CoordSysAPI; renderer shader dialects (MDL / MaterialX) |
| UsdLux (lighting) | :white_check_mark: | 0.4.0 | Trait-views behind lux feature (built on the geom chain — lights are Xformable / Boundable prims plus the Light interface, with read + author on the same handle): all 8 concrete light prims + LightFilter, and the applied LightAPI / ShapingAPI / ShadowAPI / LightListAPI |
| UsdSkel (skeletons, skinning) | :white_check_mark: | 0.5.0 | Trait-views behind skel (read + author; skel = ["geom"]): SkelRoot / Skeleton as Boundable, SkelAnimation / BlendShape (incl. inbetween shapes), namespace-inherited SkelBindingAPI — plus the object model (Topology, AnimMapper, SkeletonResolver, SkinningResolver, SkelAnimQuery, discover_bindings, pure-math LBS / blend shapes)Remaining — stage-level interpolation of SkelAnimation time samples |
| UsdVol (volumes) | :white_check_mark: | 0.5.0 | Trait-views behind vol feature (built on the geom chain): Volume (a Gprim with field:<name> relationships) and the file-backed OpenVDBAsset / Field3DAsset (the shared FieldAsset attrs)Remaining — the ParticleField* Gaussian-splat schemas |
| UsdPhysics | :white_check_mark: | 0.4.0 | Trait-views behind physics feature (read + author on the same handle): all 8 typed prims (Scene / CollisionGroup / Joint + 5 joint subtypes via the JointBase interface), the 7 single-apply API schemas, and the multi-apply DriveAPI / LimitAPI (per-DOF instance, with Get / GetAll)Remaining — collection evaluation for CollisionGroup (tracked under Spec 15) |
| UsdRender | :white_check_mark: | 0.5.0 | Trait-views behind render (read + author): the RenderSettingsBase interface with typed RenderSettings / RenderProduct / RenderVar / RenderPass / RenderDenoisePass, and compute_render_spec (product-overrides-settings inheritance, aspect-ratio conform, render-var dedup, per-level namespacedSettings)Remaining — RenderPass collection memberships; node-graph-driven namespaced settings; authoring renderSettingsPrimPath |
| UsdMedia | :white_check_mark: | 0.5.0 | Trait-views behind media feature (built on the geom chain): SpatialAudio (an Xformable: filePath / auralMode / playbackMode / startTime / endTime / mediaOffset / gain) and the applied AssetPreviewsAPI (default thumbnail via assetInfo.previews) |
| UsdUI | :white_check_mark: | 0.5.0 | Trait-views behind ui feature (read + author on the same handle): the typed Backdrop prim plus the single-apply SceneGraphPrimAPI (displayName / displayGroup) and NodeGraphNodeAPI (node-editor layout) |
| UsdProc | :white_check_mark: | 0.5.0 | Trait-view behind proc feature (built on the geom chain — GenerativeProcedural is a Boundable prim with read + author on the same handle): the proceduralSystem attribute |
| Flatten / export | :construction: | ||
| Namespace editing | :white_check_mark: | main | usd::NamespaceEditor: batched rename / reparent / delete with atomic all-or-nothing commit; target / connection / internal-reference fixup; relocates authored for cross-arc objects; variant / cross-arc edit targets author into their own layer stack (BatchPlan::Mapped), synthesizing relocates in that stack for content arriving across a nested arc (TargetFacts) and rejecting contributors outside it (RequiresRelocate) |
| Native instancing (shared representation) | :white_check_mark: | 0.5.0 | Scene-graph instancing (see §11.3.3) — instances share one composed prototype whose /__Prototype_N namespace is composed independently, onto which every instance proxy redirects |
| Stage cache | :thinking: | Avoid redundant stage loading | |
| Kind registry | :thinking: | Model/group/assembly/component taxonomy | |
| Edit targets | :white_check_mark: | main | Fully supported, see usd::EditTarget |
| Change notification | :white_check_mark: | main | Two tiers: sdf::LayerSink (SdfNotice) at a layer's commit seam — before_commit veto + after_commit observe; usd::StageSink (ObjectsChanged) — composed CommittedChange + lifecycle. Transferable Diff via extract_diff / apply_diff |
| Property stack queries | :thinking: | Inspect all contributing opinions across layers |
Tooling
| Feature | Status | Notes |
|---|---|---|
| usdcat (print/convert) | :construction: | |
| usdtree (hierarchy printing) | :thinking: | |
| usddiff (layer diffing) | :thinking: | |
| usdchecker (validation) | :thinking: | |
| usdzip (USDZ packaging) | :thinking: | |
| usdGenSchema (schema codegen) | :construction: |