<link rel="stylesheet" href="../style.css" />

[TOC]
# fuchsia.component

<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 7</span></div>

## **PROTOCOLS**

## Binder {#Binder}
*Defined in [fuchsia.component/binder.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/binder.fidl;l=20)*
<p>A framework-provided protocol that allows components that use it to bind to
the component that exposes it. The act of connecting to this protocol will
trigger the bind. Thus, this protocol contains no methods. For more details
on binding, see
https://fuchsia.dev/fuchsia-src/concepts/components/v2/lifecycle#binding.</p>
<p>When a component connects to protocol, the component exposing this capability
will be started if it's not already running. Upon a failure to start, the
component framework will close the server end of the channel with a
zx.status epitaph.</p>
<p>Note: The component doesn't need to serve this protocol, it is implemented
by the framework.</p>

## ChildIterator {#ChildIterator}
*Defined in [fuchsia.component/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=149)*
<p>A protocol to iterate over the list of children in a realm.</p>

### Next {#ChildIterator.Next}

<p>Advance the iterator and return the next batch of children.</p>
<p>Returns a vector of <code>ChildRef</code>. Returns an empty vector when there are
no more children.</p>

#### Request {#ChildIterator.Next_Request}

&lt;EMPTY&gt;


#### Response {#ChildIterator.Next_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>children</code></td>
            <td>
                <code>vector&lt;<a class='link' href='../fuchsia.component.decl/'>fuchsia.component.decl</a>/<a class='link' href='../fuchsia.component.decl/#ChildRef'>ChildRef</a>&gt;[128]</code>
            </td>
        </tr>
</table>

## Realm {#Realm}
*Defined in [fuchsia.component/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=33)*
<p>A protocol used by a component instance to manage its own realm, such as for
binding to its children.</p>
<p>Requests to this protocol are processed in the order they are received.
Clients that wish to send requests in parallel should open multiple
connections.</p>
<p>The component framework provides this service to components that use
<code>fuchsia.component.Realm</code>.</p>

### CreateChild {#Realm.CreateChild}

<p>Creates a child component instance dynamically. When this function
returns successfully, the instance exists, but it may not be running.</p>
<p>The environment of the child instance is determined by the environment
of the collection. <code>decl</code> must not set <code>environment</code>.</p>
<p>Errors:</p>
<ul>
<li><code>INVALID_ARGUMENTS</code>: <code>collection</code> is not a valid reference or <code>child</code>
is not a valid declaration.</li>
<li><code>COLLECTION_NOT_FOUND</code>: <code>collection</code> does not exist.</li>
<li><code>INSTANCE_ALREADY_EXISTS</code>: <code>decl.name</code> already exists in <code>collection</code>.</li>
<li><code>INSTANCE_CANNOT_RESOLVE</code>: <code>child</code>'s component declaration failed to resolve
in a <code>SingleRun</code> collection.</li>
<li><code>NO_SPACE</code>: Could not allocate storage for the new instance.</li>
<li><code>INSTANCE_DIED</code>: This realm no longer exists.</li>
</ul>

#### Request {#Realm.CreateChild_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>collection</code></td>
            <td>
                <code><a class='link' href='../fuchsia.component.decl/'>fuchsia.component.decl</a>/<a class='link' href='../fuchsia.component.decl/#CollectionRef'>CollectionRef</a></code>
            </td>
        </tr>
        <tr>
            <td><code>decl</code></td>
            <td>
                <code><a class='link' href='../fuchsia.component.decl/'>fuchsia.component.decl</a>/<a class='link' href='../fuchsia.component.decl/#Child'>Child</a></code>
            </td>
        </tr>
        <tr>
            <td><code>args</code></td>
            <td>
                <code><a class='link' href='#CreateChildArgs'>CreateChildArgs</a></code>
            </td>
        </tr>
</table>


#### Response {#Realm.CreateChild_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Realm_CreateChild_Result'>Realm_CreateChild_Result</a></code>
            </td>
        </tr>
</table>

### DestroyChild {#Realm.DestroyChild}

