Kit Migration Guide: 107.x to 110#

This guide covers all breaking changes, API migrations, and upgrade steps required when moving an Omniverse Kit application from Kit 107.x, 108.x, or 109.x to Kit 110. Work through each stage in order starting from your current version.


How to Use This Guide#

Find your current Kit version and jump to that stage. Complete every stage between your current version and 110 — there is no single-hop upgrade path across major versions.

You are on

Start at

Kit 107.x

Stage 1: 107 → 108

Kit 109.x

Stage 3: 109 → 110

Note on Kit 108: Kit 108 was not publicly released — the version number was skipped. However, the changes listed in Stage 1 (107 → 108) are still required when upgrading to 109 or 110, as later versions build on top of them.


Stage 1: Kit 107 → 108#

Note: Kit 108 was never released to production. Its version number was skipped. However, the changes below were carried forward into Kit 109, so all 107-based projects must still address them.

Kit 108 introduces OpenUSD 25.02 and Python 3.12. All C++ extensions must be rebuilt.

Python 3.11 → 3.12#

Python is upgraded from 3.11 to 3.12. Update all Premake configurations, build scripts, and CI configurations that reference the Python version. Audit all third-party packages for Python 3.12 compatibility.

OpenUSD 24.05 → 25.02#

All C++ extensions that link against OpenUSD must be rebuilt against the new headers and libraries.

GfMatrix precision methods: Deprecated imprecise matrix overloads are removed. Use explicit precision variants instead.

NDR deprecation: The Node Definition Registry (NDR) deprecation begins. Extensions relying on NDR should start migrating to alternative shader/material discovery approaches.

Scalar transform ops: USD now supports scalar xformOps (e.g., xformOp:translateX) alongside vector operations. Code that assumes all transform ops are vector-typed may behave differently — audit transform handling logic.

carb::extras::Path: Implicit String Conversion Removed#

carb::extras::Path no longer converts implicitly to std::string. Call .getString() explicitly:

// Before
std::string s = myPath;

// After
std::string s = myPath.getString();

The following functions now only accept carb::cpp::string_view — use Path class methods instead of passing raw strings:

  • getPathParent

  • getPathExtension

  • getPathStem

  • getPathRelative

Assert Macros Moved to Assert.h#

Assert macros previously available via Defines.h have moved to a dedicated Assert.h header. Add the explicit include where needed:

#include <carb/Assert.h>

Library.h: Macros Replace Functions#

getDefaultLibraryPrefix() and getDefaultLibraryExtension() have been removed from Library.h. Use the preprocessor definitions instead:

// Before
auto prefix = carb::extras::getDefaultLibraryPrefix();
auto ext    = carb::extras::getDefaultLibraryExtension();

// After
const char* prefix = CARB_LIBRARY_PREFIX;
const char* ext    = CARB_LIBRARY_EXTENSION;

Livestream 2.0#

The monolithic livestream extension has been split into focused modules. Update extension dependencies in your .kit files:

Old extension

New extension

omni.kit.livestream (monolithic)

omni.kit.livestream.app

omni.kit.livestream.aov

omni.kit.livestream.core

omni.services.livestream.session

Update livestream settings:

Legacy setting

New setting

app.livestream.port

exts."omni.kit.livestream.app".primaryStream.signalPort

app.livestream.fixedHostPort

exts."omni.kit.livestream.app".primaryStream.streamPort

app.livestream.publicEndpointAddress

exts."omni.kit.livestream.app".primaryStream.publicIp

Minimum GPU: Turing (sm_75) Required#

Pre-Turing GPU architectures have been removed from Kit’s CUDA compilation targets in Kit 108.

Removed architectures: Maxwell (sm_52, sm_53), Pascal (sm_60, sm_61, sm_62), Volta (sm_70, sm_72)

Minimum supported GPU: Turing (sm_75) — GeForce GTX 16xx, RTX 20xx, Quadro RTX series, and newer.

Action required: Recompile all extensions shipping precompiled CUDA kernels targeting sm_52–sm_72 for sm_75+. Validate that CI and test environments are not using pre-Turing GPUs.

Carbonite 208.3 — Binary ABI Break#

The Carbonite SDK was updated to 208.3.0, which contains ABI-breaking changes. Extensions compiled against 208.2 that use any of the affected APIs will need to be recompiled before targeting Kit 108+.

ITokens::setValue() renamed to setValueS()#

