blob: d0e10651f29cc7474065269f4668c637c62aa14a [file] [log] [blame] [view]
<link rel="stylesheet" href="../style.css" />
[TOC]
# fuchsia.component.decl
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 7</span></div>
## **STRUCTS**
### CapabilityRef {#CapabilityRef data-text="CapabilityRef"}
*Defined in [fuchsia.component.decl/relative_refs.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/relative_refs.fidl;l=48)*
<p>A reference to a capability declared in this component.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="CapabilityRef.name">
<td><code>name</code></td>
<td>
<code>string[100]</code>
</td>
<td></td>
<td>No default</td>
</tr>
</table>
### ChildRef {#ChildRef data-text="ChildRef"}
*Defined in [fuchsia.component.decl/relative_refs.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/relative_refs.fidl;l=29)*
<p>A reference to one of the component's child instances.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="ChildRef.name">
<td><code>name</code></td>
<td>
<code><a class='link' href='#child_name'>child_name</a></code>
</td>
<td><p>The name assigned to the child by its parent. If <code>collection</code> is set,
<code>name</code> is scoped to <code>collection</code> and the child is a dynamic instance.</p>
</td>
<td>No default</td>
</tr>
<tr id="ChildRef.collection">
<td><code>collection</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>The collection <code>name</code> belongs to. If omitted, <code>name</code> references a static
instance. This field must be omitted if the <code>ChildRef</code> is being used in
a component declaration. Optional.</p>
</td>
<td>No default</td>
</tr>
</table>
### CollectionRef {#CollectionRef data-text="CollectionRef"}
*Defined in [fuchsia.component.decl/relative_refs.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/relative_refs.fidl;l=40)*
<p>A reference to one of the component's collections.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="CollectionRef.name">
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td></td>
<td>No default</td>
</tr>
</table>
### ConfigType {#ConfigType data-text="ConfigType"}
*Defined in [fuchsia.component.decl/config.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/config.fidl;l=50)*
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="ConfigType.layout">
<td><code>layout</code></td>
<td>
<code><a class='link' href='#ConfigTypeLayout'>ConfigTypeLayout</a></code>
</td>
<td></td>
<td>No default</td>
</tr>
<tr id="ConfigType.parameters">
<td><code>parameters</code></td>
<td>
<code>vector&lt;<a class='link' href='#LayoutParameter'>LayoutParameter</a>&gt;?</code>
</td>
<td></td>
<td>No default</td>
</tr>
<tr id="ConfigType.constraints">
<td><code>constraints</code></td>
<td>
<code>vector&lt;<a class='link' href='#LayoutConstraint'>LayoutConstraint</a>&gt;</code>
</td>
<td></td>
<td>No default</td>
</tr>
</table>
### DebugRef {#DebugRef data-text="DebugRef"}
*Defined in [fuchsia.component.decl/relative_refs.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/relative_refs.fidl;l=26)*
<p>A reference to the environment's debug capabilities.</p>
&lt;EMPTY&gt;
### FrameworkRef {#FrameworkRef data-text="FrameworkRef"}
*Defined in [fuchsia.component.decl/relative_refs.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/relative_refs.fidl;l=45)*
<p>A reference to the component framework itself.</p>
&lt;EMPTY&gt;
### NameMapping {#NameMapping data-text="NameMapping"}
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=39)*
<p>Type used to create a mapping between 2 names. Used to rename service or component instances
in FIDL declarations.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="NameMapping.source_name">
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>Name used in the source instance.</p>
</td>
<td>No default</td>
</tr>
<tr id="NameMapping.target_name">
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>Name used in the target instance.</p>
</td>
<td>No default</td>
</tr>
</table>
### ParentRef {#ParentRef data-text="ParentRef"}
*Defined in [fuchsia.component.decl/relative_refs.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/relative_refs.fidl;l=20)*
<p>A reference to a component's parent instance.</p>
&lt;EMPTY&gt;
### SelfRef {#SelfRef data-text="SelfRef"}
*Defined in [fuchsia.component.decl/relative_refs.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/relative_refs.fidl;l=23)*
<p>A reference to the component itself.</p>
&lt;EMPTY&gt;
### VoidRef {#VoidRef data-text="VoidRef"}
*Defined in [fuchsia.component.decl/relative_refs.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/relative_refs.fidl;l=53)*
<p>A reference to an intentionally missing offer source.</p>
&lt;EMPTY&gt;
## **ENUMS**
### AllowedOffers [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#AllowedOffers data-text="AllowedOffers"}
Type: <code>uint32</code>
*Defined in [fuchsia.component.decl/collection.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/collection.fidl;l=68)*
<p>The kinds of offers that can target the children in a collection.</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="AllowedOffers.STATIC_ONLY">
<td><h3 id="AllowedOffers.STATIC_ONLY" class="add-link hide-from-toc">STATIC_ONLY</h3></td>
<td><code>1</code></td>
<td><p>Only static offers may target components in the collection. &quot;Static
offers&quot; are the offers in the <code>ComponentDecl</code> that target the collection
itself.</p>
<p>This is the default behavior.</p>
</td>
</tr>
<tr id="AllowedOffers.STATIC_AND_DYNAMIC">
<td><h3 id="AllowedOffers.STATIC_AND_DYNAMIC" class="add-link hide-from-toc">STATIC_AND_DYNAMIC</h3></td>
<td><code>2</code></td>
<td><p>Both static offers and dynamic offers may target components in the
collection. &quot;Static offers&quot; are the offers in the <code>ComponentDecl</code> that
target the collection itself. &quot;Dynamic offers&quot; are additional offers
that are passed to <code>CreateChild</code> at runtime.</p>
</td>
</tr>
</table>
### Availability [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Availability data-text="Availability"}
Type: <code>uint32</code>
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=54)*
<p>Describes the expected availability of the capability.</p>
<p>Some capabilities may not be present on all system configurations. In those
cases, the availability will be declared as <code>OPTIONAL</code> along the chains of
exposes/offers/uses, and the capability would be routed from <code>void</code> on
system configurations where it does not make sense to route or provide a
particular capability (e.g. graphical capabilities on a headless system).</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="Availability.REQUIRED">
<td><h3 id="Availability.REQUIRED" class="add-link hide-from-toc">REQUIRED</h3></td>
<td><code>1</code></td>
<td><p>The capability must be available. Failure to route the capability is an
error.</p>
</td>
</tr>
<tr id="Availability.OPTIONAL">
<td><h3 id="Availability.OPTIONAL" class="add-link hide-from-toc">OPTIONAL</h3></td>
<td><code>2</code></td>
<td><p>Inside a use declaration: the component can function if it fails to
obtain the capability.</p>
<p>Inside an offer/expose declaration: the capability may not be available
in some system configurations. As a corollary, the target component must
not have a required dependency on the capability.</p>
</td>
</tr>
<tr id="Availability.SAME_AS_TARGET">
<td><h3 id="Availability.SAME_AS_TARGET" class="add-link hide-from-toc">SAME_AS_TARGET</h3></td>
<td><code>3</code></td>
<td><p>If the target of the corresponding offer declaration requires the
capability, then the behavior is equivalent to required. If the target
has an optional dependency on the capability, then the behavior is
equivalent to optional. This is useful for container components that
would like to change their routing availability based on ones inside.</p>
<p>This value is not allowed inside a use or expose declaration.</p>
</td>
</tr>
<tr id="Availability.TRANSITIONAL">
<td><h3 id="Availability.TRANSITIONAL" class="add-link hide-from-toc">TRANSITIONAL</h3></td>
<td><code>4</code></td>
<td><p>The source may omit the route completely without even having to route
from <code>void</code>.</p>
<p><a class='link' href='#TRANSITIONAL'>TRANSITIONAL</a> is used for soft transitions that introduce new
capabilities.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 9</span></div>
</td>
</tr>
</table>
### ConfigTypeLayout [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#ConfigTypeLayout data-text="ConfigTypeLayout"}
Type: <code>uint32</code>
*Defined in [fuchsia.component.decl/config.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/config.fidl;l=60)*
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="ConfigTypeLayout.BOOL">
<td><h3 id="ConfigTypeLayout.BOOL" class="add-link hide-from-toc">BOOL</h3></td>
<td><code>1</code></td>
<td></td>
</tr>
<tr id="ConfigTypeLayout.UINT8">
<td><h3 id="ConfigTypeLayout.UINT8" class="add-link hide-from-toc">UINT8</h3></td>
<td><code>2</code></td>
<td></td>
</tr>
<tr id="ConfigTypeLayout.UINT16">
<td><h3 id="ConfigTypeLayout.UINT16" class="add-link hide-from-toc">UINT16</h3></td>
<td><code>3</code></td>
<td></td>
</tr>
<tr id="ConfigTypeLayout.UINT32">
<td><h3 id="ConfigTypeLayout.UINT32" class="add-link hide-from-toc">UINT32</h3></td>
<td><code>4</code></td>
<td></td>
</tr>
<tr id="ConfigTypeLayout.UINT64">
<td><h3 id="ConfigTypeLayout.UINT64" class="add-link hide-from-toc">UINT64</h3></td>
<td><code>5</code></td>
<td></td>
</tr>
<tr id="ConfigTypeLayout.INT8">
<td><h3 id="ConfigTypeLayout.INT8" class="add-link hide-from-toc">INT8</h3></td>
<td><code>6</code></td>
<td></td>
</tr>
<tr id="ConfigTypeLayout.INT16">
<td><h3 id="ConfigTypeLayout.INT16" class="add-link hide-from-toc">INT16</h3></td>
<td><code>7</code></td>
<td></td>
</tr>
<tr id="ConfigTypeLayout.INT32">
<td><h3 id="ConfigTypeLayout.INT32" class="add-link hide-from-toc">INT32</h3></td>
<td><code>8</code></td>
<td></td>
</tr>
<tr id="ConfigTypeLayout.INT64">
<td><h3 id="ConfigTypeLayout.INT64" class="add-link hide-from-toc">INT64</h3></td>
<td><code>9</code></td>
<td></td>
</tr>
<tr id="ConfigTypeLayout.STRING">
<td><h3 id="ConfigTypeLayout.STRING" class="add-link hide-from-toc">STRING</h3></td>
<td><code>10</code></td>
<td></td>
</tr>
<tr id="ConfigTypeLayout.VECTOR">
<td><h3 id="ConfigTypeLayout.VECTOR" class="add-link hide-from-toc">VECTOR</h3></td>
<td><code>11</code></td>
<td></td>
</tr>
</table>
### DependencyType [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#DependencyType data-text="DependencyType"}
Type: <code>uint32</code>
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=24)*
<p>Describes the type of dependency implied by the capability.</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="DependencyType.STRONG">
<td><h3 id="DependencyType.STRONG" class="add-link hide-from-toc">STRONG</h3></td>
<td><code>1</code></td>
<td><p>A strong dependency which may be required by components that use it.</p>
</td>
</tr>
<tr id="DependencyType.WEAK">
<td><h3 id="DependencyType.WEAK" class="add-link hide-from-toc">WEAK</h3></td>
<td><code>2</code></td>
<td><p>A weak dependency which is allowed to form a cycle. Components that use
a weak dependency must support the dependency being unavailable at
arbitrary times.</p>
</td>
</tr>
<tr id="DependencyType.WEAK_FOR_MIGRATION">
<td><h3 id="DependencyType.WEAK_FOR_MIGRATION" class="add-link hide-from-toc">WEAK_FOR_MIGRATION</h3></td>
<td><code>3</code></td>
<td><p>A weak dependency specifically used to mark cyclic dependencies from
migrated v1 components.</p>
</td>
</tr>
</table>
### Durability [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Durability data-text="Durability"}
Type: <code>uint32</code>
*Defined in [fuchsia.component.decl/collection.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/collection.fidl;l=55)*
<p>The durability of component instances created in a collection.</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="Durability.TRANSIENT">
<td><h3 id="Durability.TRANSIENT" class="add-link hide-from-toc">TRANSIENT</h3></td>
<td><code>2</code></td>
<td><p>An instance exists until either its parent instance is stopped
or it is explicitly destroyed.</p>
</td>
</tr>
<tr id="Durability.SINGLE_RUN">
<td><h3 id="Durability.SINGLE_RUN" class="add-link hide-from-toc">SINGLE_RUN</h3></td>
<td><code>3</code></td>
<td><p>An instance is started upon creation and is immediately destroyed when
it stops.</p>
</td>
</tr>
</table>
### EnvironmentExtends [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#EnvironmentExtends data-text="EnvironmentExtends"}
Type: <code>uint32</code>
*Defined in [fuchsia.component.decl/environment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/environment.fidl;l=43)*
<p>Specifies how a declared environment's initial set of properties are assigned.</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="EnvironmentExtends.NONE">
<td><h3 id="EnvironmentExtends.NONE" class="add-link hide-from-toc">NONE</h3></td>
<td><code>0</code></td>
<td><p>The environment has no initial set of properties.</p>
</td>
</tr>
<tr id="EnvironmentExtends.REALM">
<td><h3 id="EnvironmentExtends.REALM" class="add-link hide-from-toc">REALM</h3></td>
<td><code>1</code></td>
<td><p>The environment's initial set of properties are inherited from its realm.
Inherited properties include any fields defined in <code>EnvironmentDecl</code>.</p>
</td>
</tr>
</table>
### OnTerminate [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#OnTerminate data-text="OnTerminate"}
Type: <code>uint32</code>
*Defined in [fuchsia.component.decl/child.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/child.fidl;l=51)*
<p>Describes the action to take if this component instance terminates
unexpectedly.</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="OnTerminate.NONE">
<td><h3 id="OnTerminate.NONE" class="add-link hide-from-toc">NONE</h3></td>
<td><code>0</code></td>
<td><p>No action, the default</p>
</td>
</tr>
<tr id="OnTerminate.REBOOT">
<td><h3 id="OnTerminate.REBOOT" class="add-link hide-from-toc">REBOOT</h3></td>
<td><code>1</code></td>
<td><p>Trigger a graceful system reboot if the component terminates for any
reason. This is a specialized feature gated by Component Framework
security policy.</p>
</td>
</tr>
</table>
### StartupMode [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#StartupMode data-text="StartupMode"}
Type: <code>uint32</code>
*Defined in [fuchsia.component.decl/child.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/child.fidl;l=40)*
<p>Describes under what conditions the component may be started.</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="StartupMode.LAZY">
<td><h3 id="StartupMode.LAZY" class="add-link hide-from-toc">LAZY</h3></td>
<td><code>0</code></td>
<td><p>Start component instance only when another instance binds to it.</p>
</td>
</tr>
<tr id="StartupMode.EAGER">
<td><h3 id="StartupMode.EAGER" class="add-link hide-from-toc">EAGER</h3></td>
<td><code>1</code></td>
<td><p>Start component instance as soon as parent starts. This mode is only
supported for statically declared children -- a dynamic instance may only be
started by binding to it.</p>
</td>
</tr>
</table>
### StorageId [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#StorageId data-text="StorageId"}
Type: <code>uint32</code>
*Defined in [fuchsia.component.decl/capability.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/capability.fidl;l=90)*
<p>Declares which identifier to use to key a component's isolated storage
directory.</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="StorageId.STATIC_INSTANCE_ID">
<td><h3 id="StorageId.STATIC_INSTANCE_ID" class="add-link hide-from-toc">STATIC_INSTANCE_ID</h3></td>
<td><code>1</code></td>
<td><p>Isolated storage directories are keyed using a component's instance ID
specified in the component ID index. Components which are not listed in
the index cannot use or open this storage capability.</p>
</td>
</tr>
<tr id="StorageId.STATIC_INSTANCE_ID_OR_MONIKER">
<td><h3 id="StorageId.STATIC_INSTANCE_ID_OR_MONIKER" class="add-link hide-from-toc">STATIC_INSTANCE_ID_OR_MONIKER</h3></td>
<td><code>2</code></td>
<td><p>Isolated storage directories are keyed using a component's instance ID
if one is specified in the component ID index. Otherwise, a component's
relative moniker from the storage capability is used to key its isolated
storage directory.</p>
</td>
</tr>
</table>
## **TABLES**
### Child {#Child data-text="Child"}
*Defined in [fuchsia.component.decl/child.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/child.fidl;l=9)*
<p>Statically declares a child component instance.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Child.name">
<td><h3 id="Child.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#child_name'>child_name</a></code>
</td>
<td><p>(Required) The name assigned to the child by its parent.</p>
<p>Must be non-empty, unique among all siblings, and contain only the
following characters: [a-z0-9-_.].</p>
</td>
</tr>
<tr id="Child.url">
<td><h3 id="Child.url" class="add-link hide-from-toc">2</h3></td>
<td><code>url</code></td>
<td>
<code><a class='link' href='../fuchsia.url/'>fuchsia.url</a>/<a class='link' href='../fuchsia.url/#Url'>Url</a></code>
</td>
<td><p>(Required) The child component's URL.</p>
<p>Must be non-empty and a well-formed URL.</p>
</td>
</tr>
<tr id="Child.startup">
<td><h3 id="Child.startup" class="add-link hide-from-toc">3</h3></td>
<td><code>startup</code></td>
<td>
<code><a class='link' href='#StartupMode'>StartupMode</a></code>
</td>
<td><p>(Required) The startup mode for the component instance.</p>
<p>Must be set.</p>
</td>
</tr>
<tr id="Child.environment">
<td><h3 id="Child.environment" class="add-link hide-from-toc">4</h3></td>
<td><code>environment</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Optional) The environment assigned to this child.</p>
<p>May be unset, in which case the child will inherit the parent component's
environment. If set, the name must reference an environment defined in
the <code>ComponentDecl</code> and it must contain only the following characters:
[a-z0-9-_.].</p>
</td>
</tr>
<tr id="Child.on_terminate">
<td><h3 id="Child.on_terminate" class="add-link hide-from-toc">5</h3></td>
<td><code>on_terminate</code></td>
<td>
<code><a class='link' href='#OnTerminate'>OnTerminate</a></code>
</td>
<td><p>(Optional, defaults to <code>NONE</code>) The action to take if this component
instance terminates unexpectedly.</p>
</td>
</tr>
</table>
### Collection {#Collection data-text="Collection"}
*Defined in [fuchsia.component.decl/collection.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/collection.fidl;l=7)*
<p>Statically declares a component instance collection.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Collection.name">
<td><h3 id="Collection.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of the collection. Instances created in the
collection are scoped to this name.</p>
</td>
</tr>
<tr id="Collection.durability">
<td><h3 id="Collection.durability" class="add-link hide-from-toc">2</h3></td>
<td><code>durability</code></td>
<td>
<code><a class='link' href='#Durability'>Durability</a></code>
</td>
<td><p>(Required) The durability of instances in the collection.</p>
</td>
</tr>
<tr id="Collection.environment">
<td><h3 id="Collection.environment" class="add-link hide-from-toc">3</h3></td>
<td><code>environment</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Optional) The environment assigned to child instances in this
collection.</p>
<p>May be unset, in which case children in this collection will inherit the
parent component's environment. If set, the name must reference an
environment defined in the <code>ComponentDecl</code> and it must contain only the
following characters: [a-z0-9-_.].</p>
</td>
</tr>
<tr id="Collection.allowed_offers">
<td><h3 id="Collection.allowed_offers" class="add-link hide-from-toc">4</h3></td>
<td><code>allowed_offers</code></td>
<td>
<code><a class='link' href='#AllowedOffers'>AllowedOffers</a></code>
</td>
<td><p>(Optional, defaults to <code>STATIC_ONLY</code>) The kinds of offers that can
target the child instances in this collection.</p>
<p>Only components using the <code>dynamic_offers</code> restricted feature may set
this field.</p>
</td>
</tr>
<tr id="Collection.allow_long_names">
<td><h3 id="Collection.allow_long_names" class="add-link hide-from-toc">5</h3></td>
<td><code>allow_long_names</code></td>
<td>
<code>bool</code>
</td>
<td><p>(Optional, defaults to <code>false</code>) Whether child instances in this
collection can have names longer than the default length limit of 100.</p>
<p>Only components using the <code>allow_long_names</code> restricted feature may set
this field.</p>
</td>
</tr>
<tr id="Collection.persistent_storage">
<td><h3 id="Collection.persistent_storage" class="add-link hide-from-toc">6</h3></td>
<td><code>persistent_storage</code></td>
<td>
<code>bool</code>
</td>
<td><p>(Optional) Whether the data in isolated storage used by dynamic child
instances and their descendants will persist after the instances are
destroyed. New dynamic instances inherit the previous instances' data
stores.</p>
<p>This setting can be overridden by a lower-level collection that is a
descendant of a collection that enables/disables this setting.</p>
<p>This setting applies to all storage capabilities consumed by the
collection components and their descendants.</p>
<p>The default is the value inherited from an ancestral collection if set,
otherwise <code>false</code>.</p>
</td>
</tr>
</table>
### Component {#Component data-text="Component"}
*Defined in [fuchsia.component.decl/component.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/component.fidl;l=13)*
<p>A component declaration.</p>
<p>This information is typically encoded in the component manifest (.cm file)
if it has one or may be generated at runtime by a component resolver for
those that don't.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Component.program">
<td><h3 id="Component.program" class="add-link hide-from-toc">1</h3></td>
<td><code>program</code></td>
<td>
<code><a class='link' href='#Program'>Program</a></code>
</td>
<td><p>(Optional) Information about the program to run when the component is executed.
Omitted for non-executable components.</p>
</td>
</tr>
<tr id="Component.uses">
<td><h3 id="Component.uses" class="add-link hide-from-toc">2</h3></td>
<td><code>uses</code></td>
<td>
<code>vector&lt;<a class='link' href='#Use'>Use</a>&gt;</code>
</td>
<td><p>(Optional) List of capabilities used by the component. These consist of
capabilities offered to the component that are installed in its incoming
namespace.</p>
<p>The used capabilities must be unique and non-overlapping.</p>
</td>
</tr>
<tr id="Component.exposes">
<td><h3 id="Component.exposes" class="add-link hide-from-toc">3</h3></td>
<td><code>exposes</code></td>
<td>
<code>vector&lt;<a class='link' href='#Expose'>Expose</a>&gt;</code>
</td>
<td><p>(Optional) List of capabilities exposed by the component. These consist of
capabilities that are made visible to the parent. The parent
may <code>offer</code> these capabilities to its children, but not <code>use</code> them.</p>
<p>The exposed capabilities must be unique and non-overlapping.</p>
</td>
</tr>
<tr id="Component.offers">
<td><h3 id="Component.offers" class="add-link hide-from-toc">4</h3></td>
<td><code>offers</code></td>
<td>
<code>vector&lt;<a class='link' href='#Offer'>Offer</a>&gt;</code>
</td>
<td><p>(Optional) List of capabilities offered to the component's children. These consist
of capabilities that the given children may <code>use</code>, which may come from a
child, the parent, or the component's own outgoing namespace.</p>
<p>The offered capabilities must be unique and non-overlapping.</p>
</td>
</tr>
<tr id="Component.capabilities">
<td><h3 id="Component.capabilities" class="add-link hide-from-toc">5</h3></td>
<td><code>capabilities</code></td>
<td>
<code>vector&lt;<a class='link' href='#Capability'>Capability</a>&gt;</code>
</td>
<td><p>(Optional) List of capabilities defined by the component.</p>
</td>
</tr>
<tr id="Component.children">
<td><h3 id="Component.children" class="add-link hide-from-toc">6</h3></td>
<td><code>children</code></td>
<td>
<code>vector&lt;<a class='link' href='#Child'>Child</a>&gt;</code>
</td>
<td><p>(Optional) The component's statically instantiated children. The children must have
unique names.</p>
</td>
</tr>
<tr id="Component.collections">
<td><h3 id="Component.collections" class="add-link hide-from-toc">7</h3></td>
<td><code>collections</code></td>
<td>
<code>vector&lt;<a class='link' href='#Collection'>Collection</a>&gt;</code>
</td>
<td><p>(Optional) The component's collections. The collections must have unique names.</p>
</td>
</tr>
<tr id="Component.environments">
<td><h3 id="Component.environments" class="add-link hide-from-toc">8</h3></td>
<td><code>environments</code></td>
<td>
<code>vector&lt;<a class='link' href='#Environment'>Environment</a>&gt;</code>
</td>
<td><p>(Optional) List of environments created by this component.
Environments are assigned to children and control aspects of a child component's
runtime.</p>
</td>
</tr>
<tr id="Component.facets">
<td><h3 id="Component.facets" class="add-link hide-from-toc">9</h3></td>
<td><code>facets</code></td>
<td>
<code><a class='link' href='../fuchsia.data/'>fuchsia.data</a>/<a class='link' href='../fuchsia.data/#Dictionary'>Dictionary</a></code>
</td>
<td><p>(Optional) Additional metadata about the component.</p>
</td>
</tr>
<tr id="Component.config">
<td><h3 id="Component.config" class="add-link hide-from-toc">10</h3></td>
<td><code>config</code></td>
<td>
<code><a class='link' href='#ConfigSchema'>ConfigSchema</a></code>
</td>
<td><p>(Optional) The schema of the component's configuration interface.</p>
</td>
</tr>
</table>
### ConfigField {#ConfigField data-text="ConfigField"}
*Defined in [fuchsia.component.decl/config.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/config.fidl;l=39)*
<p>Declares a single config field (key + type)</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="ConfigField.key">
<td><h3 id="ConfigField.key" class="add-link hide-from-toc">1</h3></td>
<td><code>key</code></td>
<td>
<code><a class='link' href='#ConfigKey'>ConfigKey</a></code>
</td>
<td><p>(Required) The identifier for this config field.
This key will be used to match overrides.</p>
</td>
</tr>
<tr id="ConfigField.type">
<td><h3 id="ConfigField.type" class="add-link hide-from-toc">2</h3></td>
<td><code>type</code></td>
<td>
<code><a class='link' href='#ConfigType'>ConfigType</a></code>
</td>
<td><p>(Required) The type of config values. Config values are verified
against this layout at build time and run time.</p>
</td>
</tr>
</table>
### ConfigSchema {#ConfigSchema data-text="ConfigSchema"}
*Defined in [fuchsia.component.decl/config.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/config.fidl;l=21)*
<p>The schema of a component's configuration interface.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="ConfigSchema.fields">
<td><h3 id="ConfigSchema.fields" class="add-link hide-from-toc">1</h3></td>
<td><code>fields</code></td>
<td>
<code>vector&lt;<a class='link' href='#ConfigField'>ConfigField</a>&gt;</code>
</td>
<td><p>(Required) Ordered fields of the component's configuration interface.</p>
</td>
</tr>
<tr id="ConfigSchema.checksum">
<td><h3 id="ConfigSchema.checksum" class="add-link hide-from-toc">2</h3></td>
<td><code>checksum</code></td>
<td>
<code><a class='link' href='#ConfigChecksum'>ConfigChecksum</a></code>
</td>
<td><p>(Required) Checksum over the config declaration.</p>
</td>
</tr>
<tr id="ConfigSchema.value_source">
<td><h3 id="ConfigSchema.value_source" class="add-link hide-from-toc">3</h3></td>
<td><code>value_source</code></td>
<td>
<code><a class='link' href='#ConfigValueSource'>ConfigValueSource</a></code>
</td>
<td><p>(Required) Strategy used to resolve config values.</p>
</td>
</tr>
</table>
### DebugProtocolRegistration {#DebugProtocolRegistration data-text="DebugProtocolRegistration"}
*Defined in [fuchsia.component.decl/environment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/environment.fidl;l=93)*
<p>Registers a protocol in the environment as a debug capability. This makes
it available to any component in the environment that uses it with
<code>source == debug</code>.</p>
<p>To learn more about protocols, see:
https://fuchsia.dev/fuchsia-src/glossary#protocol</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="DebugProtocolRegistration.source">
<td><h3 id="DebugProtocolRegistration.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>parent</code>, <code>self</code>, or <code>child</code>.</p>
</td>
</tr>
<tr id="DebugProtocolRegistration.source_name">
<td><h3 id="DebugProtocolRegistration.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the protocol being offered.</p>
</td>
</tr>
<tr id="DebugProtocolRegistration.target_name">
<td><h3 id="DebugProtocolRegistration.target_name" class="add-link hide-from-toc">3</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name by which the capability is being offered.</p>
</td>
</tr>
</table>
### Directory {#Directory data-text="Directory"}
*Defined in [fuchsia.component.decl/capability.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/capability.fidl;l=51)*
<p>Declares a directory capability backed by this component.</p>
<p>To learn more about directories, see:
https://fuchsia.dev/fuchsia-src/glossary#directory</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Directory.name">
<td><h3 id="Directory.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of this directory.</p>
</td>
</tr>
<tr id="Directory.source_path">
<td><h3 id="Directory.source_path" class="add-link hide-from-toc">2</h3></td>
<td><code>source_path</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Required) The path to the directory in the component's outgoing
directory.</p>
</td>
</tr>
<tr id="Directory.rights">
<td><h3 id="Directory.rights" class="add-link hide-from-toc">3</h3></td>
<td><code>rights</code></td>
<td>
<code><a class='link' href='../fuchsia.io/'>fuchsia.io</a>/<a class='link' href='../fuchsia.io/#Rights'>Rights</a></code>
</td>
<td><p>(Required) The maximum rights that can be set by a component using this
directory.</p>
</td>
</tr>
</table>
### Environment {#Environment data-text="Environment"}
*Defined in [fuchsia.component.decl/environment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/environment.fidl;l=7)*
<p>Declares an environment which configures a realm.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Environment.name">
<td><h3 id="Environment.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of this environment.</p>
</td>
</tr>
<tr id="Environment.extends">
<td><h3 id="Environment.extends" class="add-link hide-from-toc">2</h3></td>
<td><code>extends</code></td>
<td>
<code><a class='link' href='#EnvironmentExtends'>EnvironmentExtends</a></code>
</td>
<td><p>(Required) Specifies how the initial state of this environment is
constructed.</p>
</td>
</tr>
<tr id="Environment.runners">
<td><h3 id="Environment.runners" class="add-link hide-from-toc">3</h3></td>
<td><code>runners</code></td>
<td>
<code>vector&lt;<a class='link' href='#RunnerRegistration'>RunnerRegistration</a>&gt;</code>
</td>
<td><p>(Optional) List of runners available in this environment.</p>
<p>This list determines the total set of runners that are available for any
component in the environment to use.</p>
</td>
</tr>
<tr id="Environment.resolvers">
<td><h3 id="Environment.resolvers" class="add-link hide-from-toc">4</h3></td>
<td><code>resolvers</code></td>
<td>
<code>vector&lt;<a class='link' href='#ResolverRegistration'>ResolverRegistration</a>&gt;</code>
</td>
<td><p>(Optional) List of component resolvers and the URL schemes they are
registered to resolve. These registrations determine how components are
resolved in the realm. If the component URL scheme does not match any of
these resolvers, URL resolution is delegated to the parent environment,
if this environment <code>extends</code> from <code>REALM</code>.</p>
</td>
</tr>
<tr id="Environment.debug_capabilities">
<td><h3 id="Environment.debug_capabilities" class="add-link hide-from-toc">5</h3></td>
<td><code>debug_capabilities</code></td>
<td>
<code>vector&lt;<a class='link' href='#DebugRegistration'>DebugRegistration</a>&gt;</code>
</td>
<td><p>(Optional) Expose capabilties to debug section when component manager
allows it.</p>
<p>These capabilities are accessible to any component in the environment
with a <code>use</code> declaration with <code>source == debug</code>. Only capabilities
intended to support development should be declared here, and they are
only allowed if explicitly included in the component manager allowlist.</p>
</td>
</tr>
<tr id="Environment.stop_timeout_ms">
<td><h3 id="Environment.stop_timeout_ms" class="add-link hide-from-toc">6</h3></td>
<td><code>stop_timeout_ms</code></td>
<td>
<code>uint32</code>
</td>
<td><p>(Optional) The duration in milliseconds that the component will have to
stop before it is killed.</p>
</td>
</tr>
</table>
### Event {#Event data-text="Event"}
*Defined in [fuchsia.component.decl/capability.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/capability.fidl;l=132)*
<p>Declares an event capability which component instances may subscribe to.
This type cannot be used in <code>fuchsia.component.decl.Component</code>. It is only
used for the framework's built-in capabilities declared in
<code>internal.Config</code>.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Event.name">
<td><h3 id="Event.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of this event.</p>
<p>Must be unique among built-in capabilities.</p>
</td>
</tr>
</table>
### EventStream {#EventStream data-text="EventStream"}
*Defined in [fuchsia.component.decl/capability.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/capability.fidl;l=145)*
<p>Declares an event_stream capability</p>
<p>This type cannot be used in <code>fuchsia.component.decl.Component</code>. It is only
used for the framework's built-in capabilities declared in
<code>internal.Config</code>.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 8</span></div>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="EventStream.name">
<td><h3 id="EventStream.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of this event stream.</p>
<p>Must be unique among built-in capabilities.</p>
</td>
</tr>
</table>
### EventSubscription {#EventSubscription data-text="EventSubscription"}
*Defined in [fuchsia.component.decl/events.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/events.fidl;l=10)*
<p>Indicates the event name to subscribe to with a given event mode.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="EventSubscription.event_name">
<td><h3 id="EventSubscription.event_name" class="add-link hide-from-toc">1</h3></td>
<td><code>event_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The event names to subscribe to.</p>
</td>
</tr>
</table>
### ExposeDirectory {#ExposeDirectory data-text="ExposeDirectory"}
*Defined in [fuchsia.component.decl/expose.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/expose.fidl;l=76)*
<p>Declares a directory exposed to a component's containing realm, such as a
directory exposed by the component or one of its children at runtime.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="ExposeDirectory.source">
<td><h3 id="ExposeDirectory.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>self</code> or <code>child</code>.</p>
</td>
</tr>
<tr id="ExposeDirectory.source_name">
<td><h3 id="ExposeDirectory.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the directory, by which it was presented to
this component.</p>
</td>
</tr>
<tr id="ExposeDirectory.target">
<td><h3 id="ExposeDirectory.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The destination to which the directory is exposed: either the
component's realm or the framework.</p>
</td>
</tr>
<tr id="ExposeDirectory.target_name">
<td><h3 id="ExposeDirectory.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name by which the capability is being exposed.</p>
</td>
</tr>
<tr id="ExposeDirectory.rights">
<td><h3 id="ExposeDirectory.rights" class="add-link hide-from-toc">5</h3></td>
<td><code>rights</code></td>
<td>
<code><a class='link' href='../fuchsia.io/'>fuchsia.io</a>/<a class='link' href='../fuchsia.io/#Rights'>Rights</a></code>
</td>
<td><p>(Optional) The maximum rights that can be set by a component using this
directory. If unset, the rights are inherited from <code>source</code>.</p>
</td>
</tr>
<tr id="ExposeDirectory.subdir">
<td><h3 id="ExposeDirectory.subdir" class="add-link hide-from-toc">6</h3></td>
<td><code>subdir</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Optional) The subdirectory of this directory to expose instead of the
root.</p>
</td>
</tr>
<tr id="ExposeDirectory.availability">
<td><h3 id="ExposeDirectory.availability" class="add-link hide-from-toc">7</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
See <a class='link' href='#Availability'>Availability</a>.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 11</span></div>
</td>
</tr>
</table>
### ExposeEventStream {#ExposeEventStream data-text="ExposeEventStream"}
*Defined in [fuchsia.component.decl/expose.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/expose.fidl;l=155)*
<p>Declares an event stream exposed to a component's containing realm, such as
an event stream exposed by the component or one of its children at runtime.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="ExposeEventStream.source">
<td><h3 id="ExposeEventStream.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>child</code>, or <code>framework</code>.</p>
</td>
</tr>
<tr id="ExposeEventStream.source_name">
<td><h3 id="ExposeEventStream.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of the event stream</p>
</td>
</tr>
<tr id="ExposeEventStream.scope">
<td><h3 id="ExposeEventStream.scope" class="add-link hide-from-toc">3</h3></td>
<td><code>scope</code></td>
<td>
<code>vector&lt;<a class='link' href='#Ref'>Ref</a>&gt;</code>
</td>
<td><p>(Required) When an event is exposed from framework, the scope is
required and allows one to define the child (or array of children) which
the event is about.</p>
</td>
</tr>
<tr id="ExposeEventStream.target">
<td><h3 id="ExposeEventStream.target" class="add-link hide-from-toc">4</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The destination to which the event stream is exposed.</p>
</td>
</tr>
<tr id="ExposeEventStream.target_name">
<td><h3 id="ExposeEventStream.target_name" class="add-link hide-from-toc">5</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name by which the capability is being exposed.</p>
</td>
</tr>
<tr id="ExposeEventStream.availability">
<td><h3 id="ExposeEventStream.availability" class="add-link hide-from-toc">6</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
See <a class='link' href='#Availability'>Availability</a>.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 11</span></div>
</td>
</tr>
</table>
### ExposeProtocol {#ExposeProtocol data-text="ExposeProtocol"}
*Defined in [fuchsia.component.decl/expose.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/expose.fidl;l=52)*
<p>Declares a protocol exposed to a component's containing realm, such as
a protocol exposed by the component or one of its children at runtime.</p>
<p>To learn more about protocols, see:
https://fuchsia.dev/fuchsia-src/glossary#protocol</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="ExposeProtocol.source">
<td><h3 id="ExposeProtocol.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>self</code> or <code>child</code>.</p>
</td>
</tr>
<tr id="ExposeProtocol.source_name">
<td><h3 id="ExposeProtocol.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the protocol, by which it was presented to
this component.</p>
</td>
</tr>
<tr id="ExposeProtocol.target">
<td><h3 id="ExposeProtocol.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The destination to which the protocol is exposed: either the
component's realm or the framework.</p>
</td>
</tr>
<tr id="ExposeProtocol.target_name">
<td><h3 id="ExposeProtocol.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name by which the capability is being exposed.</p>
</td>
</tr>
<tr id="ExposeProtocol.availability">
<td><h3 id="ExposeProtocol.availability" class="add-link hide-from-toc">5</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
See <a class='link' href='#Availability'>Availability</a>.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 11</span></div>
</td>
</tr>
</table>
### ExposeResolver {#ExposeResolver data-text="ExposeResolver"}
*Defined in [fuchsia.component.decl/expose.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/expose.fidl;l=132)*
<p>Declares a resolver exposed to a component's containing realm, such as a
resolver exposed by the component or one of its children at runtime.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="ExposeResolver.source">
<td><h3 id="ExposeResolver.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>self</code> or <code>child</code>.</p>
</td>
</tr>
<tr id="ExposeResolver.source_name">
<td><h3 id="ExposeResolver.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of the resolver, by which it was presented to this
component.</p>
</td>
</tr>
<tr id="ExposeResolver.target">
<td><h3 id="ExposeResolver.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The destination to which the resolver is exposed</p>
</td>
</tr>
<tr id="ExposeResolver.target_name">
<td><h3 id="ExposeResolver.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name by which the capability is being exposed.</p>
</td>
</tr>
<tr id="ExposeResolver.availability">
<td><h3 id="ExposeResolver.availability" class="add-link hide-from-toc">5</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
See <a class='link' href='#Availability'>Availability</a>.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 11</span></div>
</td>
</tr>
</table>
### ExposeRunner {#ExposeRunner data-text="ExposeRunner"}
*Defined in [fuchsia.component.decl/expose.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/expose.fidl;l=108)*
<p>Declares a runner exposed to a component's containing realm, such as a
runner exposed by the component or one of its children at runtime.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="ExposeRunner.source">
<td><h3 id="ExposeRunner.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>self</code> or <code>child</code>.</p>
</td>
</tr>
<tr id="ExposeRunner.source_name">
<td><h3 id="ExposeRunner.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of the runner, by which it was presented to this
component.</p>
</td>
</tr>
<tr id="ExposeRunner.target">
<td><h3 id="ExposeRunner.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The destination to which the runner is exposed: either the
component's realm or the framework.</p>
</td>
</tr>
<tr id="ExposeRunner.target_name">
<td><h3 id="ExposeRunner.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name by which the capability is being exposed.</p>
</td>
</tr>
<tr id="ExposeRunner.availability">
<td><h3 id="ExposeRunner.availability" class="add-link hide-from-toc">5</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
See <a class='link' href='#Availability'>Availability</a>.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 11</span></div>
</td>
</tr>
</table>
### ExposeService {#ExposeService data-text="ExposeService"}
*Defined in [fuchsia.component.decl/expose.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/expose.fidl;l=25)*
<p>Declares a service exposed to a component's containing realm, such as a
service exposed by the component or one of its children at runtime.</p>
<p>To learn more about services, see:
https://fuchsia.dev/fuchsia-src/glossary#service</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="ExposeService.source">
<td><h3 id="ExposeService.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>self</code> or <code>child</code>.</p>
</td>
</tr>
<tr id="ExposeService.source_name">
<td><h3 id="ExposeService.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the service, by which it was presented to
this component.</p>
</td>
</tr>
<tr id="ExposeService.target">
<td><h3 id="ExposeService.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The destination to which the service is exposed: either the
component's realm or the framework.</p>
</td>
</tr>
<tr id="ExposeService.target_name">
<td><h3 id="ExposeService.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name by which the capability is being exposed.</p>
</td>
</tr>
<tr id="ExposeService.availability">
<td><h3 id="ExposeService.availability" class="add-link hide-from-toc">5</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
See <a class='link' href='#Availability'>Availability</a>.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 11</span></div>
</td>
</tr>
</table>
### OfferDirectory {#OfferDirectory data-text="OfferDirectory"}
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=164)*
<p>Declares a directory offered by a component to one of its children, which
may have been offered by the component's containing realm, the component
itself, or one of its other children.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="OfferDirectory.source">
<td><h3 id="OfferDirectory.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>parent</code>, <code>self</code>, <code>child</code>, <code>framework</code>, or <code>void</code>. If
set to <code>void</code>, then the target must offer or use the capability with
<code>optional</code> availability.</p>
</td>
</tr>
<tr id="OfferDirectory.source_name">
<td><h3 id="OfferDirectory.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the directory being offered.</p>
</td>
</tr>
<tr id="OfferDirectory.target">
<td><h3 id="OfferDirectory.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) Reference to the target of the capability. Must be <code>child</code> or
<code>collection</code>.</p>
</td>
</tr>
<tr id="OfferDirectory.target_name">
<td><h3 id="OfferDirectory.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name by which the capability is being offered.</p>
</td>
</tr>
<tr id="OfferDirectory.rights">
<td><h3 id="OfferDirectory.rights" class="add-link hide-from-toc">5</h3></td>
<td><code>rights</code></td>
<td>
<code><a class='link' href='../fuchsia.io/'>fuchsia.io</a>/<a class='link' href='../fuchsia.io/#Rights'>Rights</a></code>
</td>
<td><p>(Optional) The maximum rights that can be set by a component using this
directory. IF unset, the rights are inherited from <code>source</code>.</p>
</td>
</tr>
<tr id="OfferDirectory.subdir">
<td><h3 id="OfferDirectory.subdir" class="add-link hide-from-toc">6</h3></td>
<td><code>subdir</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Optional) The subdirectory of this directory to offer instead of the
root. Optional.</p>
</td>
</tr>
<tr id="OfferDirectory.dependency_type">
<td><h3 id="OfferDirectory.dependency_type" class="add-link hide-from-toc">7</h3></td>
<td><code>dependency_type</code></td>
<td>
<code><a class='link' href='#DependencyType'>DependencyType</a></code>
</td>
<td><p>(Required) The dependency type this offer represents. A component which
receives a weak offer must support the offered capability being
unavailable at any point.</p>
</td>
</tr>
<tr id="OfferDirectory.availability">
<td><h3 id="OfferDirectory.availability" class="add-link hide-from-toc">8</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the target may use or offer the capability with
either <code>required</code> or <code>optional</code> availability. If set to <code>optional</code>, the
target must use or offer the capability with <code>optional</code> availability.
The <code>same_as_target</code> value causes this offer's availability to match the
availability set in the target.</p>
</td>
</tr>
</table>
### OfferEvent {#OfferEvent data-text="OfferEvent"}
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=271)*
<p>Declares an event offered by a component.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="OfferEvent.source">
<td><h3 id="OfferEvent.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>parent</code> or <code>void</code>. If set to <code>void</code>, then the target
must offer or use the capability with <code>optional</code> availability.</p>
</td>
</tr>
<tr id="OfferEvent.source_name">
<td><h3 id="OfferEvent.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name of the event being offered.</p>
</td>
</tr>
<tr id="OfferEvent.target">
<td><h3 id="OfferEvent.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) Reference to the target of the event. Must be <code>child</code> or
<code>collection</code>.</p>
</td>
</tr>
<tr id="OfferEvent.target_name">
<td><h3 id="OfferEvent.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name under which the event is being offered.</p>
</td>
</tr>
<tr id="OfferEvent.filter">
<td><h3 id="OfferEvent.filter" class="add-link hide-from-toc">5</h3></td>
<td><code>filter</code></td>
<td>
<code><a class='link' href='../fuchsia.data/'>fuchsia.data</a>/<a class='link' href='../fuchsia.data/#Dictionary'>Dictionary</a></code>
</td>
<td><p>(Optional) Filter for the event. The structure of the filter depends on
the event type. May be absent for some events. (TODO: which ones?)</p>
</td>
</tr>
<tr id="OfferEvent.availability">
<td><h3 id="OfferEvent.availability" class="add-link hide-from-toc">6</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the target may use or offer the capability with
either <code>required</code> or <code>optional</code> availability. If set to <code>optional</code>, the
target must use or offer the capability with <code>optional</code> availability.
The <code>same_as_target</code> value causes this offer's availability to match the
availability set in the target.</p>
</td>
</tr>
</table>
### OfferEventStream {#OfferEventStream data-text="OfferEventStream"}
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=301)*
<p>Declares an event stream offered by a component.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="OfferEventStream.source">
<td><h3 id="OfferEventStream.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>parent</code>, <code>framework</code>, <code>child</code>, or <code>void</code>. If set to
<code>void</code>, then the target must offer or use the capability with <code>optional</code>
availability.</p>
</td>
</tr>
<tr id="OfferEventStream.source_name">
<td><h3 id="OfferEventStream.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name of the event being offered.</p>
</td>
</tr>
<tr id="OfferEventStream.scope">
<td><h3 id="OfferEventStream.scope" class="add-link hide-from-toc">3</h3></td>
<td><code>scope</code></td>
<td>
<code>vector&lt;<a class='link' href='#Ref'>Ref</a>&gt;</code>
</td>
<td><p>(Optional) When an event is offered from framework, the scope is
required and allows one to define the child (or array of children) which
the event is about. When the event is offered from parent, the scope can
be used to downscope the event to a certain child scope, otherwise the
event will carry the scope coming from the parent.</p>
</td>
</tr>
<tr id="OfferEventStream.target">
<td><h3 id="OfferEventStream.target" class="add-link hide-from-toc">4</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The destination to which the event stream is offered.</p>
</td>
</tr>
<tr id="OfferEventStream.target_name">
<td><h3 id="OfferEventStream.target_name" class="add-link hide-from-toc">5</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name under which the event stream is being offered.</p>
</td>
</tr>
<tr id="OfferEventStream.filter">
<td><h3 id="OfferEventStream.filter" class="add-link hide-from-toc">6</h3></td>
<td><code>filter</code></td>
<td>
<code><a class='link' href='../fuchsia.data/'>fuchsia.data</a>/<a class='link' href='../fuchsia.data/#Dictionary'>Dictionary</a></code>
</td>
<td><p>(Optional) Filter for the event stream. Only present for DirectoryReady
events and CapabilityRequested events</p>
</td>
</tr>
<tr id="OfferEventStream.availability">
<td><h3 id="OfferEventStream.availability" class="add-link hide-from-toc">7</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the target may use or offer the capability with
either <code>required</code> or <code>optional</code> availability. If set to <code>optional</code>, the
target must use or offer the capability with <code>optional</code> availability.
The <code>same_as_target</code> value causes this offer's availability to match the
availability set in the target.</p>
</td>
</tr>
</table>
### OfferProtocol {#OfferProtocol data-text="OfferProtocol"}
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=131)*
<p>Declares a protocol offered by a component to one of its children,
which may have been offered by the component's containing realm, the
component itself, or one of its other children.</p>
<p>To learn more about protocols, see:
https://fuchsia.dev/fuchsia-src/glossary#protocol</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="OfferProtocol.source">
<td><h3 id="OfferProtocol.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>parent</code>, <code>self</code>, <code>child</code>, <code>framework</code>, or <code>void</code>. If
set to <code>void</code>, then the target must offer or use the capability with
<code>optional</code> availability.</p>
</td>
</tr>
<tr id="OfferProtocol.source_name">
<td><h3 id="OfferProtocol.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the protocol being offered.</p>
</td>
</tr>
<tr id="OfferProtocol.target">
<td><h3 id="OfferProtocol.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) Reference to the target. Must be <code>child</code> or <code>collection</code>.</p>
</td>
</tr>
<tr id="OfferProtocol.target_name">
<td><h3 id="OfferProtocol.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name by which the capability is being offered.</p>
</td>
</tr>
<tr id="OfferProtocol.dependency_type">
<td><h3 id="OfferProtocol.dependency_type" class="add-link hide-from-toc">5</h3></td>
<td><code>dependency_type</code></td>
<td>
<code><a class='link' href='#DependencyType'>DependencyType</a></code>
</td>
<td><p>(Required) The dependency type this offer represents. A component which
receives a weak offer must support the offered capability being
unavailable at any point.</p>
</td>
</tr>
<tr id="OfferProtocol.availability">
<td><h3 id="OfferProtocol.availability" class="add-link hide-from-toc">6</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the target may use or offer the capability with
either <code>required</code> or <code>optional</code> availability. If set to <code>optional</code>, the
target must use or offer the capability with <code>optional</code> availability.
The <code>same_as_target</code> value causes this offer's availability to match the
availability set in the target.</p>
</td>
</tr>
</table>
### OfferResolver {#OfferResolver data-text="OfferResolver"}
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=254)*
<p>Declares a resolver capability offered by a component to one of its children, which
may have been offered by the component's containing realm, the component itself,
or one of its other children.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="OfferResolver.source">
<td><h3 id="OfferResolver.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>parent</code>, <code>self</code>, or <code>child</code>.</p>
</td>
</tr>
<tr id="OfferResolver.source_name">
<td><h3 id="OfferResolver.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name of the resolver being offered.</p>
</td>
</tr>
<tr id="OfferResolver.target">
<td><h3 id="OfferResolver.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) Reference to the target of the capability. Must be <code>child</code> or
<code>collection</code>.</p>
</td>
</tr>
<tr id="OfferResolver.target_name">
<td><h3 id="OfferResolver.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name under which the capability is being offered.</p>
</td>
</tr>
</table>
### OfferRunner {#OfferRunner data-text="OfferRunner"}
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=235)*
<p>Declares a runner offered by a component to one of its children, which may
have been offered by the component's containing realm, the component itself,
or one of its other children.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="OfferRunner.source">
<td><h3 id="OfferRunner.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>parent</code>, <code>self</code>, or <code>child</code>.</p>
</td>
</tr>
<tr id="OfferRunner.source_name">
<td><h3 id="OfferRunner.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name of the runner being offered.</p>
</td>
</tr>
<tr id="OfferRunner.target">
<td><h3 id="OfferRunner.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) Reference to the target of the capability. Must be <code>child</code> or
<code>collection</code>.</p>
</td>
</tr>
<tr id="OfferRunner.target_name">
<td><h3 id="OfferRunner.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name under which the capability is being offered.</p>
</td>
</tr>
</table>
### OfferService {#OfferService data-text="OfferService"}
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=91)*
<p>Declares a service offered by a component to one of its children, which may
have been offered by the component's containing realm, the component itself,
or one of its other children.</p>
<p>To learn more about services, see:
https://fuchsia.dev/fuchsia-src/glossary#service</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="OfferService.source">
<td><h3 id="OfferService.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>parent</code>, <code>self</code>, <code>child</code>, or <code>void</code>. If set to <code>void</code>,
then the target must offer or use the capability with <code>optional</code>
availability.</p>
</td>
</tr>
<tr id="OfferService.source_name">
<td><h3 id="OfferService.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the service being offered.</p>
</td>
</tr>
<tr id="OfferService.target">
<td><h3 id="OfferService.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) Reference to the target. Must be <code>child</code> or <code>collection</code>.</p>
</td>
</tr>
<tr id="OfferService.target_name">
<td><h3 id="OfferService.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name under which the capability is being offered.</p>
</td>
</tr>
<tr id="OfferService.source_instance_filter">
<td><h3 id="OfferService.source_instance_filter" class="add-link hide-from-toc">5</h3></td>
<td><code>source_instance_filter</code></td>
<td>
<code>vector&lt;string&gt;</code>
</td>
<td><p>(Optional) The list of allow listed instances to be offered. Instances
of the service not in this list will not be accessible by the target
component. If this is not set that means all instances from the source
service are offered.</p>
</td>
</tr>
<tr id="OfferService.renamed_instances">
<td><h3 id="OfferService.renamed_instances" class="add-link hide-from-toc">6</h3></td>
<td><code>renamed_instances</code></td>
<td>
<code>vector&lt;<a class='link' href='#NameMapping'>NameMapping</a>&gt;</code>
</td>
<td><p>(Optional) List of renamed service instances.</p>
</td>
</tr>
<tr id="OfferService.availability">
<td><h3 id="OfferService.availability" class="add-link hide-from-toc">7</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the target may use or offer the capability with
either <code>required</code> or <code>optional</code> availability. If set to <code>optional</code>, the
target must use or offer the capability with <code>optional</code> availability.
The <code>same_as_target</code> value causes this offer's availability to match the
availability set in the target.</p>
</td>
</tr>
</table>
### OfferStorage {#OfferStorage data-text="OfferStorage"}
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=206)*
<p>Declares a storage capability offered by a component to one of its children,
such as meta storage offered by the component's containing realm or cache
storage offered by the component itself.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="OfferStorage.source_name">
<td><h3 id="OfferStorage.source_name" class="add-link hide-from-toc">1</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of the storage capability being offered</p>
</td>
</tr>
<tr id="OfferStorage.source">
<td><h3 id="OfferStorage.source" class="add-link hide-from-toc">2</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>parent</code>, <code>storage</code>, or <code>void</code>. If set to <code>void</code>, then
the target must offer or use the capability with <code>optional</code>
availability.</p>
</td>
</tr>
<tr id="OfferStorage.target">
<td><h3 id="OfferStorage.target" class="add-link hide-from-toc">3</h3></td>
<td><code>target</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) Reference to the target of the capability. Must be <code>child</code> or
<code>collection</code>.</p>
</td>
</tr>
<tr id="OfferStorage.target_name">
<td><h3 id="OfferStorage.target_name" class="add-link hide-from-toc">4</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name the storage capability is being offered as</p>
</td>
</tr>
<tr id="OfferStorage.availability">
<td><h3 id="OfferStorage.availability" class="add-link hide-from-toc">5</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the target may use or offer the capability with
either <code>required</code> or <code>optional</code> availability. If set to <code>optional</code>, the
target must use or offer the capability with <code>optional</code> availability.
The <code>same_as_target</code> value causes this offer's availability to match the
availability set in the target.</p>
</td>
</tr>
</table>
### Program {#Program data-text="Program"}
*Defined in [fuchsia.component.decl/program.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/program.fidl;l=15)*
<p>A program declaration.</p>
<p>This declaration is set by executable components to designate the runner to
use and pass runner-specific program information to it.</p>
<p>To learn more about runners, see:
https://fuchsia.dev/fuchsia-src/glossary#runner</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Program.runner">
<td><h3 id="Program.runner" class="add-link hide-from-toc">1</h3></td>
<td><code>runner</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of the runner to use to run the component. Must
match a <code>RunnerRegistration</code> in the component's environment.</p>
</td>
</tr>
<tr id="Program.info">
<td><h3 id="Program.info" class="add-link hide-from-toc">2</h3></td>
<td><code>info</code></td>
<td>
<code><a class='link' href='../fuchsia.data/'>fuchsia.data</a>/<a class='link' href='../fuchsia.data/#Dictionary'>Dictionary</a></code>
</td>
<td><p>(Required) Information about the program to run when the component is
executed. The component manager provides the contents of this dictionary
to the runner when executing this program.</p>
<p>For instance, this might contain a path to the program's executable
image, or program arguments.</p>
<ul>
<li>The keys represent namespaced properties, delimited by &quot;.&quot;.</li>
<li>Properties may be nested in values, but only in the case of an object
vector.</li>
</ul>
</td>
</tr>
</table>
### Protocol {#Protocol data-text="Protocol"}
*Defined in [fuchsia.component.decl/capability.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/capability.fidl;l=38)*
<p>Declares a protocol capability backed by this component.</p>
<p>To learn more about protocols, see:
https://fuchsia.dev/fuchsia-src/glossary#protocol</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Protocol.name">
<td><h3 id="Protocol.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of this protocol.</p>
</td>
</tr>
<tr id="Protocol.source_path">
<td><h3 id="Protocol.source_path" class="add-link hide-from-toc">2</h3></td>
<td><code>source_path</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Required) The path to the protocol in the component's outgoing
directory.</p>
</td>
</tr>
</table>
### Resolver {#Resolver data-text="Resolver"}
*Defined in [fuchsia.component.decl/capability.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/capability.fidl;l=117)*
<p>Declares a resolver which is responsible for resolving component URLs to
actual components. See <code>fuchsia.component.resolution.Resolver</code> for the
protocol resolvers are expected to implement.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Resolver.name">
<td><h3 id="Resolver.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of this resolver.</p>
<p>Must be unique among resolvers declared in the same <code>ComponentDecl</code>.</p>
</td>
</tr>
<tr id="Resolver.source_path">
<td><h3 id="Resolver.source_path" class="add-link hide-from-toc">2</h3></td>
<td><code>source_path</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Required) The path to the resolver protocol in the component's outgoing
directory</p>
</td>
</tr>
</table>
### ResolverRegistration {#ResolverRegistration data-text="ResolverRegistration"}
*Defined in [fuchsia.component.decl/environment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/environment.fidl;l=67)*
<p>A mapping of URL scheme to resolver name.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="ResolverRegistration.resolver">
<td><h3 id="ResolverRegistration.resolver" class="add-link hide-from-toc">1</h3></td>
<td><code>resolver</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of the resolver.</p>
</td>
</tr>
<tr id="ResolverRegistration.source">
<td><h3 id="ResolverRegistration.source" class="add-link hide-from-toc">2</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>parent</code>, <code>self</code>, or <code>child</code>.</p>
</td>
</tr>
<tr id="ResolverRegistration.scheme">
<td><h3 id="ResolverRegistration.scheme" class="add-link hide-from-toc">3</h3></td>
<td><code>scheme</code></td>
<td>
<code><a class='link' href='#url_scheme'>url_scheme</a></code>
</td>
<td><p>(Required) The URL scheme the resolver is registered to handle. Only one
resolver may be registered to a particular URL scheme. The URL scheme
must start with a lowercase ASCII letter (a-z), and may contain
lowercase ASCII letters, digits, <code>+</code>, <code>-</code>, and <code>.</code>.</p>
</td>
</tr>
</table>
### Runner {#Runner data-text="Runner"}
*Defined in [fuchsia.component.decl/capability.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/capability.fidl;l=103)*
<p>Declares a runner capability backed by a service.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Runner.name">
<td><h3 id="Runner.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of this runner.</p>
<p>Must unique among runners declared in the same <code>ComponentDecl</code>.</p>
</td>
</tr>
<tr id="Runner.source_path">
<td><h3 id="Runner.source_path" class="add-link hide-from-toc">2</h3></td>
<td><code>source_path</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Required) The path to the runner protocol in the component's outgoing
directory.</p>
</td>
</tr>
</table>
### RunnerRegistration {#RunnerRegistration data-text="RunnerRegistration"}
*Defined in [fuchsia.component.decl/environment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/environment.fidl;l=52)*
<p>A repository of the runners available in an environment.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="RunnerRegistration.source_name">
<td><h3 id="RunnerRegistration.source_name" class="add-link hide-from-toc">1</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of the runner capability as it's exposed to,
offered, or defined by this component.</p>
</td>
</tr>
<tr id="RunnerRegistration.source">
<td><h3 id="RunnerRegistration.source" class="add-link hide-from-toc">2</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the capability relative to the component
itself. Must be <code>parent</code>, <code>self</code>, or <code>child</code>.</p>
</td>
</tr>
<tr id="RunnerRegistration.target_name">
<td><h3 id="RunnerRegistration.target_name" class="add-link hide-from-toc">3</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name by which the runner is made available in this
environment.</p>
</td>
</tr>
</table>
### Service {#Service data-text="Service"}
*Defined in [fuchsia.component.decl/capability.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/capability.fidl;l=25)*
<p>Declares a service capability backed by this component.</p>
<p>To learn more about services, see:
https://fuchsia.dev/fuchsia-src/glossary#service</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Service.name">
<td><h3 id="Service.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of this service.</p>
</td>
</tr>
<tr id="Service.source_path">
<td><h3 id="Service.source_path" class="add-link hide-from-toc">2</h3></td>
<td><code>source_path</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Required) The path to the service in the component's outgoing
directory.</p>
</td>
</tr>
</table>
### Storage {#Storage data-text="Storage"}
*Defined in [fuchsia.component.decl/capability.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/capability.fidl;l=66)*
<p>Declares a storage capability backed by a directory from which data, cache,
or meta storage can be offered.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="Storage.name">
<td><h3 id="Storage.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of this storage</p>
</td>
</tr>
<tr id="Storage.source">
<td><h3 id="Storage.source" class="add-link hide-from-toc">2</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the backing directory capability relative to
the component itself. Must be <code>parent</code>, <code>self</code>, or <code>child</code>.</p>
</td>
</tr>
<tr id="Storage.backing_dir">
<td><h3 id="Storage.backing_dir" class="add-link hide-from-toc">3</h3></td>
<td><code>backing_dir</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of the directory capability from <code>source</code> that backs
the storage.</p>
</td>
</tr>
<tr id="Storage.subdir">
<td><h3 id="Storage.subdir" class="add-link hide-from-toc">4</h3></td>
<td><code>subdir</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Optional) The subdirectory of the source directory that will back the
storage</p>
</td>
</tr>
<tr id="Storage.storage_id">
<td><h3 id="Storage.storage_id" class="add-link hide-from-toc">5</h3></td>
<td><code>storage_id</code></td>
<td>
<code><a class='link' href='#StorageId'>StorageId</a></code>
</td>
<td><p>(Required) This enum determines how to key a component's isolated
storage directory. Each option corresponds to a different key'ing
strategy.</p>
</td>
</tr>
</table>
### UseDirectory {#UseDirectory data-text="UseDirectory"}
*Defined in [fuchsia.component.decl/use.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/use.fidl;l=95)*
<p>Declares a directory used by a component, which was offered to it.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="UseDirectory.source">
<td><h3 id="UseDirectory.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the directory relative to the component
itself. Must be <code>parent</code>, <code>framework</code>, or <code>child</code>. If the availability
is set to <code>optional</code>, then this must be set to <code>parent</code>.</p>
</td>
</tr>
<tr id="UseDirectory.source_name">
<td><h3 id="UseDirectory.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the directory, by which it was presented to
this component.</p>
</td>
</tr>
<tr id="UseDirectory.target_path">
<td><h3 id="UseDirectory.target_path" class="add-link hide-from-toc">3</h3></td>
<td><code>target_path</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Required) The path where the capability should be installed in the
component's namespace.</p>
<p>Must be an absolute path starting with /.</p>
</td>
</tr>
<tr id="UseDirectory.rights">
<td><h3 id="UseDirectory.rights" class="add-link hide-from-toc">4</h3></td>
<td><code>rights</code></td>
<td>
<code><a class='link' href='../fuchsia.io/'>fuchsia.io</a>/<a class='link' href='../fuchsia.io/#Rights'>Rights</a></code>
</td>
<td><p>(Required) The rights required by the component to use this directory.</p>
</td>
</tr>
<tr id="UseDirectory.subdir">
<td><h3 id="UseDirectory.subdir" class="add-link hide-from-toc">5</h3></td>
<td><code>subdir</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Optional) The subdirectory of this directory to use instead of the
root.</p>
</td>
</tr>
<tr id="UseDirectory.dependency_type">
<td><h3 id="UseDirectory.dependency_type" class="add-link hide-from-toc">6</h3></td>
<td><code>dependency_type</code></td>
<td>
<code><a class='link' href='#DependencyType'>DependencyType</a></code>
</td>
<td><p>(Required) The dependency type this use represents.</p>
<p>A component which offers a capability to a child from itself and uses a
capability from the same child, must mark the dependency as <code>weak</code>. A
<code>weak</code> dependency implies that the capability may become unavailable at
any point. Taking a strong dependency on a child's capability will
cause this the child to shut down before its parent. When using a weak
dependency, the parent shuts down before the child.</p>
</td>
</tr>
<tr id="UseDirectory.availability">
<td><h3 id="UseDirectory.availability" class="add-link hide-from-toc">7</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the component is likely to malfunction if this
capability is not provided. If set to <code>optional</code>, the component can
handle the capability's absence.</p>
</td>
</tr>
</table>
### UseEvent {#UseEvent data-text="UseEvent"}
*Defined in [fuchsia.component.decl/use.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/use.fidl;l=156)*
<p>Declares an event used by a component, which was offered to it.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="UseEvent.source">
<td><h3 id="UseEvent.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the event. Must be <code>realm</code> or <code>framework</code>. If
the availability is set to <code>optional</code>, then this must be set to
<code>parent</code>.</p>
</td>
</tr>
<tr id="UseEvent.source_name">
<td><h3 id="UseEvent.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the event which was presented to this
component.</p>
</td>
</tr>
<tr id="UseEvent.target_name">
<td><h3 id="UseEvent.target_name" class="add-link hide-from-toc">3</h3></td>
<td><code>target_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name which the component will use to refer to this event.</p>
</td>
</tr>
<tr id="UseEvent.filter">
<td><h3 id="UseEvent.filter" class="add-link hide-from-toc">4</h3></td>
<td><code>filter</code></td>
<td>
<code><a class='link' href='../fuchsia.data/'>fuchsia.data</a>/<a class='link' href='../fuchsia.data/#Dictionary'>Dictionary</a></code>
</td>
<td><p>(Optional) Filter for the event. The structure of the filter depends on
the event type. May be absent for some events. (TODO: which ones?)</p>
</td>
</tr>
<tr id="UseEvent.dependency_type">
<td><h3 id="UseEvent.dependency_type" class="add-link hide-from-toc">5</h3></td>
<td><code>dependency_type</code></td>
<td>
<code><a class='link' href='#DependencyType'>DependencyType</a></code>
</td>
<td><p>(Required) The dependency type this use represents.</p>
<p>A component which offers a capability to a child from itself and uses a
capability from the same child, must mark the dependency as <code>weak</code>. A
<code>weak</code> dependency implies that the capability may become unavailable at
any point. Taking a strong dependency on a child's capability will
cause this the child to shut down before its parent. When using a weak
dependency, the parent shuts down before the child.</p>
</td>
</tr>
<tr id="UseEvent.availability">
<td><h3 id="UseEvent.availability" class="add-link hide-from-toc">6</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the component is likely to malfunction if this
capability is not provided. If set to <code>optional</code>, the component can
handle the capability's absence.</p>
</td>
</tr>
</table>
### UseEventStream {#UseEventStream data-text="UseEventStream"}
*Defined in [fuchsia.component.decl/use.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/use.fidl;l=207)*
<p>Declares an EventStream used by a component.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="UseEventStream.source_name">
<td><h3 id="UseEventStream.source_name" class="add-link hide-from-toc">1</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The names of the event streams.</p>
</td>
</tr>
<tr id="UseEventStream.source">
<td><h3 id="UseEventStream.source" class="add-link hide-from-toc">2</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the event. Must be <code>parent</code>, <code>framework</code>, or <code>child</code>. If
the availability is set to <code>optional</code>, then this must be set to
<code>parent</code>.</p>
</td>
</tr>
<tr id="UseEventStream.scope">
<td><h3 id="UseEventStream.scope" class="add-link hide-from-toc">3</h3></td>
<td><code>scope</code></td>
<td>
<code>vector&lt;<a class='link' href='#Ref'>Ref</a>&gt;</code>
</td>
<td><p>(Optional) When an event is used from framework, the scope is required
to specify the child (or array of children) which the event will be
about. When the event is used from parent, the scope can be used to
downscope the event to a certain child scope, otherwise the event will
carry the scope coming from the parent.</p>
</td>
</tr>
<tr id="UseEventStream.target_path">
<td><h3 id="UseEventStream.target_path" class="add-link hide-from-toc">4</h3></td>
<td><code>target_path</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The path where the capability should be installed in the
component's namespace. Must be an absolute path starting with /.</p>
</td>
</tr>
<tr id="UseEventStream.availability">
<td><h3 id="UseEventStream.availability" class="add-link hide-from-toc">5</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the component is likely to malfunction if this
capability is not provided. If set to <code>optional</code>, the component can
handle the capability's absence.</p>
</td>
</tr>
<tr id="UseEventStream.filter">
<td><h3 id="UseEventStream.filter" class="add-link hide-from-toc">6</h3></td>
<td><code>filter</code></td>
<td>
<code><a class='link' href='../fuchsia.data/'>fuchsia.data</a>/<a class='link' href='../fuchsia.data/#Dictionary'>Dictionary</a></code>
</td>
<td><p>(Optional) Filter for the event stream. The structure of the filter
depends on the event stream type. Only supported for the
<code>DirectoryReady</code> and <code>CapabilityRequested</code> event types.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 9</span></div>
</td>
</tr>
</table>
### UseEventStreamDeprecated {#UseEventStreamDeprecated data-text="UseEventStreamDeprecated"}
*Defined in [fuchsia.component.decl/use.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/use.fidl;l=191)*
<p>Declares a static EventStream used by a component.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="UseEventStreamDeprecated.name">
<td><h3 id="UseEventStreamDeprecated.name" class="add-link hide-from-toc">1</h3></td>
<td><code>name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) The name of the event stream.</p>
</td>
</tr>
<tr id="UseEventStreamDeprecated.subscriptions">
<td><h3 id="UseEventStreamDeprecated.subscriptions" class="add-link hide-from-toc">2</h3></td>
<td><code>subscriptions</code></td>
<td>
<code>vector&lt;<a class='link' href='#EventSubscription'>EventSubscription</a>&gt;[100]</code>
</td>
<td><p>(Required) The set of events to which this EventStream is subscribed.
Note: This vector must be non-empty.</p>
</td>
</tr>
<tr id="UseEventStreamDeprecated.availability">
<td><h3 id="UseEventStreamDeprecated.availability" class="add-link hide-from-toc">3</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the component is likely to malfunction if this
capability is not provided. If set to <code>optional</code>, the component can
handle the capability's absence.</p>
</td>
</tr>
</table>
### UseProtocol {#UseProtocol data-text="UseProtocol"}
*Defined in [fuchsia.component.decl/use.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/use.fidl;l=61)*
<p>Declares a protocol used by a component, which was offered to it.</p>
<p>A protocol is a service with a single instance, provided by a single FIDL
protocol.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="UseProtocol.source">
<td><h3 id="UseProtocol.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the protocol relative to the component itself.
Must be <code>parent</code>, <code>framework</code>, <code>debug</code>, <code>capability</code>, or <code>child</code>. If the
availability is set to <code>optional</code>, then this must be set to <code>parent</code>.</p>
</td>
</tr>
<tr id="UseProtocol.source_name">
<td><h3 id="UseProtocol.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the protocol, by which it was presented to this
component.</p>
</td>
</tr>
<tr id="UseProtocol.target_path">
<td><h3 id="UseProtocol.target_path" class="add-link hide-from-toc">3</h3></td>
<td><code>target_path</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Required) The path where the capability should be installed in the component's
namespace.</p>
<p>Must be an absolute path starting with /.</p>
</td>
</tr>
<tr id="UseProtocol.dependency_type">
<td><h3 id="UseProtocol.dependency_type" class="add-link hide-from-toc">4</h3></td>
<td><code>dependency_type</code></td>
<td>
<code><a class='link' href='#DependencyType'>DependencyType</a></code>
</td>
<td><p>(Required) The dependency type this use represents.</p>
<p>A component which offers a capability to a child from itself and uses a
capability from the same child, must mark the dependency as <code>weak</code>. A
<code>weak</code> dependency implies that the capability may become unavailable at
any point. Taking a strong dependency on a child's capability will
cause this the child to shut down before its parent. When using a weak
dependency, the parent shuts down before the child.</p>
</td>
</tr>
<tr id="UseProtocol.availability">
<td><h3 id="UseProtocol.availability" class="add-link hide-from-toc">5</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the component is likely to malfunction if this
capability is not provided. If set to <code>optional</code>, the component can
handle the capability's absence.</p>
</td>
</tr>
</table>
### UseService {#UseService data-text="UseService"}
*Defined in [fuchsia.component.decl/use.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/use.fidl;l=24)*
<p>Declares a service used by a component, which was offered to it.</p>
<p>To learn more about services, see:
https://fuchsia.dev/fuchsia-src/glossary#service</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="UseService.source">
<td><h3 id="UseService.source" class="add-link hide-from-toc">1</h3></td>
<td><code>source</code></td>
<td>
<code><a class='link' href='#Ref'>Ref</a></code>
</td>
<td><p>(Required) The provider of the service relative to the component itself.
Must be <code>parent</code> or <code>framework</code>. If the availability is set to
<code>optional</code>, then this must be set to <code>parent</code>.</p>
</td>
</tr>
<tr id="UseService.source_name">
<td><h3 id="UseService.source_name" class="add-link hide-from-toc">2</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the service, by which it was presented to
this component.</p>
</td>
</tr>
<tr id="UseService.target_path">
<td><h3 id="UseService.target_path" class="add-link hide-from-toc">3</h3></td>
<td><code>target_path</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Required) The path where the capability should be installed in the
component's namespace.</p>
<p>Must be an absolute path starting with /.</p>
</td>
</tr>
<tr id="UseService.dependency_type">
<td><h3 id="UseService.dependency_type" class="add-link hide-from-toc">4</h3></td>
<td><code>dependency_type</code></td>
<td>
<code><a class='link' href='#DependencyType'>DependencyType</a></code>
</td>
<td><p>(Required) The dependency type this use represents.</p>
<p>A component which offers a capability to a child from itself and uses a
capability from the same child, must mark the dependency as <code>weak</code>. A
<code>weak</code> dependency implies that the capability may become unavailable at
any point. Taking a strong dependency on a child's capability will
cause this the child to shut down before its parent. When using a weak
dependency, the parent shuts down before the child.</p>
</td>
</tr>
<tr id="UseService.availability">
<td><h3 id="UseService.availability" class="add-link hide-from-toc">5</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the component is likely to malfunction if this
capability is not provided. If set to <code>optional</code>, the component can
handle the capability's absence.</p>
</td>
</tr>
</table>
### UseStorage {#UseStorage data-text="UseStorage"}
*Defined in [fuchsia.component.decl/use.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/use.fidl;l=136)*
<p>Declares storage used by a component, which was offered to it.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="UseStorage.source_name">
<td><h3 id="UseStorage.source_name" class="add-link hide-from-toc">1</h3></td>
<td><code>source_name</code></td>
<td>
<code><a class='link' href='#name'>name</a></code>
</td>
<td><p>(Required) Name identifying the storage, by which it was presented to
this component. If the availability is set to <code>optional</code>, then this must
be set to <code>parent</code>.</p>
</td>
</tr>
<tr id="UseStorage.target_path">
<td><h3 id="UseStorage.target_path" class="add-link hide-from-toc">2</h3></td>
<td><code>target_path</code></td>
<td>
<code>string[1024]</code>
</td>
<td><p>(Required) The path where the capability should be installed in the
component's namespace.</p>
<p>Must be an absolute path starting with /.</p>
</td>
</tr>
<tr id="UseStorage.availability">
<td><h3 id="UseStorage.availability" class="add-link hide-from-toc">3</h3></td>
<td><code>availability</code></td>
<td>
<code><a class='link' href='#Availability'>Availability</a></code>
</td>
<td><p>(Optional, defaults to <code>REQUIRED</code>) The availability of this capability.
If set to <code>required</code>, the component is likely to malfunction if this
capability is not provided. If set to <code>optional</code>, the component can
handle the capability's absence.</p>
</td>
</tr>
</table>
## **UNIONS**
### Capability [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Capability data-text="Capability"}
*Defined in [fuchsia.component.decl/capability.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/capability.fidl;l=9)*
<p>Declares a capability defined by this component.</p>
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="Capability.service">
<td><h3 id="Capability.service" class="add-link hide-from-toc">1</h3></td>
<td><code>service</code></td>
<td>
<code><a class='link' href='#Service'>Service</a></code>
</td>
<td></td>
</tr>
<tr id="Capability.protocol">
<td><h3 id="Capability.protocol" class="add-link hide-from-toc">2</h3></td>
<td><code>protocol</code></td>
<td>
<code><a class='link' href='#Protocol'>Protocol</a></code>
</td>
<td></td>
</tr>
<tr id="Capability.directory">
<td><h3 id="Capability.directory" class="add-link hide-from-toc">3</h3></td>
<td><code>directory</code></td>
<td>
<code><a class='link' href='#Directory'>Directory</a></code>
</td>
<td></td>
</tr>
<tr id="Capability.storage">
<td><h3 id="Capability.storage" class="add-link hide-from-toc">4</h3></td>
<td><code>storage</code></td>
<td>
<code><a class='link' href='#Storage'>Storage</a></code>
</td>
<td></td>
</tr>
<tr id="Capability.runner">
<td><h3 id="Capability.runner" class="add-link hide-from-toc">5</h3></td>
<td><code>runner</code></td>
<td>
<code><a class='link' href='#Runner'>Runner</a></code>
</td>
<td></td>
</tr>
<tr id="Capability.resolver">
<td><h3 id="Capability.resolver" class="add-link hide-from-toc">6</h3></td>
<td><code>resolver</code></td>
<td>
<code><a class='link' href='#Resolver'>Resolver</a></code>
</td>
<td></td>
</tr>
<tr id="Capability.event">
<td><h3 id="Capability.event" class="add-link hide-from-toc">7</h3></td>
<td><code>event</code></td>
<td>
<code><a class='link' href='#Event'>Event</a></code>
</td>
<td></td>
</tr>
<tr id="Capability.event_stream">
<td><h3 id="Capability.event_stream" class="add-link hide-from-toc">8</h3></td>
<td><code>event_stream</code></td>
<td>
<code><a class='link' href='#EventStream'>EventStream</a></code>
</td>
<td><div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 8</span></div>
</td>
</tr>
</table>
### ConfigChecksum [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#ConfigChecksum data-text="ConfigChecksum"}
*Defined in [fuchsia.component.decl/config.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/config.fidl;l=15)*
<p>The checksum produced for a configuration interface.
Two configuration interfaces are the same if their checksums are the same.</p>
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="ConfigChecksum.sha256">
<td><h3 id="ConfigChecksum.sha256" class="add-link hide-from-toc">1</h3></td>
<td><code>sha256</code></td>
<td>
<code>uint8[32]</code>
</td>
<td><p>A SHA-256 hash produced over a component's config interface.</p>
</td>
</tr>
</table>
### ConfigValueSource [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#ConfigValueSource data-text="ConfigValueSource"}
*Defined in [fuchsia.component.decl/config.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/config.fidl;l=33)*
<p>Strategies available for resolving configuration values.</p>
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="ConfigValueSource.package_path">
<td><h3 id="ConfigValueSource.package_path" class="add-link hide-from-toc">1</h3></td>
<td><code>package_path</code></td>
<td>
<code>string</code>
</td>
<td><p>(Required) The path within the component's package at which to find config value files.</p>
</td>
</tr>
</table>
### DebugRegistration [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#DebugRegistration data-text="DebugRegistration"}
*Defined in [fuchsia.component.decl/environment.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/environment.fidl;l=83)*
<p>Declares a capability registered in the debug section of an environment.</p>
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="DebugRegistration.protocol">
<td><h3 id="DebugRegistration.protocol" class="add-link hide-from-toc">1</h3></td>
<td><code>protocol</code></td>
<td>
<code><a class='link' href='#DebugProtocolRegistration'>DebugProtocolRegistration</a></code>
</td>
<td></td>
</tr>
</table>
### Expose [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Expose data-text="Expose"}
*Defined in [fuchsia.component.decl/expose.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/expose.fidl;l=11)*
<p>Declares a capability exposed to either a component's containing realm or to
the framework. For example, a legacy service exposed by the component at
runtime.</p>
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="Expose.service">
<td><h3 id="Expose.service" class="add-link hide-from-toc">1</h3></td>
<td><code>service</code></td>
<td>
<code><a class='link' href='#ExposeService'>ExposeService</a></code>
</td>
<td></td>
</tr>
<tr id="Expose.protocol">
<td><h3 id="Expose.protocol" class="add-link hide-from-toc">2</h3></td>
<td><code>protocol</code></td>
<td>
<code><a class='link' href='#ExposeProtocol'>ExposeProtocol</a></code>
</td>
<td></td>
</tr>
<tr id="Expose.directory">
<td><h3 id="Expose.directory" class="add-link hide-from-toc">3</h3></td>
<td><code>directory</code></td>
<td>
<code><a class='link' href='#ExposeDirectory'>ExposeDirectory</a></code>
</td>
<td></td>
</tr>
<tr id="Expose.runner">
<td><h3 id="Expose.runner" class="add-link hide-from-toc">4</h3></td>
<td><code>runner</code></td>
<td>
<code><a class='link' href='#ExposeRunner'>ExposeRunner</a></code>
</td>
<td></td>
</tr>
<tr id="Expose.resolver">
<td><h3 id="Expose.resolver" class="add-link hide-from-toc">5</h3></td>
<td><code>resolver</code></td>
<td>
<code><a class='link' href='#ExposeResolver'>ExposeResolver</a></code>
</td>
<td></td>
</tr>
<tr id="Expose.event_stream">
<td><h3 id="Expose.event_stream" class="add-link hide-from-toc">6</h3></td>
<td><code>event_stream</code></td>
<td>
<code><a class='link' href='#ExposeEventStream'>ExposeEventStream</a></code>
</td>
<td></td>
</tr>
</table>
### LayoutConstraint [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LayoutConstraint data-text="LayoutConstraint"}
*Defined in [fuchsia.component.decl/config.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/config.fidl;l=81)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="LayoutConstraint.max_size">
<td><h3 id="LayoutConstraint.max_size" class="add-link hide-from-toc">1</h3></td>
<td><code>max_size</code></td>
<td>
<code>uint32</code>
</td>
<td></td>
</tr>
</table>
### LayoutParameter [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LayoutParameter data-text="LayoutParameter"}
*Defined in [fuchsia.component.decl/config.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/config.fidl;l=75)*
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="LayoutParameter.nested_type">
<td><h3 id="LayoutParameter.nested_type" class="add-link hide-from-toc">1</h3></td>
<td><code>nested_type</code></td>
<td>
<code><a class='link' href='#ConfigType'>ConfigType</a></code>
</td>
<td></td>
</tr>
</table>
### Offer [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Offer data-text="Offer"}
*Defined in [fuchsia.component.decl/offer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/offer.fidl;l=12)*
<p>Declares a capability offered by a component to one of its children, which
may have been offered by the component's containing realm, the component
itself, or one of its other children.</p>
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="Offer.service">
<td><h3 id="Offer.service" class="add-link hide-from-toc">1</h3></td>
<td><code>service</code></td>
<td>
<code><a class='link' href='#OfferService'>OfferService</a></code>
</td>
<td></td>
</tr>
<tr id="Offer.protocol">
<td><h3 id="Offer.protocol" class="add-link hide-from-toc">2</h3></td>
<td><code>protocol</code></td>
<td>
<code><a class='link' href='#OfferProtocol'>OfferProtocol</a></code>
</td>
<td></td>
</tr>
<tr id="Offer.directory">
<td><h3 id="Offer.directory" class="add-link hide-from-toc">3</h3></td>
<td><code>directory</code></td>
<td>
<code><a class='link' href='#OfferDirectory'>OfferDirectory</a></code>
</td>
<td></td>
</tr>
<tr id="Offer.storage">
<td><h3 id="Offer.storage" class="add-link hide-from-toc">4</h3></td>
<td><code>storage</code></td>
<td>
<code><a class='link' href='#OfferStorage'>OfferStorage</a></code>
</td>
<td></td>
</tr>
<tr id="Offer.runner">
<td><h3 id="Offer.runner" class="add-link hide-from-toc">5</h3></td>
<td><code>runner</code></td>
<td>
<code><a class='link' href='#OfferRunner'>OfferRunner</a></code>
</td>
<td></td>
</tr>
<tr id="Offer.resolver">
<td><h3 id="Offer.resolver" class="add-link hide-from-toc">6</h3></td>
<td><code>resolver</code></td>
<td>
<code><a class='link' href='#OfferResolver'>OfferResolver</a></code>
</td>
<td></td>
</tr>
<tr id="Offer.event">
<td><h3 id="Offer.event" class="add-link hide-from-toc">7</h3></td>
<td><code>event</code></td>
<td>
<code><a class='link' href='#OfferEvent'>OfferEvent</a></code>
</td>
<td></td>
</tr>
<tr id="Offer.event_stream">
<td><h3 id="Offer.event_stream" class="add-link hide-from-toc">8</h3></td>
<td><code>event_stream</code></td>
<td>
<code><a class='link' href='#OfferEventStream'>OfferEventStream</a></code>
</td>
<td></td>
</tr>
</table>
### Ref [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Ref data-text="Ref"}
*Defined in [fuchsia.component.decl/relative_refs.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/relative_refs.fidl;l=8)*
<p>A reference to a capability source or destination relative to this
component.</p>
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="Ref.parent">
<td><h3 id="Ref.parent" class="add-link hide-from-toc">1</h3></td>
<td><code>parent</code></td>
<td>
<code><a class='link' href='#ParentRef'>ParentRef</a></code>
</td>
<td></td>
</tr>
<tr id="Ref.self">
<td><h3 id="Ref.self" class="add-link hide-from-toc">2</h3></td>
<td><code>self</code></td>
<td>
<code><a class='link' href='#SelfRef'>SelfRef</a></code>
</td>
<td></td>
</tr>
<tr id="Ref.child">
<td><h3 id="Ref.child" class="add-link hide-from-toc">3</h3></td>
<td><code>child</code></td>
<td>
<code><a class='link' href='#ChildRef'>ChildRef</a></code>
</td>
<td></td>
</tr>
<tr id="Ref.collection">
<td><h3 id="Ref.collection" class="add-link hide-from-toc">4</h3></td>
<td><code>collection</code></td>
<td>
<code><a class='link' href='#CollectionRef'>CollectionRef</a></code>
</td>
<td></td>
</tr>
<tr id="Ref.framework">
<td><h3 id="Ref.framework" class="add-link hide-from-toc">5</h3></td>
<td><code>framework</code></td>
<td>
<code><a class='link' href='#FrameworkRef'>FrameworkRef</a></code>
</td>
<td></td>
</tr>
<tr id="Ref.capability">
<td><h3 id="Ref.capability" class="add-link hide-from-toc">6</h3></td>
<td><code>capability</code></td>
<td>
<code><a class='link' href='#CapabilityRef'>CapabilityRef</a></code>
</td>
<td></td>
</tr>
<tr id="Ref.debug">
<td><h3 id="Ref.debug" class="add-link hide-from-toc">7</h3></td>
<td><code>debug</code></td>
<td>
<code><a class='link' href='#DebugRef'>DebugRef</a></code>
</td>
<td></td>
</tr>
<tr id="Ref.void_type">
<td><h3 id="Ref.void_type" class="add-link hide-from-toc">8</h3></td>
<td><code>void_type</code></td>
<td>
<code><a class='link' href='#VoidRef'>VoidRef</a></code>
</td>
<td></td>
</tr>
</table>
### Use [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Use data-text="Use"}
*Defined in [fuchsia.component.decl/use.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/use.fidl;l=10)*
<p>Declares a capability used by a component, which was offered to it.</p>
<table>
<tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
<tr id="Use.service">
<td><h3 id="Use.service" class="add-link hide-from-toc">1</h3></td>
<td><code>service</code></td>
<td>
<code><a class='link' href='#UseService'>UseService</a></code>
</td>
<td></td>
</tr>
<tr id="Use.protocol">
<td><h3 id="Use.protocol" class="add-link hide-from-toc">2</h3></td>
<td><code>protocol</code></td>
<td>
<code><a class='link' href='#UseProtocol'>UseProtocol</a></code>
</td>
<td></td>
</tr>
<tr id="Use.directory">
<td><h3 id="Use.directory" class="add-link hide-from-toc">3</h3></td>
<td><code>directory</code></td>
<td>
<code><a class='link' href='#UseDirectory'>UseDirectory</a></code>
</td>
<td></td>
</tr>
<tr id="Use.storage">
<td><h3 id="Use.storage" class="add-link hide-from-toc">4</h3></td>
<td><code>storage</code></td>
<td>
<code><a class='link' href='#UseStorage'>UseStorage</a></code>
</td>
<td></td>
</tr>
<tr id="Use.event">
<td><h3 id="Use.event" class="add-link hide-from-toc">5</h3></td>
<td><code>event</code></td>
<td>
<code><a class='link' href='#UseEvent'>UseEvent</a></code>
</td>
<td></td>
</tr>
<tr id="Use.event_stream_deprecated">
<td><h3 id="Use.event_stream_deprecated" class="add-link hide-from-toc">6</h3></td>
<td><code>event_stream_deprecated</code></td>
<td>
<code><a class='link' href='#UseEventStreamDeprecated'>UseEventStreamDeprecated</a></code>
</td>
<td></td>
</tr>
<tr id="Use.event_stream">
<td><h3 id="Use.event_stream" class="add-link hide-from-toc">7</h3></td>
<td><code>event_stream</code></td>
<td>
<code><a class='link' href='#UseEventStream'>UseEventStream</a></code>
</td>
<td></td>
</tr>
</table>
## **CONSTANTS**
<table>
<tr><th>Name</th><th>Value</th><th>Type</th><th>Description</th></tr>
<tr id="CONFIG_KEY_MAX_SIZE">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/config.fidl;l=8">CONFIG_KEY_MAX_SIZE</a></td>
<td>
<code>64</code>
</td>
<td><code>uint32</code></td>
<td><p>Config keys can only consist of these many bytes</p>
</td>
</tr>
<tr id="MAX_CHILD_NAME_LENGTH">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/types.fidl;l=7">MAX_CHILD_NAME_LENGTH</a></td>
<td>
<code>1024</code>
</td>
<td><code>uint32</code></td>
<td></td>
</tr>
<tr id="MAX_MONIKER_LENGTH">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/types.fidl;l=9">MAX_MONIKER_LENGTH</a></td>
<td>
<code>4096</code>
</td>
<td><code>uint32</code></td>
<td></td>
</tr>
<tr id="MAX_NAME_LENGTH">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/types.fidl;l=6">MAX_NAME_LENGTH</a></td>
<td>
<code>100</code>
</td>
<td><code>uint32</code></td>
<td></td>
</tr>
<tr id="MAX_NUM_EVENT_STREAM_SUBSCRIPTIONS">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/events.fidl;l=7">MAX_NUM_EVENT_STREAM_SUBSCRIPTIONS</a></td>
<td>
<code>100</code>
</td>
<td><code>uint64</code></td>
<td><p>The maximum number of EventSubscriptions in an EventStream.</p>
</td>
</tr>
<tr id="MAX_PATH_LENGTH">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/types.fidl;l=8">MAX_PATH_LENGTH</a></td>
<td>
<code>1024</code>
</td>
<td><code>uint32</code></td>
<td></td>
</tr>
<tr id="MAX_URL_SCHEME_LENGTH">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/types.fidl;l=10">MAX_URL_SCHEME_LENGTH</a></td>
<td>
<code>100</code>
</td>
<td><code>uint32</code></td>
<td></td>
</tr>
</table>
## **ALIASES**
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="ConfigKey">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/config.fidl;l=11">ConfigKey</a></td>
<td>
<code>string</code>[<code><a class='link' href='#CONFIG_KEY_MAX_SIZE'>CONFIG_KEY_MAX_SIZE</a></code>]</td>
<td><p>The string identifier for a config field.</p>
</td>
</tr>
<tr id="child_name">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/types.fidl;l=13">child_name</a></td>
<td>
<code>string</code>[<code><a class='link' href='#MAX_CHILD_NAME_LENGTH'>MAX_CHILD_NAME_LENGTH</a></code>]</td>
<td></td>
</tr>
<tr id="name">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/types.fidl;l=12">name</a></td>
<td>
<code>string</code>[<code><a class='link' href='#MAX_NAME_LENGTH'>MAX_NAME_LENGTH</a></code>]</td>
<td></td>
</tr>
<tr id="url_scheme">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component.decl/types.fidl;l=14">url_scheme</a></td>
<td>
<code>string</code>[<code><a class='link' href='#MAX_URL_SCHEME_LENGTH'>MAX_URL_SCHEME_LENGTH</a></code>]</td>
<td></td>
</tr>
</table>