<p>Destroys a dynamically-created component instance. When this function
returns, the instance is destroyed and has stopped running.  However,
cleanup of the component's resources (such as its isolated storage) may
happen in the background after this function returns.</p>
<p>Errors:</p>
<ul>
<li><code>INVALID_ARGUMENTS</code>: <code>child</code> is not a valid reference or does not refer
to a dynamic instance.</li>
<li><code>INSTANCE_NOT_FOUND</code>: <code>child</code> does not exist.</li>
<li><code>COLLECTION_NOT_FOUND</code>: <code>collection</code> does not exist.</li>
<li><code>INSTANCE_DIED</code>: This realm no longer exists.</li>
</ul>

#### Request {#Realm.DestroyChild_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>child</code></td>
            <td>
                <code><a class='link' href='../fuchsia.component.decl/'>fuchsia.component.decl</a>/<a class='link' href='../fuchsia.component.decl/#ChildRef'>ChildRef</a></code>
            </td>
        </tr>
</table>


#### Response {#Realm.DestroyChild_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Realm_DestroyChild_Result'>Realm_DestroyChild_Result</a></code>
            </td>
        </tr>
</table>

### ListChildren {#Realm.ListChildren}

<p>Returns an iterator that lists all instances in a collection.</p>
<p>NOTE: The results are not guaranteed to be consistent. Instances may be
created or destroyed while the iterator is live, but those changes
won't be observed by the iterator after this method returns.</p>
<p>Errors:</p>
<ul>
<li><code>INVALID_ARGUMENTS</code>: <code>collection</code> is not a valid reference or <code>iter</code>
does not have <code>ZX_RIGHT_WAIT</code>.</li>
<li><code>COLLECTION_NOT_FOUND</code>: <code>collection</code> does not exist.</li>
<li><code>INSTANCE_DIED</code>: This realm no longer exists.</li>
<li>If <code>iter</code> does not have standard channel rights, this function may
return <code>ACCESS_DENIED</code> or component manager may close <code>iter</code>.</li>
</ul>

#### Request {#Realm.ListChildren_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>collection</code></td>
            <td>
                <code><a class='link' href='../fuchsia.component.decl/'>fuchsia.component.decl</a>/<a class='link' href='../fuchsia.component.decl/#CollectionRef'>CollectionRef</a></code>
            </td>
        </tr>
        <tr>
            <td><code>iter</code></td>
            <td>
                <code>request&lt;<a class='link' href='#ChildIterator'>ChildIterator</a>&gt;</code>
            </td>
        </tr>
</table>


#### Response {#Realm.ListChildren_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Realm_ListChildren_Result'>Realm_ListChildren_Result</a></code>
            </td>
        </tr>
</table>

### OpenExposedDir {#Realm.OpenExposedDir}