// Before
iTokens->setValue("key", str.c_str());                       // const char*
tokens->setValue("path", path.getParent().getStringBuffer()); // const char*

// After
iTokens->setValueS("key", stringView);                        // std::string_view
tokens->setValueS("path", path.getParent().getStringView());  // std::string_view

carb::detail::defineTupleCommon namespace cleanup#

The defineTupleCommon function has been promoted from the detail namespace to the public carb namespace:

// Before
carb::detail::defineTupleCommon<ui::Mat44, double, 16>(m, "Mat44", "");

// After (recommended)
carb::defineTupleCommon<ui::Mat44, double, 16>(m, "Mat44", "");

Note: This is technically not a breaking change — it is a promotion to public API. Existing code using carb::detail::defineTupleCommon will still compile. Updating to the public namespace is recommended for forward compatibility.

carb::variant::PyObjectVTable type name constant changed#

The variant type name for Python objects is now accessed via a standalone constant instead of through the vtable:

// Before
if (variant.data().vtable->typeName == carb::variant::PyObjectVTable::get()->typeName)

// After
if (variant.data().vtable->typeName == carb::variant::kPythonVariantTypeName)

Action required: Update all call sites that compare variant type names against PyObjectVTable::get()->typeName.

OmniGraph Core 3.0.0 — ABI Break#

omni.graph.core bumped to 3.0.0 in Kit 108, explicitly signalling a breaking ABI change from the Fabric Path/Token refactoring. omni.graph.nodes versions built against omni.graph.core 2.x are not compatible with 3.0.0.

Action required: Recompile all OmniGraph nodes and extensions against omni.graph.core 3.0.0. Ensure omni.graph.nodes version compatibility when locking extension versions.

OmniGraph — Parallel Node Registration Removed#

The option to register OmniGraph nodes in parallel has been removed. The extension manager is not thread-safe and parallel registration caused crashes.

Action required: Remove any code that relied on parallel OmniGraph node registration. Registration is now always sequential.

Extensions Removed / Changed Default Dependencies#

omni.kit.extpath.git removed

The Git URL extension search path extension has been fully deleted from the repository.

Action required: Remove all "omni.kit.extpath.git" entries from extension.toml files and find an alternative mechanism for git-based extension distribution.

omni.hydra.scene_api deprecated

Tagged as deprecated as of Kit 108. Removal is expected in a future Kit version.

Action required: Begin migrating away from omni.hydra.scene_api. Check all downstream extensions for transitive dependency declarations.

omni.kit.manipulator.prim.fabric no longer a default dependency

Removed from the default dependency chain due to limited use cases and performance implications.

Action required: If your extension needs fabric prim transform manipulation, declare omni.kit.manipulator.prim.fabric as an explicit dependency in extension.toml.

omni.resourcemonitor no longer loaded transitively via omni.hydra.usdrt_delegate

Action required: If your extension relies on omni.resourcemonitor being loaded transitively, declare it as an explicit dependency.

omni.kit.usd.layers — ILayers ABI 1.0 → 1.1#

ILayers was bumped from ABI version 1.0 to 1.1. All extensions that include omni/kit/usd/layers/ILayers.h must recompile.

// Before
CARB_PLUGIN_INTERFACE("omni::kit::usd::layers::ILayers", 1, 0)

// After
CARB_PLUGIN_INTERFACE("omni::kit::usd::layers::ILayers", 1, 1)

New helper functions added in LayerTypes.h for Events 2.0 migration:

carb::RString layerEventName(LayerEventType eventType);
carb::cpp::optional<LayerEventType> layerEventType(carb::RString eventName);

Layer Events — Migrate to Events 2.0#

Layer events now use carb::eventdispatcher::IMessageQueue instead of carb::events::IEvents. Extensions migrated in Kit 108: omni.kit.usd.layers, omni.kit.property.adapter.core, omni.kit.manipulator.prim.core, omni.appwindow.

# Before (Events 1.0)
import carb.events
layers = omni.kit.usd.layers.get_layers()
event_stream = layers.get_event_stream()
sub = event_stream.create_subscription_to_pop(on_layer_event)

# After (Events 2.0)
import carb.eventdispatcher
# Subscribe via IEventDispatcher using the context event key from UsdContext.getEventKey()

omni.ui — WindowHandle::isVisible() and WindowHandle::setVisible() Deprecated#

WindowHandle::isVisible() and WindowHandle::setVisible() are deprecated. In Python, WindowHandle.visible now returns None instead of a bool.

