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)

FeatureSpecStatusVersionNotes
Scalar types (bool, int, float, double, half, string, token, asset, timecode, int64, uint, uint64, uchar)6.2:white_check_mark:0.1.1sdf::Value enum
Dimensioned types (vectors, matrices, quaternions)6.3:white_check_mark:0.1.2float2..4, double2..4, matrix2d..4d, quath/f/d, int2..4, half2..4
Algebraic types (opaque)6.4:white_check_mark:0.2.0Value::Opaque
Semantic aliases (color, normal, point, vector, texCoord, frame)6.5:thinking:Parsed as underlying types; semantic role not tracked separately
Arrays6.6.1:white_check_mark:0.1.2All scalar and dimensioned array variants
Dictionaries6.6.2:white_check_mark:0.1.2Including nested dictionaries
Dictionary combining6.6.2.1:white_check_mark:0.4.0Recursive merge of stronger/weaker dictionaries during value resolution
List operations (explicit, composable)6.6.3:white_check_mark:0.2.0int, int64, uint, uint64, token, string, path, reference, payload
List op combining6.6.3.6:white_check_mark:0.2.0ListOp::combined_with
List op reducing6.6.3.8:white_check_mark:0.2.0ListOp::reduced
List op chaining6.6.3.9:white_check_mark:0.2.0Applied during composition arc evaluation

Document Data Model (Spec 7)

FeatureSpecStatusVersionNotes
Layer structure (specs, paths, fields)7.2:white_check_mark:0.1.1AbstractData trait
Spec forms (layer, prim, attribute, relationship, variant set, variant)7.3:white_check_mark:0.1.1SpecType enum
Core metadata fields (layer spec)7.6.1:white_check_mark:0.1.2subLayers, subLayerOffsets, defaultPrim, documentation, etc.
Core metadata fields (prim spec)7.6.2:white_check_mark:0.1.2specifier, primChildren, propertyChildren, references, payload, inherits, specializes, variantSets, variantSelection, etc.
Core metadata fields (attribute spec)7.6.3:white_check_mark:0.1.2typeName, default, timeSamples, connectionPaths, variability, custom
Core metadata fields (relationship spec)7.6.4:white_check_mark:0.1.2targetPaths, variability, custom
Core metadata fields (variant set/variant spec)7.6.5-7:white_check_mark:0.2.0
Spline specialized type7.4.2.4:construction:SplineKnot, interpolation modes, extrapolation, looping
Retiming specialized type (layer offsets)7.6.1.2.2:white_check_mark:0.1.20.1.2 — parsed from subLayerOffsets
0.4.0 — composed through arcs
0.5.0 — applied during value resolution (§12.3.2.1)

Paths (Spec 8)

FeatureSpecStatusVersionNotes
Absolute/relative paths8.1:white_check_mark:0.1.1sdf::Path
Prim paths8.1:white_check_mark:0.1.1
Property paths8.1:white_check_mark:0.1.1
Variant selection paths8.1:white_check_mark:0.2.0{set=selection} syntax
Path grammar (PEG)8.5:white_check_mark:0.1.4Parsed from USDA and USDC
Element ordering8.2:white_check_mark:0.5.0sdf::element_cmp
Relative path resolution8.1:white_check_mark:0.2.0Anchoring via make_absolute
Legacy path compatibility8.7:thinking:Extended grammar with [target] and .mapper paths

Resource Interface (Spec 9)

FeatureSpecStatusVersionNotes
Resource identifiers (URI)9.2:white_check_mark:0.1.1Asset 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.0DefaultResolver with search paths
Resolving identifiers to locations9.5:white_check_mark:0.2.0Resolver trait
Resolving extensions9.6:white_check_mark:0.2.0.usd/.usda/.usdc/.usdz dispatch
Packaged resources9.7:white_check_mark:0.2.0asset.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)

