<<../../_common/intro/_components_intro.md>>
<<../../_common/intro/_components_manager.md>>
<<../../_common/intro/_components_capabilities.md>>
<<../../_common/intro/_components_organization.md>>
In this exercise, you'll explore the component instance tree and look in detail at capability routing in action using some core system components.
<<../_common/_start_femu.md>>
Open another terminal window and use the component list command to dump the system's component tree:
ffx component list
You should see output similar to the (truncated) list below:
/ /bootstrap /bootstrap/archivist /bootstrap/base_resolver /bootstrap/console /bootstrap/console-launcher /bootstrap/decompressor /bootstrap/device_name_provider /bootstrap/driver_manager /bootstrap/fshost /bootstrap/miscsvc /bootstrap/netsvc /bootstrap/power_manager /bootstrap/ptysvc /bootstrap/pwrbtn-monitor /bootstrap/shutdown_shim /bootstrap/svchost /bootstrap/sysinfo /bootstrap/virtual_console /core /core/activity /core/appmgr ... /core/debug_serial /core/detect /core/font_provider /core/log-stats /core/remote-control /core/remote-diagnostics-bridge /core/sampler /core/system-update-committer /core/temperature-logger /core/test_manager /core/full-resolver /startup
This list represents the component instance tree, with organizational components like bootstrap, core, and startup forming sub-trees underneath the root.
The component show command provides more details about each component.
Use this command to see the details of http-client — a component that provides an HTTP request service:
ffx component show http-client.cm
The command outputs the following report:
Moniker: /core/network/http-client URL: #meta/http-client.cm Type: CML static component Component State: Resolved Incoming Capabilities: config fuchsia.logger.LogSink fuchsia.net.name.Lookup fuchsia.posix.socket.Provider pkg Exposed Capabilities: fuchsia.net.http.Loader Merkle root: d9e73f5b061f2f227e596e2e0079ff3a095fc69e192cf85e0d7621826c76356c Execution State: Running Start reason: '/core/feedback' requested capability 'fuchsia.net.http.Loader' Running since: ... Job ID: 41268 Process ID: 41311 Outgoing Capabilities: fuchsia.net.http.Loader
Notice a few of the details reported here:
In the previous output, there are three capability groups listed:
use. These are provided to the component through its namespace.expose. These are the component's exposed services.One of the capabilities exposed by http-client to its parent realm is fuchsia.net.http.Loader. This enables other components to issue HTTP requests.
Use the component select command determine how many components interact with this capability:
ffx component capability fuchsia.net.http.Loader
The command lists all the matching components:
Exposed: /core/network/http-client /core/network Used: /core/cobalt /core/feedback /core
This indicates that the cobalt and feedback components use this capability (i.e., have it listed under Incoming Capabilities). The common ancestor between these components is core, which handles the routing of this capability to the necessary children.