# Before
val = window_handle.visible  # returned True/False

# After — use Window instead
val = window.visible

Action required: Replace all WindowHandle.visible / isVisible() / setVisible() usages with the equivalent Window methods.

omni.ui — Menu / Separator’s menu_compatibility Deprecated#

ui.Menu and ui.Separator now emit deprecation warnings when menu_compatibility=True. This becomes a hard removal in Kit 110.

# Before (now warns)
with ui.Menu("File"):
    ...

# After
with ui.Menu("File", menu_compatibility=False):
    ...

Action required: Add menu_compatibility=False to all ui.Menu and ui.Separator usages.

omni.kit.ui — API Move and Transitive Dependency Removed#

get_custom_glyph_code moved to omni.ui:

# Before
import omni.kit.ui
code = omni.kit.ui.get_custom_glyph_code(icon_name)

# After
import omni.ui
code = omni.ui.get_custom_glyph_code(icon_name)

omni.kit.ui no longer loaded transitively: omni.ui, omni.kit.property.usd, and omni.kit.viewport.window no longer declare omni.kit.ui as a dependency. Extensions relying on it being loaded transitively will fail at runtime.

Action required: If your extension uses omni.kit.ui, declare it as an explicit dependency in extension.toml.


Stage 2: Kit 108 → 109#

Kit 109 introduces NumPy 2.x, CUDA 12.4.1, and a significant Fabric API revision.

Before You Start: Clear the Extension Cache#

If your project has a prior build, the extension cache may contain stale entries that cause the dependency solver to fail. Clear it before running precache_exts:

<project>/_build/<platform>/release/extscache/

Then run:

repo.bat precache_exts       # Windows
./repo.sh precache_exts      # Linux

CUDA 12.4.1 — Driver Requirement#

Kit 109 requires a minimum GPU driver version. Applications will fail to start with older drivers.

Platform

Minimum driver

Linux

550.54.15

Windows

551.78

Verify driver versions across all development and deployment environments before upgrading. Rebuild all CUDA extensions.

NumPy 1.x → 2.x#

NumPy is upgraded to 2.x. This is a breaking change for many scientific Python libraries.

Type aliases removed in NumPy 2.0 — replace with built-in Python types or explicit NumPy types:

Removed

Replacement

np.bool

bool or np.bool_

np.int

int or np.int_

np.float

float or np.float64

np.complex

complex or np.complex128

np.object

object

np.str

str

Other NumPy 2.x breaking changes to audit:

  • Default Windows integer size changed from int32 to int64

  • Type promotion rules changed — verify any code that relies on implicit type coercion

  • datetime64 behaviour updates

  • C API function signature changes affect C extensions that use the NumPy C API directly

  • Verify all third-party dependencies for NumPy 2.x compatibility before upgrading

Fabric API: TokenC / PathC Removed#

Kit 109 removes the intermediate TokenC / PathC types that were introduced in Kit 108 internal builds and returns to fabric::Token and fabric::Path as the standard types.

Note for Kit 107 → 109 upgraders: If you are upgrading from Kit 107 and were already using fabric::Token and fabric::Path (the standard types in Kit 107), you may not need any source changes — these are the same type names used in Kit 109. The intermediate TokenC / PathC types were only used in Kit 108 internal builds. Only code that adopted TokenC / PathC from Kit 108 internal builds needs to update.

If your code uses any of the following removed types, update them:

Removed

Replacement

fabric::TokenC

fabric::Token

fabric::PathC

fabric::Path

fabric::TokenId

fabric::Token

fabric::PathId

fabric::Path

kUninitializedToken

kUninitializedPath

fabric::Token and fabric::Path are weak references and trivially copyable. Use these validity checking methods:

token.isNull();     // true if never initialized
token.isExpired();  // true if backing storage has been released
token.validate();   // checks both conditions

Tokens and paths are reference-counted with the fabrics they are registered with. Lifetime extends at least as long as the specified fabric. For constants, use createImmortal().

Recompile required: Kit 109 also changes fabric::Token and fabric::Path to be trivially copyable — a binary ABI break. All extensions that include Fabric headers must recompile even if no source changes are needed.

Carbonite Changes#

carb::thread::shared_lock removed: Use std::shared_lock instead.

IDictionary::MakeAtPathS() renamed: Now MakeAtPath(), returning Item*.

String comparison: Replace compareStringsNoCase() with caseInsensitiveCompare().

