max_depth = Inf,
  trim = NULL,
  promote = NULL,
  demote = NULL,
  hide = NULL,
  show_imports = c("functions", "packages", "none"),
  out = NULL,
  lines = TRUE,
  pattern = "(_ui)|(_server)|(Ui)|(Server)|(UI)|(SERVER)"



The function that runs the app


An integer, the maximum depth to display


A vector or list of function names where the recursion will stop


A vector or list of external functions to show as internal functions


A vector or list of internal functions to show as external functions


A vector or list of internal functions to completely remove from the chart


Whether to show imported "functions", only "packages", or "none"


a path to save the diagram to. Special values "html", "htm", "png", "pdf", "jpg" and "jpeg" can be used to export the object to a temp file of the relevant format and open it, if a regular path is used the format will be guessed from the extension. Other special values "data" and "code" can be used for respectively retrieving the graph data as a data frame and the diagram code.


Whether to show the number of lines of code next to the function name


A regular expression used to detect ui and server functions


This function displays a shiny app's module structure, assuming it is built on top of module functions named a certain way (adjustable through the pattern argument) and calling each other. If you call for instance flow_view_shiny() on a function that runs the app and uses both the maon server and ui functions, you'll display the full graph of server and ui modules.

It is wrapper around flow_view_deps() which demotes every object that is not a server function, a ui function or a function calling either. What is or isn't considered as a server or ui function depends on a regular expression provided through the pattern argument. For a more general way of displaying all dependencies (not focused on modules), use flow_view_deps().


if (requireNamespace("esquisse", quietly = TRUE)) {
  flow_view_shiny(esquisse::esquisser, show_imports = "none")