# Defining a UDO Package

A UDO package consists primarily of a registration library and
one or more implementation libraries. The main idea is that the
registration library contains information about the nature of
the operations, while the implementation(s) contains the
kernels required to execute the operations (see [Overview of
UDO](https://docs.qualcomm.com/doc/80-63442-10/topic/udo_overview.html) for more details). A UDO package can
be defined via a UDO configuration, which contains a text
specification of the operations and paths that will ultimately
help define a directory structure that will represent a UDO
package. The definition of a UDO package will be discussed in
this section, while the creation of a package once its been
defined will be deferred to the section on [Creating a UDO
Package](https://docs.qualcomm.com/doc/80-63442-10/topic/creating_udo_package.html).

UDO Package Config Description

All the fields found in the [UDO Config Field
Description](https://docs.qualcomm.com/doc/80-63442-10/topic/udo_operator_definition.html#udo_config_fields_spec)
are replicated for the UDO package config specification. The
breakdown of the aforementioned UDO config file is thus a
combination of the description found in that section with the
addition of two package specific fields. A generic config is
included below with the package-specific fields explained.
Users should see [UDO Config Field
Description](https://docs.qualcomm.com/doc/80-63442-10/topic/udo_operator_definition.html#udo_config_fields_spec)
for more detailed descriptions of the replicated fields, as
well as review the associated notes.

{
        "UdoPackage_0":
        {
            "Operators": [
                {
                    "type": "Softmax",
                    "inputs":[
                        {"name":"Placeholder", "per_core_data_types": {"CPU":"FLOAT_32", "GPU":"FLOAT_32", "DSP":"UINT_8"},
                            "quantization_mode": "TF"}
                    ],
                    "outputs":[
                        {"name":"Output","per_core_data_types": {"CPU":"FLOAT_32", "GPU":"FLOAT_32", "DSP":"UINT_8"},
                            "quantization_mode": "TF"}
                    ],
                    "core_types": ["CPU", "GPU", "DSP"],
                    "dsp_arch_types": ["v68"]
                }
            ],
            "UDO_PACKAGE_NAME": "SoftmaxUdoPackage"
        }
    }
    Copy to clipboard

Additional fields are explained below:

- **UDO\_PACKAGE\_NAME:** The name of the package containing the
UDO.
- **UDO\_PACKAGE\_PATH:** A path to where the UDO package will
be saved. If this is not provided the current directory will
be used.
- **SNPE\_UDO\_ROOT:** This is an optional variable that lets
the tool know where the SnpeUdo API directory is located
within the user’s environment. This can be set here or as an
environment variable.

Notes

1. The information specified in the config is used to
instantiate info data structures which are critical to how
Qualcomm® Neural Processing SDK executes a model containing a UDO. This implies a
synergy between a UDO package and a model containing a UDO,
as such, the recommended strategy is to use the same config
for defining a UDO and its corresponding package.
2. The definition of a package name will determine the names of
source files and implementation libraries found in a
generated package.
3. Operation types will determine the names of methods, classes
and source files contained in a generated package.
4. The package core-types are a set of all core-types mentioned
for each operator in the package .

Last Published: Jun 04, 2026

[Previous Topic
Defining a UDO](https://docs.qualcomm.com/bundle/publicresource/80-63442-10/topics/udo_operator_definition.md) [Next Topic
Creating a UDO Package](https://docs.qualcomm.com/bundle/publicresource/80-63442-10/topics/creating_udo_package.md)