Logger → Logger2: The Logger class is superseded by Logger2. Update implementations accordingly.

fmt namespace conflicts: If your code uses the fmt library alongside Carbonite, explicit namespace disambiguation may be required.

String Safety: ISettings / IError / IDictionary#

These interfaces now offer new methods accepting carb::cpp::string_view instead of const char*. The new interfaces eliminate buffer overflow vulnerabilities and reduce unnecessary string copies.

Note: These new interfaces are opt-in. By default, Carbonite still offers the old interface. Migrating to the new string_view-based methods is recommended but not required — existing code using const char* will continue to compile and work.

mergeMaterials Default Changed — Load Performance Impact#

Kit 109 changed the default value of the mergeMaterials setting. In affected scenes, this causes a significant load time performance regression that is not visible from API changes or changelogs alone — the code compiles and runs, but loading large scenes is measurably slower.

If you observe load performance regressions after upgrading to Kit 109, explicitly audit and set this value in your .kit file:

[settings]
# Verify this matches your pre-upgrade behavior.
# The default changed in Kit 109 — set explicitly to avoid surprises.
app.renderer.mergeMaterials = true  # or false — confirm your pre-upgrade default

Note: The specific before/after default values need to be confirmed against the Kit 109 release configuration. This entry is flagged for verification before publication.

Fabric Scene Delegate (FSD) Now Default#

FSD is enabled by default in Kit 109. If your application previously disabled FSD, test render output carefully after upgrading and remove any workarounds that assumed FSD was off.

Windows Memory Allocator: mimalloc#

Windows builds now use mimalloc as the default allocator. Cross-DLL heap allocations that previously worked may now crash — ensure allocations and deallocations always occur on the same side of DLL boundaries. The system allocator remains available via kit-sysalloc.exe for compatibility scenarios.


UsdLux — DomeLight Default Orientation Changed#

USD 25.05 changes the default dome light orientation to align with the stage +Y-axis. This is a scene-level behavior change — existing assets using DomeLight prims may render differently with no code or API change required to trigger it.

New attribute: omni:rtx:usdluxVersion — set on light prims to track compliance version. Lights created in Kit 109 default to UsdLux 25.05 behavior. See Significant Changes in UsdLux 25.05 for details.

Action required: Review all scenes containing DomeLight prims and test rendering before and after upgrading. Use the new UpgradeUsdLuxLightsCommand for assisted migration. The /rtx/usdLux/newLights/compliant setting controls behavior for duplicated lights.

RTX Real-Time 2.0 — Now the Default Mode#

Omniverse RTX Real-Time 2.0 became the default RTX Real-Time rendering mode in Kit 108, replacing RTX Real-Time 1.0.

Setting /rtx/rendermode=RaytracedLighting enables RTX Real-Time 2.0.

To use RTX Real-Time 1.0 instead, it must be explicitly enabled at startup.

See RTX Real-Time Renderer documentation for details.

MDL SDK — ABI Version 56 → 57#

The Iray/MDL SDK has been updated to version 2025.0.1 (MDL ABI version 57), which is binary incompatible with MDL ABI 56.

Action required: All plugins and extensions that link against MDL/Neuray (omni.mdl) must recompile against the 57.x SDK.

CloudXR — Runtime Extracted to New Extension#

The CloudXR runtime integration has been moved from omni.kit.xr.system.openxr into a separate extension. XRCloudXRBindings.h has been removed. New ABI interfaces are exposed:

  • IOpenXRRuntimeService_v1

  • IOpenXRRuntimeServiceRegistry_v1

  • IOpenXRRuntimeServiceFactory_v1

OpenXR version updated to Khronos 1.1.50.

Action required: If you provide a custom CloudXR runtime implementation, implement the new ABI interfaces and remove any #include of XRCloudXRBindings.h.


Stage 3: Kit 109 → 110#

Before You Start#

Clear the Extension Cache#

If your project has been previously built against Kit 109, the local extension cache will contain stale entries that cause the Kit 110 dependency solver to fail. Delete the extension cache directory before running any build or precache step:

<project>/_build/<platform>/release/extscache/

Then run:

repo.bat precache_exts       # Windows
./repo.sh precache_exts      # Linux

Update the Kit SDK Version Pin#

In deps/kit-sdk.packman.xml, update the kernel package to reference the Kit 110 production build:

<!-- Before -->
<package name="kit-kernel" version="109.x.x+production.<abi>.<config>"/>