FeatureSpecStatusVersionNotes
Sublayers10.3.1:white_check_mark:0.1.2Layer stack construction
Sublayer offset composition10.3.1.1:white_check_mark:0.4.0Effective 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.2Including defaultPrim fallback
Reference namespace mapping10.3.2.1.1:white_check_mark:0.3.0MapFunction with source/target pairs
Reference offset composition10.3.2.1.2:white_check_mark:0.4.0Reference offsets composed with target layer-stack offsets and applied during value resolution (§12.3.2.1); scale <= 0 falls back to identity
Payloads10.3.2.2:white_check_mark:0.1.2Treated identically to references
Payload loading control10.3.2.2:white_check_mark:0.4.0StageBuilder::load supports loading all payloads or leaving them unloaded
Payload offset composition10.3.2.2.2:white_check_mark:0.4.0Loaded payload offsets compose like references (unloaded ignored) and applied during value resolution (§12.3.2.1); scale <= 0 falls back to identity
Inherits10.3.2.3:white_check_mark:0.2.0Including implied inherit propagation
Inherit namespace mapping (with identity)10.3.2.3.1:white_check_mark:0.3.0from_pair_identity adds (/, /) catch-all
Specializes10.3.2.4:white_check_mark:0.2.0
Specializes global weakness10.4.1:white_check_mark:0.3.0Stable-partition reorders specialize-introduced nodes after all others
Variants10.3.2.5:white_check_mark:0.2.0Including deferred evaluation after R/P
Variant selection computation10.3.2.5.1:white_check_mark:0.2.0Strongest opinion wins, fallback to first variant
Variant fallback map10.3.2.5.1:white_check_mark:0.3.0VariantFallbackMap via StageBuilder
Relocates10.3.2.6:white_check_mark:0.3.0layerRelocates, source path resolution, child remapping
Relocates validation rules10.3.2.6:construction:7 restriction checks not enforced
Relocates namespace mapping10.3.2.6.1:white_check_mark:0.3.0Composed with reference arc mappings
Arc permissions (permission = private)10.3.3:white_check_mark:mainsdf::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 ordering10.4:white_check_mark:0.3.0ArcType with Ord derived from discriminant
Namespace mappings (MapFunction)10.5:white_check_mark:0.3.0Compose, inverse, longest-prefix matching
Composition errors (non-fatal)10.6:white_check_mark:0.3.0pcp::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 it
Remaining — precise target-diagnostic liveness (an orphaned interned target over-reports; see pcp module docs)
List op arc computation10.3.2:white_check_mark:0.2.0Weakest-to-strongest list-op chaining

Stage Population (Spec 11)

FeatureSpecStatusVersionNotes
Composed stage11.2:white_check_mark:0.2.0Stage::open with depth-first traversal
Populating the stage11.3:white_check_mark:0.2.0Lazy per-prim composition via pcp::Cache
Population mask11.3:white_check_mark:0.4.0StageBuilder::mask limits stage queries, traversal, and root layer-stack dependency collection to a masked working set
Prim child discovery11.3.1:white_check_mark:0.2.0Merged 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.0Prim::children; weak-to-strong fold reapplying primOrder and relocates per layer
Ordered property children11.3.2:white_check_mark:0.2.0Merged propertyChildren
Ordered property children (propertyOrder reordering)11.3.2:white_check_mark:0.5.0Property names fold weakest-to-strongest, reapplying each layer's propertyOrder as it merges (shares the primChildren fold)
Scene graph instancing11.3.3:white_check_mark:0.5.0Instances 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.0Model/group/component/subcomponent queries validate the contiguous kind hierarchy
Stage queries (Active, Loaded, Defined, Abstract, Instance, InPrototype)11.5:white_check_mark:0.4.0Per-prim status flags and PrimPredicate traversal filtering
0.5.0IN_PROTOTYPE and the instance-proxy traversal toggle (see Scene graph instancing, §11.3.3)
Session layer11.2:white_check_mark:0.3.0StageBuilder::session_layer

Value Resolution (Spec 12)

