blob: 7e79bae78541e3066348d99256941d126735f603 [file] [log] [blame] [view]
# Component manifests {#component-manifests}
A [component manifest](#component-manifest) is a file that defines a component
by encoding a [component declaration](#component-declaration). This document
gives an overview of the concepts used by component declarations.
Component declarations contain information about the following:
- **Execution:** Details about the runtime and executable binary for
components that include an [executable program][manifest-program].
- **Composition:** [Child component instances][doc-children]
and [dynamic collections][doc-collections] managed by this component.
- **Capabilities:** [Routing rules][doc-capabilities] that describe how
capabilities are provided and consumed between components.
- **Metadata:** [Freeform data][manifest-facet], which is ignored by the
component framework but can be interpreted by third parties.
Note: For complete details on component manifest attributes and syntax, see the
[CML reference](https://fuchsia.dev/reference/cml).
![Component manifest stages](images/component-manifest.png){: width="836"}
## Component manifest source {#component-manifest-source}
A [component manifest source][glossary.component manifest source] is a file that
encodes part of a component manifest. Component manifest sources are written in
component manifest language (CML), which is the developer-facing source format
for component manifests. CML files are [JSON5][json5-external]{: .external}
files that end with a `.cml` extension.
The [`cmc`][src-cmc] tool compiles component manifest sources to
[component manifests](#component-manifest) as a part of the build process.
## Component manifest {#component-manifest}
A [component manifest][glossary.component manifest] is a binary file that
encodes the [component declaration](#component-declaration), usually distributed
as part of a [package][glossary.package]. The binary format is the
[persistent encoded form][fidl-wire-encoded] of the component declaration FIDL
object.
A [component URL][doc-component-url] identifies a component in a package by its
component manifest resource path, typically ending in a `.cm` extension.
## Component declaration {#component-declaration}
A [component declaration][glossary.component declaration] describes what a
component can do, the capabilities it uses and exposes, its children, and other
information needed to run the component. Component declarations are represented
using the [`Component`][fidl-component-decl] FIDL table.
The framework calls a [component resolver][capability-resolver] to retrieve a
component declaration from a component URL.
[capability-resolver]: /docs/concepts/components/v2/capabilities/resolver.md
[capability-runner]: /docs/concepts/components/v2/capabilities/runner.md
[doc-children]: /docs/concepts/components/v2/realms.md#child-component-instances
[doc-capabilities]: /docs/concepts/components/v2/capabilities/README.md
[doc-collections]: /docs/concepts/components/v2/realms.md#collections
[doc-component-url]: /docs/concepts/components/v2/identifiers.md#component-urls
[doc-environments]: /docs/concepts/components/v2/environments.md
[fidl-component-decl]: https://fuchsia.dev/reference/fidl/fuchsia.component.decl#Component
[fidl-wire-encoded]: /docs/reference/fidl/language/wire-format/README.md#dual-forms
[glossary.component declaration]: /docs/glossary/README.md#component-declaration
[glossary.component manifest]: /docs/glossary/README.md#component-manifest
[glossary.component manifest source]: /docs/glossary/README.md#component-manifest-source
[glossary.package]: /docs/glossary/README.md#package
[json5-external]: https://json5.org/
[manifest-program]: https://fuchsia.dev/reference/cml#program
[manifest-facet]: https://fuchsia.dev/reference/cml#facets
[src-cmc]: /tools/cmc