<!-- After -->
<package name="kit-kernel" version="110.x.x+production.<abi>.<config>"/>

Update Extension Registry URLs#

Extension registry endpoints changed in Kit 110:

# Before (109 and earlier)
[settings.exts."omni.kit.registry.nucleus"]
registries = [{ name = "kit/default", url = "omniverse://kit-extensions.ov.nvidia.com/exts/kit/default" }]

# After (110)
[settings.exts."omni.kit.registry.nucleus"]
registries = [
  { name = "kit/default", url = "https://ovextensionsprod.blob.core.windows.net/exts/kit/prod/110/shared" }
]

OpenUSD 25.02 → 25.11#

Kit 110 upgrades OpenUSD from 25.02 to 25.11. All C++ extensions that link against OpenUSD must be rebuilt.

UI Hint Deprecation#

The displayName, displayGroup, and hidden metadata accessors on UsdObject, UsdPrim, and UsdProperty are deprecated. Use the new UI hints API instead:

# Before
prim.GetMetadata("displayName")
prop.SetMetadata("hidden", True)

# After
from pxr import UsdUI
hints = UsdUI.UsdUIPrimHints(prim)
hints.GetDisplayNameAttr().Get()

File Format Library Restructuring#

Core USD format implementations (usda, usdc, usdz) have moved from usd/usd to usd/sdf. The sdf test format has been removed — use usda as a replacement in any test code that relied on it.

Ndr / Sdr Consolidation#

The Ndr (Node Definition Registry) and Sdr (Shader Definition Registry) libraries have been consolidated into the Sdr library. Update any #include paths referencing pxr/usd/ndr to use pxr/usd/sdr instead.


Carbonite 208.3 → 210#

optional<bool> and expected<bool> Handling#

Testing an optional<bool> or expected<bool, E> directly in an if statement now tests for presence, not the stored value. Code that previously worked implicitly will not behave correctly:

// Before — tests presence, not value (was ambiguous, now incorrect)
if (b) { ... }

// After — explicit
if (b.has_value() && b.value()) { ... }

Unicode String Constants Removed#

kUnicodeToUtf8Failure and kUnicodeToWideFailure sentinel constants have been removed. Functions that previously returned these on failure now silently insert the Unicode replacement character U+FFFD instead.

g_carbClientName Type Change#

g_carbClientName has changed from const char* to carb::cpp::zstring_view. Update any code that assigns or compares against this directly.

Defines.h Split#

The monolithic carb/Defines.h header has been split into focused headers. Replace the single include with whichever specific headers your code actually needs:

Replacement header

Content

carb/AlignSize.h

Alignment utilities

carb/Architecture.h

Platform/arch detection

carb/Compiler.h

Compiler macros

carb/Deprecation.h

Deprecation macros

carb/ImportExport.h

DLL import/export

carb/Platform.h

Platform definitions

Deprecated Headers Removed#

Removed

Replacement

time/TscClock.h

clock/TscClock.h

omni/core/ReplaceCarbAssert.h

Use CARB_RELEASE_ASSERT directly

omni/log/LogChannelFilterUtils.h

omni/log/WildcardLogChannelFilter.h

CARB_CHECK Replaced#

// Before
CARB_CHECK(condition);

// After
CARB_RELEASE_ASSERT(condition, "description of what failed");

Livestream Renderer Methods Deprecated#

Four methods in carb/renderer/Renderer.h are marked deprecated and non-functional:

  • enableLivestream()

  • bindLivestreamInput()

  • updateLivestreamInput()

  • getLivestreamClientExtent()

Replace these with the omni.kit.livestream.* extension APIs (see the 106 → 109 guide Stage 2 for the livestream extension split).



omni.ui 3.0.0 — C++ ABI Break#

omni.ui bumped from 2.x to 3.0.0 with class member isolation for ABI stability. This is a binary ABI break — any C++ extension that links against omni.ui native bindings must be rebuilt against 3.x. Python-only extensions are not affected by the ABI change itself, but see the Python API changes below.

ByteImageProvider.set_data() Deprecated#

ByteImageProvider.set_data() is deprecated. Use the appropriate replacement:

# Before
provider.set_data(data, [width, height])

# After — pick the appropriate variant:
provider.set_bytes_data(data, [width, height])           # standard byte data
provider.set_data_array(data, [width, height])            # array input
provider.set_raw_bytes_data(ptr, [width, height])         # raw pointer
provider.set_bytes_data_from_gpu(ptr, [width, height])    # GPU memory

