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

