Overview

Nucleus registry implementation for extension system.

It is important for such extension to be enabled as soon as possible so that other extensions can use it as a bootstrap to be downloaded. Once enabled it registers itself in the extension manager as extension registry provider.

Settings

Refer to extension.toml file for settings.

Basic Principle

In the provided nucleus URL it stores all extensions as zip archives and special index.zip file (zipped json) which contains information about each extension stored.

Setting Extension Registries

To change the list of extension registries to sync to you can use those settings:

[settings.exts."omni.kit.registry.nucleus"]
# URL where to store archives and index of extensions (can be local filesystem too). They are being pulled in order,
# so if multiple registries have a package with the same name the one that is specified first is prioritized.
# Both Carbonite and custom tokens (defined below under "tokens" key) are supported in URLs. That allows to reuse same
# URL parts for multiple registries.
# `optional` flag if set is used to ignore registry if it's unreachable, otherwise it will be treated as an error.
registries = [
    #{ name = "kit/default", url = "${main_registry_url}/kit/default", optional = false },
]

A name is used for UI, debug purposes and to specify which registry to publish to when there are multiple.

By default, Kit has some default registry set in core config (kit-core.json) with setting above.

An example of overriding a registry with CLI:

kit --/exts/omni.kit.registry.nucleus/registries/0/url="C:/temp"

Supported Registries Backends

Omniverse Client library is used under the hood so anything that it supports can be used as storage. If registry doesn’t exist it will be created automatically when the first extension is published.

  • nucleus server, e.g. omniverse://kit-extensions.ov.nvidia.com/exts

  • local filesystem, e.g. C:/my_registry

  • http/https, e.g. https://my_registry.com/exts (read only)

Http registry is read-only, so it can’t be used to publish extensions. However, a common pattern is to publish extensions to a local filesystem or nulceus server and then sync them to http registry for distribution.

Nucleus Accounts

To read and write to nucleus server you need a nucleus account. Use this setting to specify it:

[settings.exts."omni.kit.registry.nucleus"]
accounts = [
    { url = "omniverse://kit-extensions.ov.nvidia.com", read = "[user]:[pass]", write = "[user]:[pass]" }
]

User and password is separated by :. A separate account can be set for read and write operations.

Different accounts per different hosts can be set. Otherwise an empty url matches all hosts.