AbstractValueModel.subscribe_item_changed_fn() Deprecated#

# Before
model.subscribe_item_changed_fn(callback)

# After
model.subscribe_value_changed_fn(callback)

omni.ui.scene — intersection → gesture_payload Rename#

The following properties and methods were renamed across all shape classes (AbstractGesture, AbstractShape, Arc, Line, Points, PolygonMesh, Rectangle, Screen):

Old

New

.intersection

.gesture_payload

get_intersection()

get_gesture_payload()

Intersection (class constant)

GesturePayload

A compatibility wrapper emits a deprecation warning when the old names are used, but the old names will raise AttributeError once the wrapper is removed.


Rendering#

Hydra 2 Removed#

The Hydra 2 rendering backend has been removed entirely. Remove all conditional code paths and settings:

# Remove any of the following if present
[settings]
renderer.hydra2.enabled = true
app.hydra2.backend = "..."

There is no migration path — Hydra 1 (Storm) and RTX remain.

Multi-Node Rendering Removed#

Multi-node distributed rendering support has been removed. Remove any settings, launch scripts, or code paths that configured or detected multi-node rendering.

omni.renderer_capture → omni.kit.renderer.capture#

omni.renderer_capture is deprecated. The replacement is omni.kit.renderer.capture (not omni.kit.capture):

# Before
import omni.renderer_capture
omni.renderer_capture.acquire_renderer_capture_interface()

# After
import omni.kit.renderer.capture

Note: The omni.kit.renderer.capture CHANGELOG confirms this is the correct migration target — v1.0.3 introduced the replacement, v2.0.0 formalized the deprecation.

Viewport Camera — Clamp Default Changed#

The default camera clamp value changed in omni.kit.manipulator.camera (OMPE-75468). Custom extensions that override or read camera clamp settings should verify their behavior after upgrade.


Python API Changes#

omni.usd Layers#

The native layers interface on the USD context has been deprecated. Use omni.kit.usd.layers instead:

# Before
context = omni.usd.get_context()
layers = context.get_layers()

# After
import omni.kit.usd.layers
layers = omni.kit.usd.layers.get_layers()

omni.usd New APIs#

The following utilities are new in Kit 110:

# Find the next available prim path on a stage
omni.usd.get_stage_next_free_path(stage, path, source_prim=None)

# Create a valid USD identifier from an arbitrary string (unicode-aware)
omni.usd.make_valid_identifier(name)

omni.usd Deprecated Utilities#

# Deprecated: use omni.kit.material.library equivalents
omni.usd.get_subidentifier_from_material(...)
# → omni.kit.material.library.get_subidentifier_from_material(...)

omni.usd.get_subidentifier_from_mdl(...)
# → omni.kit.material.library.get_subidentifier_from_mdl(...)

# Deprecated: use set_prop_val
omni.usd.set_attr_val(...)
# → omni.usd.set_prop_val(...)

omni.kit.usd.layers — register_open_stage_addon() Deprecated#

As of v2.6.0, register_open_stage_addon() is deprecated. Use omni.activity.ui’s get_open_file_addon_callback instead.


Fabric API — IPath::create() and IToken::create() Deprecated#

The create() factory methods on IPath and IToken are deprecated. Use createImmortal() for constants or register with a valid FabricId for scoped lifetime:

// Before (deprecated)
auto path = IPath::create(str);
auto token = IToken::create(str);

// After — use immortal variants or register with a FabricId
auto path = IPath::createImmortal(str);
// or: call registerStringPaths() with a valid FabricId first

auto token = IToken::createImmortal(str);
// or: call registerStringTokens() with a valid FabricId first

OmniGraph Changes#

omni.graph.core 3.0.x → 3.1.x — ABI Additions#

omni.graph.core 3.1.0 added ABI features including a deprecated tag for OGN node types. Extensions compiled against omni.graph.core 3.0.x that do not include the 3.1.x interface additions need to recompile.

DeformedPointsToHydra Node Removed#

The DeformedPointsToHydra node has been removed as part of the OmniHydra removal. Remove any graphs that depend on this node and migrate deformed points output to an alternative rendering path.

OnCustomEvent: Bundle Attributes Deprecated#

Bundle attributes on the omni.graph.action.OnCustomEvent node are deprecated. Replace them with their non-bundle equivalents.

Nodes Deprecated — Scheduled for Removal#

