<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=49)*
<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.
Required.</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=41)*
<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=46)*
<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=54)*
<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=65)*
<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=48)*
<p>Describes the expected availability of the capability.</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></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></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></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=52)*
<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=40)*
<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=53)*
<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=42)*
<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=84)*
<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>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>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>The startup mode for the component instance.</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>The environment assigned to this child.</p>
<p>Must reference an environment defined in the <code>ComponentDecl</code>.
Contains 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>The action to take if this component instance terminates unexpectedly.</p>
<p>May be unset, in which case defaults to <code>NONE</code>.</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>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>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>The environment assigned to child instances in this collection.</p>
<p>Must be non-empty, reference an environment defined in the containing
<code>ComponentDecl</code>, and 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>The kinds of offers that can target the child instances in this
collection. The default value is <code>STATIC_ONLY</code>.</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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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=89)*
<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>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>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>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=49)*
<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>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>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>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>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>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>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>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>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>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=120)*
<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>The name of this event.
Must be non-empty, 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=131)*
<p>Declares an event_stream capability
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>The name of this event stream.
Must be non-empty, 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></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=65)*
<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>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>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>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>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>The maximum rights that can be set by a component using this directory,
required iff <code>source == self</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>The subdirectory of this directory to expose instead of the root. Optional.</p>
</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=126)*
<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>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>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>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>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>The name by which the capability is being exposed.</p>
</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=46)*
<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>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>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>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>The name by which the capability is being exposed.</p>
</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=109)*
<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>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>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>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>The name by which the capability is being exposed.</p>
</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=91)*
<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>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>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>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>The name by which the capability is being exposed.</p>
</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=24)*
<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>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>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>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>The name by which the capability is being exposed.</p>
</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=132)*
<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>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>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>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>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>The maximum rights that can be set by a component using this directory,
required iff <code>source == self</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>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>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>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=237)*
<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>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>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>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>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>Filter for the event. The structure of the filter depends on the event type. May be absent
for some events.</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>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=266)*
<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>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>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>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>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>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>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>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=99)*
<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>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>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>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>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>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>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=220)*
<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>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>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>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>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=201)*
<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>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>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>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>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=60)*
<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>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>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>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>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>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>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>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=173)*
<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>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>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>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>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>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>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>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=37)*
<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>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>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=107)*
<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>The name of this resolver.
Must be non-empty, 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>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=63)*
<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>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>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>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=96)*
<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>The name of this runner.
Must be non-empty, 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>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=49)*
<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>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>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>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>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>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=62)*
<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>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>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>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>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>This enum determines how to key a component's isolated storage directory.
Each option corresponds to a different key'ing strategy.
This field is required.</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=93)*
<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>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>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>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>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>The subdirectory of this directory to use instead of the root. Optional.</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>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>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=151)*
<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>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>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>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>Filter for the event. The structure of the filter depends on the event type. May be absent
for some events.</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>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>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=198)*
<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>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>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>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>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>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>

### 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=183)*
<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>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>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>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=60)*
<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>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>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>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>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>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>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>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>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>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>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=132)*
<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>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>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>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>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=79)*
<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=10)*
<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>

## **TYPE 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>