A system for composing modules

Clone this repo:
  1. 78ee37e pyformat run_test. No code changes. by Jim Beveridge · 9 hours ago master
  2. 3722fa5 Pass view_id, parent_id, and view_type to StoryShell.ConnectView() by Alan Gardner · 35 hours ago
  3. 0024546 Handle partial results from Ledger's page change watcher. by Nelly Vouzoukidou · 8 days ago
  4. 83844fd Fix build. by Przemyslaw Pietrzkiewicz · 2 days ago
  5. c2d41a6 Adjust application environments. by Alhaad Gokhale · 2 days ago


Modular provides a framework for ephemerally downloaded applications which may have been implemented in different programming languages to run in a shared context and provide a composed experience to the user. The framework is also responsible for application lifecycle, resource management, view hierarchy, authentication, etc.


  1. Follow instructions in fuchsia for getting the source, setup, build and running Fuchsia.
  2. Follow instructions in ledger to setup the Ledger and all its dependencies including netstack and minfs.


On the Fuchsia command line you can start an example application flow like this:

device_runner --user_shell=dummy_user_shell

A single application can be run using the dev_user_shell, for example:

device_runner --user_shell=dev_user_shell --user_shell_args='--root_module=example_flutter_counter_parent,--root_link={"http://schema.domokit.org/counter":5}'

Note: if you are running this through netruncmd you will need to escape the quotes:

device_runner --user_shell=dev_user_shell --user_shell_args='--root_module=example_flutter_counter_parent,--root_link={\\\"http://schema.domokit.org/counter\\\":5}'

The flags --user_shell and --user_shell_args are read by device_runner. The value of --user_shell is the application run as user shell. The value of --user_shell_args is a comma separated list of arguments passed to the user shell application. In this example, these arguments are in turn more flags. Commas inside the value of such arguments are escaped by backslashes. The value of --root_module selects the module to run. The value of --root_link is a JSON representation of the initial data the module is started with.

The dummy user name used by the dummy user shell can be set with --user:

device_runner --user_shell=dummy_user_shell --user_shell_args=--user=dummy_user

Applications are generally referenced by URLs. If the application binary is in a location where application manager expects it (specifically /system/apps) the URL can be relative. Otherwise, the URL should be relative with an absolute path, or absolute altogether. For example (from test runner invocation):

device_runner --user_shell=dev_user_shell --user_shell_args=--root_module=/tmp/tests/parent_child/parent_module

or even more generally:

device_runner --user_shell=dev_user_shell --user_shell_args=--root_module=file:///tmp/tests/parent_child/parent_module