Shells are components which are responsible for composing UI. There are three shells:

  • BaseShell displays UI associated with a device, prior to a session being started.
  • SessionShell displays the UI associated with a given session (e.g. list of stories, settings UI).
  • StoryShell displays a single story (i.e. the composition of the modules in a story, each story gets its own StoryShell instance).


A shell is given access to two services provided by the modular framework in its incoming namespace:

  • fuchsia.modular.ComponentContext gives the agent access to functionality which is shared across components run under the modular framework (e.g. modules, shells, agents).
  • fuchsia.modular.[Base,Session,Story]ShellContext gives access to shell specific functionality for each type of shell, respectively.

A shell is expected to provide two services to the modular framework in its outgoing namespace:

  • fuchsia.modular.[Base,Session,Story]Shell the modular framework uses to communicate requests to display UI.
  • fuchsia.modular.Lifecycle allows the framework to signal the shell to terminate gracefully.


The three shells have varying lifecycles:

  • BaseShell runs between the time basemgr starts up until a session has been established, and on demand thereafter to faciliate authentication requests.
  • SessionShell runs for the duration of a session.
  • StoryShell runs while its associated story is running.