The following nodes are deprecated in Kit 110.1 (omni.graph.nodes 2.11.0). The deprecated property is now set in each node definition, and the OmniGraph editor displays visible deprecation hints.

Bundle/attribute manipulation nodes (migrate away from bundle-based workflows):

Deprecated node

Recommended alternative

omni.graph.nodes.ArrayGetSize

omni.graph.nodes.ArrayLength

omni.graph.nodes.BundleConstructor

Use direct attribute connections or WritePrim nodes

omni.graph.nodes.CopyAttribute

Use ReadPrimAttribute / WritePrimAttribute

omni.graph.nodes.AttributeType

omni.graph.nodes.GetAttributeType

omni.graph.nodes.ExtractPrim

omni.graph.nodes.ReadPrim

omni.graph.nodes.GetAttributeNames

omni.graph.nodes.ReadPrimAttributes

omni.graph.nodes.HasAttribute

Check via ReadPrimAttributes with error handling

omni.graph.nodes.InsertAttribute

omni.graph.nodes.WritePrimAttribute

omni.graph.nodes.RemoveAttribute

Not directly replaceable — redesign graph to avoid runtime attribute removal

omni.graph.nodes.RenameAttribute

Not directly replaceable — redesign graph

Event and render nodes (migrate to current equivalents):

Deprecated node

Recommended alternative

omni.graph.nodes.UpdateTickEvent

omni.graph.action.OnTick

omni.graph.image.nodes.GpuInteropCudaEntry

omni.graph.image.nodes.RenderPostProcessEntry (C++ API)

omni.graph.image.nodes.RenderPreprocessEntry

Render pipeline API

omni.graph.image.nodes.RpResourceExampleAllocator

Remove — example nodes only

omni.graph.image.nodes.RpResourceExampleDeformer

Remove — example nodes only

omni.graph.image.nodes.RpResourceExampleHydra

Remove — example nodes only

C++ OmniGraph API Deprecations#

The following C++ methods are deprecated in omni.graph.core in Kit 110. These will become errors if /persistent/omnigraph/deprecationsAreErrors is set to true.

IGraph:

  • createGraphAsNode() → use createGraphAsNodeV2()

INodeTypeRegistry:

  • registerNodeTypeAlias() → use INodeTypeForwarding::defineForward()

IGraphContext (old interface versions):

  • getVariableDataHandle() / getVariableConstDataHandle()

  • getGraphTarget(), getOutputPrim(), getInputPrim(), getInputPrims()

  • getAttributesByNameR() / getAttributesByNameW()

  • getAttributesR() / getAttributesW()

  • copyPrimContentsIntoOutput()

  • getArrayAttributeSize() / getArrayAttributeSizeGPU()

ComputeGraph (all now no-ops or deprecated):

  • startup() / shutdown() — automatically managed by the framework

  • attach() / detach() — automatically managed by the framework

  • update() — not functional, scheduled for removal

  • pauseEvaluation() / resumeEvaluation() / getEvaluationSuspendCount() — scheduled for removal, currently no-ops

Bundle index access:

  • IBundle2::getChildByIndex() / IConstBundle2::getChildByIndex() → look up children by name


Extensions Changed or Removed#

Extensions Removed in Kit 110#

The following extensions were present in Kit 109 and are no longer available in Kit 110. They do not produce a compile or import error — the first sign of a missing dependency is typically a failed dependency solve or a missing-extension error at runtime. Audit your .kit files and extension.toml dependency lists before upgrading.

Extension

Action required

omni.kvdb

Remove dependency; replace any key-value store usages

omni.localcache

Remove dependency; audit usages

omni.genproc.core

Migrate procedural generation workflows to alternative APIs

omni.kit.widget.nucleus_connector → omni.kit.widget.connection_manager#

omni.kit.widget.nucleus_connector is now a thin compatibility shim with all implementation removed. This is not a drop-in replacement — callback arity and event names changed:

Old (nucleus_connector)

New (connection_manager)

connect_with_dialog()

show_add_nucleus_server_dialog()

connect()

ensure_connection()

reconnect()

reconnect()

disconnect()

disconnect()

Callback with 3 arguments

Callback with 2 arguments

NUCLEUS_CONNECTION_SUCCEEDED_EVENT

CONNECTION_SUCCEEDED_EVENT

A migration guide is available at: kit/source/extensions/omni.kit.widget.nucleus_connector/docs/MIGRATION.md

omni.hydra.scene_api — Still Present, Still Deprecated#

