Component resolvers

<<../../_v2_banner.md>>

Component resolvers extend the component framework through an environment to resolve a component URL into a component.

Component manager resolves component URLs by finding a resolver that supports a matching URL scheme in the relevant environment and sending a request using the fuchsia.component.resolution.Resolver protocol.

If resolution succeeds, the component resolver returns a ComponentDecl, the FIDL representation of a component manifest. If the component being resolved has an associated package, the component resolver also returns a fuchsia.io.Directory handle for the package directory.

Providing resolver capabilities

To provide a resolver capability, a component must declare a resolver capability, whose path designates a FIDL protocol implementing fuchsia.component.resolution.Resolver served from the component's outgoing directory.

{
    capabilities: [
        {
            resolver: "my_resolver",
            path: "/svc/fuchsia.component.resolution.Resolver",
        },
    ],
}

Component manager submits requests to resolve a component URL to this protocol.

Routing resolver capabilities

Components route resolver capabilities by exposing them to their parent and offering them to their children.

For more details on how the framework routes component capabilities, see capability routing.

Exposing

Exposing a resolver capability gives the component's parent access to that capability:

{
    expose: [
        {
            resolver: "my_resolver",
            from: "self",
        },
    ],
}

Offering

Offering a resolver capability gives a child component access to that capability:

{
    offer: [
        {
            resolver: "my_resolver",
            from: "self",
            to: [ "#child-a" ],
        },
    ],
}

Registering a component resolver

Component resolvers are made available to components through their environment. To register a new resolver within an environment, add a new entry to the resolvers section of the environments declaration:

environments: [
    {
        name: "my-environ",
        extends: "realm",
        resolvers: [
            {
                resolver: "my_resolver",
                scheme: "my-scheme",
                from: "parent",
            }
        ],
    },
]

The registered resolver will be used to resolve component URLs whose URL scheme matches the provided scheme.

For more details on how to apply environments to components, see the environments documentation.

Framework resolvers

Component framework provides the following built-in component resolvers to support standard Fuchsia URL schemes:

ResolverURL scheme
boot_resolverfuchsia-boot
base_resolverfuchsia-pkg
universe_resolverfuchsia-pkg