FeatureSpecStatusVersionNotes
Metadata resolution (strongest opinion wins)12.2:white_check_mark:0.2.0Strongest authored opinion wins, with ValueBlock support for scalar fields
Special field classes are tracked separately below
Specifier resolution12.2.1:white_check_mark:0.4.0def/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.0Weakest authored opinion wins
custom field resolution (any-true)12.2.4:white_check_mark:0.4.0Logical OR across opinions
Dictionary combining12.2.5:white_check_mark:0.4.0Recursive merge across dictionary-valued opinions
List op resolution12.2.6:construction:Composition-arc list ops, composed apiSchemas, connectionPaths/targetPaths, and clipSets order folded across layers
Remaining — 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.0defaultPrim, timing fields, etc.
Fallback values12.2.8:construction:Requires schema registry
Basic attribute resolution12.3:white_check_mark:0.5.00.2.0 — resolves authored default, timeSamples, and ValueBlock
0.5.0 — layer-offset retiming applied
Value clips and splines are tracked separately
Time-sample lookup and interpolation12.3, 12.5.1-2:white_check_mark:0.5.00.1.2 — time-sample parsing
0.4.0Stage::value_at performs held/linear interpolation over composed samples
0.5.0 — per-node retiming and value clips
Layer-offset retiming during value resolution12.3.2.1:white_check_mark:0.5.0Each 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 evaluation12.5.3:construction:Bezier/Hermite curve interpolation
Interpolation (Held)12.5.1:white_check_mark:0.4.0Stage::value_at(attr, time) with InterpolationType::Held.
Interpolation (Linear)12.5.2:white_check_mark:0.4.0Stage::value_at(attr, time) with InterpolationType::Linear (default)
All §12.5.2 types incl. quath/f/d via slerp
Held-fallback for unsupported types and past-last-sample
Value clips12.3.4:white_check_mark:0.5.0Explicit + 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 view
Template clips (§12.3.4.1.3) expand to explicit sets, retimed by layer offset; interpolateMissingClipValues + missing-value sentinels
Remaining — clip-manifest generation (ComputeClipManifest)
Relationship targets (raw + forwarded)12.4:white_check_mark:0.5.0Composed raw targetPaths, folding list-op edits across contributing layers and remapping through arcs
Forwarded targets recursively chase relationship-to-relationship chains to prim/attribute terminals with cycle breaking and dedup
Attribute connections12.4:white_check_mark:0.5.0Composed connectionPaths folding list-op edits across contributing layers, with authoring on Attribute
Stage-wide connection graph indexes every edge and resolves chains to terminal sources

Schemas (Spec 13)

FeatureSpecStatusVersionNotes
Schema registry13.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 tokens
Remaining — 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 types13.4:construction:
Value type names13.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 codegen13.3:construction:Generate typed APIs from schema definitions

Color (Spec 14)

FeatureSpecStatusVersionNotes
Supported color spaces14.1:thinking:
Core metadata extensions (colorSpace)14.2:thinking:
ColorSpaceDefinitionAPI14.3:thinking:

Collections (Spec 15)

FeatureSpecStatusVersionNotes
CollectionAPI15.1:white_check_mark:0.5.0Multi-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 collections15.2:white_check_mark:0.5.0MembershipQuery (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)

FeatureSpecStatusVersionNotes
USDA (text) reading16.2:white_check_mark:0.1.4Recursive descent parser with logos tokenizer
USDA (text) writing16.2:white_check_mark:0.4.0usda::TextWriter; round-trips the compliance suite opinion-for-opinion
USDC (binary) reading16.3:white_check_mark:0.1.1Crate format with LZ4/integer compression
USDC (binary) writing16.3:white_check_mark:0.4.0usdc::CrateWriter; streaming packer with integer compression, LZ4 blocks, DFS path encoder
USDZ (package) reading16.4:white_check_mark:0.2.0ZIP-based package reader
USDZ (package) writing16.4:white_check_mark:0.4.0usdz::ArchiveWriter; STORED-only, 64-byte aligned entries
Format auto-detection (.usd)16.1:white_check_mark:0.2.0Magic byte detection

Beyond Core Spec

Features from the C++ reference implementation not covered by the core specification.

FeatureStatusVersionNotes
Variable expressions:white_check_mark:0.2.013 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} sublayers
Remaining — 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:mainEvery Stage edit drains an sdf::ChangeList through pcp::Changes (did_changeapply); 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 cached
Remaining — per-prim composition revision, query_errors compute-once, spec-stack-refresh splice
UsdGeom (geometry, transforms, cameras):white_check_mark:0.4.0Trait-views behind geom (the SchemaBase → … → Curves chain, read + author): all intrinsic shapes, Camera, Xform/Scope, Mesh + GeomSubset, curve/point/patch types, PointInstancer; full xformOpOrder evaluator
Remaining — PrimvarsAPI / ModelAPI / MotionAPI / VisibilityAPI / BBoxCache / XformCache
UsdShade (materials, shaders):white_check_mark:0.5.0Trait-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 reader
Remaining — 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.0Trait-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.0Trait-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.0Trait-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.0Trait-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.0Trait-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.0Trait-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.0Trait-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.0Trait-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:mainusd::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.0Scene-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:mainFully supported, see usd::EditTarget
Change notification:white_check_mark:mainTwo 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

FeatureStatusNotes
usdcat (print/convert):construction:
usdtree (hierarchy printing):thinking:
usddiff (layer diffing):thinking:
usdchecker (validation):thinking:
usdzip (USDZ packaging):thinking:
usdGenSchema (schema codegen):construction: