The entrypoint for a Rhino application.
Your app.R
should contain nothing but a call to rhino::app()
.
Value
An object representing the app (can be passed to shiny::runApp()
).
Details
This function is a wrapper around shiny::shinyApp()
.
It reads rhino.yml
and performs some configuration steps (logger, static files, box modules).
You can run a Rhino application in typical fashion using shiny::runApp()
.
Rhino will load the app/main.R
file as a box module (box::use(app/main)
).
It should export two functions which take a single id
argument -
the ui
and server
of your top-level Shiny module.
Legacy entrypoint
It is possible to specify a different way to load your application
using the legacy_entrypoint
option in rhino.yml
:
app_dir
: Rhino will run the app usingshiny::shinyAppDir("app")
.source
: Rhino willsource("app/main.R")
. This file should define the top-levelui
andserver
objects to be passed toshinyApp()
.box_top_level
: Rhino will loadapp/main.R
as a box module (as it does by default), but the exportedui
andserver
objects will be considered as top-level.
The legacy_entrypoint
setting is useful when migrating an existing Shiny application to Rhino.
It is recommended to transform your application step by step:
With
app_dir
you should be able to run your application right away (just put the files in theapp
directory).With
source
setting your application structure must be brought closer to Rhino, but you can still uselibrary()
andsource()
functions.With
box_top_level
you can be confident that the whole app is properly modularized, as box modules can only load other box modules (library()
andsource()
won't work).The last step is to remove the
legacy_entrypoint
setting completely. Compared tobox_top_level
you'll need to make your top-levelui
andserver
into a Shiny module (functions taking a singleid
argument).