Manifest [offers] Section
The [offers]
section declares the capabilities that an application package offers to other application packages installed on a Vega system. Offers is an optional section.
[offers]
[[offers.interaction]]
# Configuration for allowed interactions
[[offers.service]]
# Configuration for offered services
[[offers.module]]
# Defining shared artifacts
[[offers.message-target]]
# Mapping URIs to lifecycle components
[[offers.interaction]]
Optional
This section is a legacy mechanism for offering launchable targets in the app to the rest of the system. This section is being replaced with [[offers.module]] + includes-messages
and offers.message-target
. In the transition period, apps that are missing offers.message-target
but have non zero entries in offers.interaction
will produce a manifest validation error in packaging.
The offers.interaction
section declares the interactive or task components, available to launch by other application packages, given they have the required privileges as declared here.
[[offers.interaction]]
id = "com.foo.bar.interactive"
launch-uris = ["foo://interactive"]
Fields
-
id
(string, required): The unique identifier of the interactive or task component. The identifier belongs to one of the components declared in the manifest under the[components]
section. -
launch-uris
(array of strings, optional): A list of URIs that can be used to invoke the component.launch-uris = ["smart_app://main"]
-
required-privileges
(array of strings, optional): A list of privileges required to launch the component. Only system packages can restrict access using required privileges. This restriction feature does not work for non-system packages.required-privileges = [ "com.amazon.smart_app.privilege.access" ]
[[offers.service]]
Optional
The offers.service
section defines:
- The services provided by this package
- The permissions that other installed apps need to use these services
[[offers.service]]
id = "com.foo.bar.service"
Fields
-
id
(string, required): The unique identifier of the service component. The identifier belongs to one of the components declared in the manifest under the[components]
section. -
required-privileges
(array of strings, optional): A list of privileges required to invoke the service. Only system packages can restrict access using required privileges. This restriction feature does not work for non-system packages.required-privileges = [ "com.amazon.smart_app.privilege.access" ]
[[offers.module]]
Optional
The [[offers.module]]
section declares the shared artifacts that this package offers to other app packages.
[[offers.module]]
id = "/com.amazon.samplepkg.module@IMod1"
includes-messages = [
"pkg://com.amazon.samplepkg.main",
"samplepkg://play"
]
Fields
-
id [string] (required): The fully-qualified identifier of the module must follow this format:
/<component_name>@<revision_tag>
. Replace<component_name>
and<revision_tag>
with the following information:<component_name>
:- Must use reverse-DNS notation (such as
com.company.product
). - The parts of the reverse DNS name should be lowercase alphanumeric ASCII characters (
a-z0-9
) and underscores (_
) only, with namespace parts separated by a dot (.
). Words in namespace parts are separated with an underscore (_
). - These constraints are described by the regular expression
^[a-z_][a-z0-9_]*(?:\.[a-z_][a-z0-9_]*)*$
. - Must be unique in the system.
- Tip: Using package ID as prefix helps ensure uniqueness.
- Must use reverse-DNS notation (such as
-
@
: Separator between component name and revision tag. <revision_tag>
:- Follow the same naming convention as interfaces in IDL.
- Must start with uppercase '
I
', as is traditional in IDL languages of this sort:IThingDoer
, notThingDoer
. - The character after '
I
' must be uppercase. - Remaining characters can be alphanumeric (
a-zA-Z0-9
) or underscore (_
). - These constraints are described by the regular expression
^I([A-Z][a-zA-Z0-9_]*)$
.
id = "/com.amazon.samplepkg.module@IMod1"
-
includes-messages [array of strings] (optional): List of URIs defined by this module. Each URI must have a corresponding
[[message]]
section describing the sender and receiver privileges. Each URI can only be included in one module.
includes-messages = [
"pkg://com.amazon.samplepkg.main",
"samplepkg://play"
]
[[offers.message-target]]
Optional
The [[offers.message-target]]
maps URIs to the corresponding lifecycle component to launch. The URIs must either be defined in a module in the same manifest or imported via a needs.module
or a wants.module
call. The section can be repeated to define multiple mapping groups of URIs to component. Note that pkg://
is used for URIs which directly contain the lifecycle component's name. As a result this section can be skipped.
Fields
- uris [array of strings] (required): List of URIs that are part of the current mapping group.
uris = [
"samplepkg://play"
]
- uses-component [string] (required): Name of the component that is the recipient of the URI. The name should match a component listed in either the
[components.interactive]
, or the[components.service]
, or the[components.task]
sections in the manifest.
uses-component = "com.amazon.samplepkg.main"
Last updated: Sep 30, 2025