omni.hydra.scene_api was deprecated in Kit 108. It remains present in Kit 110 but is unsupported. Plan for removal in a future release.


MaterialX 1.38.10 → 1.39.3#

Kit 110 upgrades MaterialX from 1.38.10 to 1.39.3.

  • Most existing graphs render correctly without changes

  • Deprecated nodes (e.g., ND_swizzle_<type>_<type>) generate console warnings — these can be addressed at your own pace

  • Nodes with parameter changes (e.g., ND_atan2_float) may generate errors referencing missing properties — these require active migration

Test all MaterialX-based materials after upgrading.


Build System#

Kit 110 requires Visual Studio 2022 on Windows. Update repo.toml:

[repo_build.msbuild]
vs_version = "vs2022"
link_host_toolchain = true
"token:in_ci==false".version_check_vs_version = "2022"
"token:in_ci==false".version_check_msvc_version = "v143"
"token:in_ci==false".version_check_msbuild_version = "17"
"token:in_ci==false".version_check_winsdk_version = "10.0.22621.0"

Migration Checklist#

Pre-Upgrade#

  • [ ] Extension cache (extscache/) cleared

  • [ ] deps/kit-sdk.packman.xml updated to Kit 110

  • [ ] Extension registry URLs updated in .kit files

  • [ ] VS2022 / MSVC v143 installed (Windows)

C++ / Native — Rebuild Required#

  • [ ] All C++ extensions rebuilt against OpenUSD 25.11 and Carbonite 210

  • [ ] All C++ extensions linked against omni.ui rebuilt for 3.0.0 ABI break

  • [ ] All OmniGraph extensions rebuilt against omni.graph.core 3.1.x

C++ / Native — Code Changes#

  • [ ] optional<bool> / expected<bool> if checks replaced with .has_value() / .value()

  • [ ] kUnicodeToUtf8Failure / kUnicodeToWideFailure usages removed

  • [ ] g_carbClientName comparisons updated for zstring_view type

  • [ ] carb/Defines.h replaced with specific sub-headers

  • [ ] Removed deprecated headers replaced (TscClock.h, ReplaceCarbAssert.h, log filter headers)

  • [ ] CARB_CHECK replaced with CARB_RELEASE_ASSERT

  • [ ] IPath::create() / IToken::create()createImmortal() or register with FabricId

  • [ ] carb::renderer::Renderer livestream methods removed

  • [ ] OmniGraph deprecated C++ API calls audited (IGraphContext, IGraph, ComputeGraph)

Python API#

  • [ ] ui.Menu(menu_compatibility=...) parameter removed from all call sites

  • [ ] omni.usd.get_context().get_layers()omni.kit.usd.layers.get_layers()

  • [ ] omni.renderer_capture migrated to omni.kit.renderer.capture

  • [ ] omni.ui.scene intersectiongesture_payload renamed

  • [ ] ByteImageProvider.set_data()set_bytes_data() or appropriate variant

  • [ ] AbstractValueModel.subscribe_item_changed_fn()subscribe_value_changed_fn()

  • [ ] omni.usd.set_attr_val()omni.usd.set_prop_val()

  • [ ] omni.usd.get_subidentifier_from_material/mdl()omni.kit.material.library equivalents

  • [ ] omni.kit.usd.layers.register_open_stage_addon()omni.activity.ui replacement

  • [ ] omni.kit.widget.nucleus_connectoromni.kit.widget.connection_manager (not drop-in)

Rendering#

  • [ ] All Hydra 2 settings and code paths removed

  • [ ] Multi-node rendering configuration removed

  • [ ] MaterialX materials tested

  • [ ] Camera clamp behavior verified (OMPE-75468)

OmniGraph#

  • [ ] DeformedPointsToHydra node usages removed

  • [ ] OnCustomEvent bundle attributes replaced with non-bundle equivalents

  • [ ] Deprecated bundle/attribute manipulation nodes audited and migrated

  • [ ] UpdateTickEvent replaced with omni.graph.action.OnTick

  • [ ] Render pipeline nodes audited: GpuInteropCudaEntry, RenderPreprocessEntry, RpResourceExample*

Extensions#

  • [ ] omni.kvdb dependency removed and usages replaced

  • [ ] omni.localcache dependency removed and usages replaced

  • [ ] omni.genproc.core usages migrated

  • [ ] omni.hydra.scene_api removal planned — still present but unsupported


Official References#