<p>Opens the exposed directory of a child component instance. When this
function successfully returns, <code>exposed_dir</code> is bound to a directory
that contains the capabilities which the child exposed to its realm
via <code>ComponentDecl.exposes</code> (specified via &quot;expose&quot; declarations in
the component's manifest). The child component will not start as a
result of this call. Instead, starting will occur iff the parent binds
to one of the capabilities contained within <code>exposed_dir</code>.</p>
<p><code>exposed_dir</code> is open as long as <code>child</code> exists.</p>
<p>Errors:</p>
<ul>
<li><code>INVALID_ARGUMENTS</code>: <code>child</code> is not a valid child reference.</li>
<li><code>INSTANCE_NOT_FOUND</code>: <code>child</code> does not exist.</li>
<li><code>INSTANCE_CANNOT_RESOLVE</code>: <code>child</code>'s component declaration failed to resolve.</li>
<li><code>INSTANCE_DIED</code>: This realm no longer exists.</li>
</ul>

#### Request {#Realm.OpenExposedDir_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>child</code></td>
            <td>
                <code><a class='link' href='../fuchsia.component.decl/'>fuchsia.component.decl</a>/<a class='link' href='../fuchsia.component.decl/#ChildRef'>ChildRef</a></code>
            </td>
        </tr>
        <tr>
            <td><code>exposed_dir</code></td>
            <td>
                <code>request&lt;<a class='link' href='../fuchsia.io/'>fuchsia.io</a>/<a class='link' href='../fuchsia.io/#Directory'>Directory</a>&gt;</code>
            </td>
        </tr>
</table>


#### Response {#Realm.OpenExposedDir_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Realm_OpenExposedDir_Result'>Realm_OpenExposedDir_Result</a></code>
            </td>
        </tr>
</table>


## **STRUCTS**

### Realm_CreateChild_Response  {#Realm_CreateChild_Response data-text="Realm_CreateChild_Response"}
*Defined in [fuchsia.component/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=73)*

&lt;EMPTY&gt;

### Realm_DestroyChild_Response  {#Realm_DestroyChild_Response data-text="Realm_DestroyChild_Response"}
*Defined in [fuchsia.component/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=88)*

&lt;EMPTY&gt;

### Realm_ListChildren_Response  {#Realm_ListChildren_Response data-text="Realm_ListChildren_Response"}
*Defined in [fuchsia.component/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=106)*

&lt;EMPTY&gt;

### Realm_OpenExposedDir_Response  {#Realm_OpenExposedDir_Response data-text="Realm_OpenExposedDir_Response"}
*Defined in [fuchsia.component/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=52)*

&lt;EMPTY&gt;


## **ENUMS**

### Error [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Error data-text="Error"}
Type: <code>uint32</code>

*Defined in [fuchsia.component/error.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/error.fidl;l=7)*
<p>Standard error codes for component framework protocols.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="Error.INTERNAL">
<td><h3 id="Error.INTERNAL" class="add-link hide-from-toc">INTERNAL</h3></td>
            <td><code>1</code></td>
            <td><p>Component manager encountered an otherwise unspecified error while
performing the operation.</p>
</td>
        </tr>
        <tr id="Error.INVALID_ARGUMENTS">
<td><h3 id="Error.INVALID_ARGUMENTS" class="add-link hide-from-toc">INVALID_ARGUMENTS</h3></td>
            <td><code>2</code></td>
            <td><p>At least one argument had an invalid format.</p>
</td>
        </tr>
        <tr id="Error.UNSUPPORTED">
<td><h3 id="Error.UNSUPPORTED" class="add-link hide-from-toc">UNSUPPORTED</h3></td>
            <td><code>3</code></td>
            <td><p>The feature is not yet supported.</p>
</td>
        </tr>
        <tr id="Error.ACCESS_DENIED">
<td><h3 id="Error.ACCESS_DENIED" class="add-link hide-from-toc">ACCESS_DENIED</h3></td>
            <td><code>4</code></td>
            <td><p>The caller did not have permission to perform the specified operation,
or one of the handles provided to the call had insufficient rights.</p>
</td>
        </tr>
        <tr id="Error.INSTANCE_NOT_FOUND">
<td><h3 id="Error.INSTANCE_NOT_FOUND" class="add-link hide-from-toc">INSTANCE_NOT_FOUND</h3></td>
            <td><code>5</code></td>
            <td><p>The component instance was not found.</p>
</td>
        </tr>
        <tr id="Error.INSTANCE_ALREADY_EXISTS">
<td><h3 id="Error.INSTANCE_ALREADY_EXISTS" class="add-link hide-from-toc">INSTANCE_ALREADY_EXISTS</h3></td>
            <td><code>6</code></td>
            <td><p>The component instance already exists.</p>
</td>
        </tr>
        <tr id="Error.INSTANCE_CANNOT_START">
<td><h3 id="Error.INSTANCE_CANNOT_START" class="add-link hide-from-toc">INSTANCE_CANNOT_START</h3></td>
            <td><code>7</code></td>
            <td><p>The component instance could not be started.</p>
</td>
        </tr>
        <tr id="Error.INSTANCE_CANNOT_RESOLVE">
<td><h3 id="Error.INSTANCE_CANNOT_RESOLVE" class="add-link hide-from-toc">INSTANCE_CANNOT_RESOLVE</h3></td>
            <td><code>8</code></td>
            <td><p>Failed to resolve the component's declaration.</p>
</td>
        </tr>
        <tr id="Error.COLLECTION_NOT_FOUND">
<td><h3 id="Error.COLLECTION_NOT_FOUND" class="add-link hide-from-toc">COLLECTION_NOT_FOUND</h3></td>
            <td><code>9</code></td>
            <td><p>The component collection was not found.</p>
</td>
        </tr>
        <tr id="Error.RESOURCE_UNAVAILABLE">
<td><h3 id="Error.RESOURCE_UNAVAILABLE" class="add-link hide-from-toc">RESOURCE_UNAVAILABLE</h3></td>
            <td><code>10</code></td>
            <td><p>There were insufficient resources to perform the operation.</p>
</td>
        </tr>
        <tr id="Error.INSTANCE_DIED">
<td><h3 id="Error.INSTANCE_DIED" class="add-link hide-from-toc">INSTANCE_DIED</h3></td>
            <td><code>11</code></td>
            <td><p>The component instance died unexpectedly.</p>
</td>
        </tr>
        <tr id="Error.RESOURCE_NOT_FOUND">
<td><h3 id="Error.RESOURCE_NOT_FOUND" class="add-link hide-from-toc">RESOURCE_NOT_FOUND</h3></td>
            <td><code>12</code></td>
            <td><p>The requested resource does not exist.</p>
</td>
        </tr>
        <tr id="Error.INSTANCE_CANNOT_UNRESOLVE">
<td><h3 id="Error.INSTANCE_CANNOT_UNRESOLVE" class="add-link hide-from-toc">INSTANCE_CANNOT_UNRESOLVE</h3></td>
            <td><code>13</code></td>
            <td><p>Failed to unresolve the component.</p>
</td>
        </tr>
</table>


## **TABLES**

### CreateChildArgs [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#CreateChildArgs data-text="CreateChildArgs"}


*Defined in [fuchsia.component/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=109)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="CreateChildArgs.numbered_handles">
<td><h3 id="CreateChildArgs.numbered_handles" class="add-link hide-from-toc">1</h3></td>
            <td><code>numbered_handles</code></td>
            <td>
                <code>vector&lt;<a class='link' href='../fuchsia.process/'>fuchsia.process</a>/<a class='link' href='../fuchsia.process/#HandleInfo'>HandleInfo</a>&gt;[128]</code>
            </td>
            <td><p>The numbered handles to pass to the component instance.</p>
<p>Only PA_FD and PA_USER* handles are valid arguments, and inclusion of any other
handles will result in an error. This argument is only supported for components
in a collection with <code>SingleRun</code> durability.</p>
<p>If the runner for the component does not support the numbered handles it is
expected to close the handles.</p>
</td>
        </tr>
        <tr id="CreateChildArgs.dynamic_offers">
<td><h3 id="CreateChildArgs.dynamic_offers" class="add-link hide-from-toc">2</h3></td>
            <td><code>dynamic_offers</code></td>
            <td>
                <code>vector&lt;<a class='link' href='../fuchsia.component.decl/'>fuchsia.component.decl</a>/<a class='link' href='../fuchsia.component.decl/#Offer'>Offer</a>&gt;[128]</code>
            </td>
            <td><p>Dynamic offers that will target the component instance.</p>
<p>Including <code>OfferDecl</code>s in this vector will cause additional capabilities
to be offered to the newly created child, beyond the <code>OfferDecl</code>s in the
parent's <code>ComponentDecl</code> that target the collection.</p>
<p>Any kind of offer (e.g., protocol, directory) can be used as a dynamic
offer. Any source that would be valid for a static offer is also valid
for a dynamic offer. Additionally, unlike static offers, dynamic offers
can use a &quot;sibling&quot; dynamic child component as a source by setting the
source to a <code>ChildRef</code> that sets the <code>collection</code> field.</p>
<p>Dynamic offers always target the newly created child component. As a
result, <code>OfferDecl</code>s in <code>dynamic_offers</code> must not set the <code>target</code>
field, as its value is implied.</p>
<p>If either the source (that is, the component named in the <code>source</code> field
of the <code>OfferDecl</code>) or the target of a dynamic offer is destroyed, the
offer itself is destroyed simultaneously.</p>
<p>In order to set this field to a non-empty value, the collection in which
the child component is being created must specify
<code>ComponentDecl.allowed_offers = STATIC_AND_DYNAMIC</code>.</p>
<p>TODO(fxbug.dev/81109): Implementation is in progress.</p>
</td>
        </tr>
</table>


## **UNIONS**

### Realm_CreateChild_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Realm_CreateChild_Result data-text="Realm_CreateChild_Result"}
*Defined in [fuchsia.component/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=73)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Realm_CreateChild_Result.response">
<td><h3 id="Realm_CreateChild_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Realm_CreateChild_Response'>Realm_CreateChild_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Realm_CreateChild_Result.err">
<td><h3 id="Realm_CreateChild_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#Error'>Error</a></code>
            </td>
            <td></td>
        </tr>
</table>

### Realm_DestroyChild_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Realm_DestroyChild_Result data-text="Realm_DestroyChild_Result"}
*Defined in [fuchsia.component/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=88)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Realm_DestroyChild_Result.response">
<td><h3 id="Realm_DestroyChild_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Realm_DestroyChild_Response'>Realm_DestroyChild_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Realm_DestroyChild_Result.err">
<td><h3 id="Realm_DestroyChild_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#Error'>Error</a></code>
            </td>
            <td></td>
        </tr>
</table>

### Realm_ListChildren_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Realm_ListChildren_Result data-text="Realm_ListChildren_Result"}
*Defined in [fuchsia.component/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=106)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Realm_ListChildren_Result.response">
<td><h3 id="Realm_ListChildren_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Realm_ListChildren_Response'>Realm_ListChildren_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Realm_ListChildren_Result.err">
<td><h3 id="Realm_ListChildren_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#Error'>Error</a></code>
            </td>
            <td></td>
        </tr>
</table>

### Realm_OpenExposedDir_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Realm_OpenExposedDir_Result data-text="Realm_OpenExposedDir_Result"}
*Defined in [fuchsia.component/realm.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=52)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Realm_OpenExposedDir_Result.response">
<td><h3 id="Realm_OpenExposedDir_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Realm_OpenExposedDir_Response'>Realm_OpenExposedDir_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Realm_OpenExposedDir_Result.err">
<td><h3 id="Realm_OpenExposedDir_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#Error'>Error</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="MAX_CHILD_COUNT">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=21">MAX_CHILD_COUNT</a></td>
                <td>
                    <code>128</code>
                </td>
                <td><code>uint32</code></td>
            <td><p>The maximum number of children that the a call <code>ChildIterator.Next</code>
can return.
Note, this is not a limit on the number of children that can be added
to a component. This is merely a limit for a single invocation of the
<code>Next</code> method.</p>
</td>
        </tr>
        <tr id="MAX_CHILD_NAME_LENGTH">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/constants.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_DYNAMIC_OFFER_COUNT">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=14">MAX_DYNAMIC_OFFER_COUNT</a></td>
                <td>
                    <code>128</code>
                </td>
                <td><code>uint32</code></td>
            <td><p>The maximum number of dynamic offers that can target a created component.</p>
</td>
        </tr>
        <tr id="MAX_HANDLE_COUNT">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/realm.fidl;l=11">MAX_HANDLE_COUNT</a></td>
                <td>
                    <code>128</code>
                </td>
                <td><code>uint32</code></td>
            <td><p>The maximum number of handles that can be passed to a created component.</p>
</td>
        </tr>
        <tr id="MAX_MONIKER_LENGTH">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/constants.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/constants.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_EVENTS_RECEIVED">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/constants.fidl;l=16">MAX_NUM_EVENTS_RECEIVED</a></td>
                <td>
                    <code>100</code>
                </td>
                <td><code>uint64</code></td>
            <td><p>The maximum number of events that a receiver can listen to.</p>
</td>
        </tr>
        <tr id="MAX_PATH_LENGTH">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/constants.fidl;l=8">MAX_PATH_LENGTH</a></td>
                <td>
                    <code>1024</code>
                </td>
                <td><code>uint32</code></td>
            <td></td>
        </tr>
        <tr id="MAX_SUBSCRIPTION_REQUESTS">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/constants.fidl;l=13">MAX_SUBSCRIPTION_REQUESTS</a></td>
                <td>
                    <code>2</code>
                </td>
                <td><code>uint32</code></td>
            <td><p>The maximum number of requests per event subscription.</p>
</td>
        </tr>
        <tr id="MAX_URL_SCHEME_LENGTH">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/constants.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="child_name">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.component/types.fidl;l=6">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/types.fidl;l=7">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/types.fidl;l=8">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>