diff --git a/NEWS.md b/NEWS.md index 61faabef02..043ad6df5e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,6 +2,20 @@ shiny 1.6.0 ================ +This release focuses on improvements in three main areas: + +1. Better theming (and Bootstrap 4) support: + * The `theme` argument of `fluidPage()`, `navbarPage()`, and `bootstrapPage()` all now understand `bslib::bs_theme()` objects, which can be used to opt-into Bootstrap 4, use any Bootswatch theme, and/or implement custom themes without writing any CSS. + * The `session` object now includes `$setCurrentTheme()` and `$getCurrentTheme()` methods to dynamically update (or obtain) the page's `theme` after initial load, which is useful for things such as [adding a dark mode switch to an app](https://rstudio.github.io/bslib/articles/theming.html#dynamic-theming-in-shiny) or some other "real-time" theming tool like `bslib::bs_themer()`. + * For more details, see [`{bslib}`'s website](https://rstudio.github.io/bslib) + +2. Caching of `reactive()` and `render*()` (e.g. `renderText()`, `renderTable()`, etc) expressions. + * Such expressions automatically cache their _most recent value_, which helps to avoid redundant computation within a single "flush" of reactivity. The new `bindCache()` function can be used to cache _all previous values_ (as long as they fit in the cache). This cache may be optionally scoped within and/or across user sessions, possibly leading to huge performance gains, especially when deployed at scale across user sessions. + * For more details, see `help(bindCache, package = "shiny")` + +3. Various improvements to accessibility for screen-reader and keyboard users. + * For more details, see the accessibility section below. + ## Full changelog ### Breaking changes diff --git a/R/shiny.R b/R/shiny.R index 06a919e9b4..8059ed8f9d 100644 --- a/R/shiny.R +++ b/R/shiny.R @@ -193,6 +193,14 @@ workerId <- local({ #' An environment for app authors and module/package authors to store whatever #' session-specific data they want. #' } +#' \item{user}{ +#' User's log-in information. Useful for identifying users on hosted platforms +#' such as RStudio Connect and Shiny Server. +#' } +#' \item{groups}{ +#' The `user`'s relevant group information. Useful for determining what +#' privileges the user should or shouldn't have. +#' } #' \item{resetBrush(brushId)}{ #' Resets/clears the brush with the given `brushId`, if it exists on #' any `imageOutput` or `plotOutput` in the app. diff --git a/README.md b/README.md index 6db3060850..cdf8342ce9 100644 --- a/README.md +++ b/README.md @@ -7,50 +7,51 @@ -Shiny is a new package from RStudio that makes it incredibly easy to build interactive web applications with R. - -For an introduction and examples, visit the [Shiny Dev Center](https://shiny.rstudio.com/). - -If you have general questions about using Shiny, please use the [RStudio Community website](https://community.rstudio.com). For bug reports, please use the [issue tracker](https://github.com/rstudio/shiny/issues). +Easily build rich and productive interactive web apps in R — no HTML/CSS/JavaScript required. ## Features -* Build useful web applications with only a few lines of code—no JavaScript required. -* Shiny applications are automatically "live" in the same way that spreadsheets are live. Outputs change instantly as users modify inputs, without requiring a reload of the browser. -* Shiny user interfaces can be built entirely using R, or can be written directly in HTML, CSS, and JavaScript for more flexibility. -* Works in any R environment (Console R, Rgui for Windows or Mac, ESS, StatET, RStudio, etc.). -* Attractive default UI theme based on [Bootstrap](https://getbootstrap.com/). -* A highly customizable slider widget with built-in support for animation. -* Prebuilt output widgets for displaying plots, tables, and printed output of R objects. -* Fast bidirectional communication between the web browser and R using the [httpuv](https://github.com/rstudio/httpuv) package. -* Uses a [reactive](https://en.wikipedia.org/wiki/Reactive_programming) programming model that eliminates messy event handling code, so you can focus on the code that really matters. -* Develop and redistribute your own Shiny widgets that other developers can easily drop into their own applications (coming soon!). +* An intuitive and extensible [reactive programming](https://en.wikipedia.org/wiki/Reactive_programming) model which makes it easy to transform existing R code into a "live app" where outputs automatically react to new user input. + * Compared to event-based programming, reactivity allows Shiny to do the minimum amount of work when input(s) change, and allows humans to more easily reason about complex [MVC logic](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller). +* A prebuilt set of highly sophisticated, customizable, and easy-to-use widgets (e.g., plots, tables, sliders, dropdowns, date pickers, and more). +* An attractive default look based on [Bootstrap](https://getbootstrap.com/) which can also be easily customized with the [bslib](https://github.com/rstudio/bslib) package or avoided entirely with more direct R bindings to HTML/CSS/JavaScript. +* Seamless integration with [R Markdown](https://shiny.rstudio.com/articles/interactive-docs.html), making it easy to embed numerous applications natively within a larger dynamic document. +* Tools for improving and monitoring performance, including native support for [async programming](https://blog.rstudio.com/2018/06/26/shiny-1-1-0/), [caching](https://talks.cpsievert.me/20201117), [load testing](https://rstudio.github.io/shinyloadtest/), and [more](https://support.rstudio.com/hc/en-us/articles/231874748-Scaling-and-Performance-Tuning-in-RStudio-Connect). +* [Modules](https://shiny.rstudio.com/articles/modules.html): a framework for reducing code duplication and complexity. +* An ability to [bookmark application state](https://shiny.rstudio.com/articles/bookmarking-state.html) and/or [generate code to reproduce output(s)](https://github.com/rstudio/shinymeta). +* A rich ecosystem of extension packages for more [custom widgets](http://www.htmlwidgets.org/), [input validation](https://github.com/rstudio/shinyvalidate), [unit testing](https://github.com/rstudio/shinytest), and more. ## Installation -To install the stable version from CRAN, simply run the following from an R console: +To install the stable version from CRAN: ```r install.packages("shiny") ``` -To install the latest development builds directly from GitHub, run this instead: +## Getting Started + +Once installed, load the library and run an example: ```r -if (!require("remotes")) - install.packages("remotes") -remotes::install_github("rstudio/shiny") +library(shiny) +# Launches an app, with the app's source code included +runExample("06_tabsets") +# Lists more prepackaged examples +runExample() ``` -## Getting Started +For more examples and inspiration, check out the [Shiny User Gallery](https://shiny.rstudio.com/gallery/). + +For help with learning fundamental Shiny programming concepts, check out the [Mastering Shiny](https://mastering-shiny.org/) book and the [Shiny Tutorial](https://shiny.rstudio.com/tutorial/). The former is currently more up-to-date with modern Shiny features, whereas the latter takes a deeper, more visual, dive into fundamental concepts. -To learn more we highly recommend you check out the [Shiny Tutorial](https://shiny.rstudio.com/tutorial/). The tutorial explains the framework in-depth, walks you through building a simple application, and includes extensive annotated examples. +## Getting Help -## Development notes +To ask a question about Shiny, please use the [RStudio Community website](https://community.rstudio.com/new-topic?category=shiny&tags=shiny). -The Javascript code in Shiny is minified using tools that run on Node.js. See the tools/ directory for more information. +For bug reports, please use the [issue tracker](https://github.com/rstudio/shiny/issues) and also keep in mind that by [writing a good bug report](https://github.com/rstudio/shiny/wiki/Writing-Good-Bug-Reports), you're more likely to get help with your problem. -## Guidelines for contributing +## Contributing We welcome contributions to the **shiny** package. Please see our [CONTRIBUTING.md](https://github.com/rstudio/shiny/blob/master/.github/CONTRIBUTING.md) file for detailed guidelines of how to contribute. diff --git a/man/session.Rd b/man/session.Rd index 6ef6624866..c8c41b9367 100644 --- a/man/session.Rd +++ b/man/session.Rd @@ -104,6 +104,14 @@ This is the request that was used to initiate the websocket connection An environment for app authors and module/package authors to store whatever session-specific data they want. } +\item{user}{ +User's log-in information. Useful for identifying users on hosted platforms +such as RStudio Connect and Shiny Server. +} +\item{groups}{ +The \code{user}'s relevant group information. Useful for determining what +privileges the user should or shouldn't have. +} \item{resetBrush(brushId)}{ Resets/clears the brush with the given \code{brushId}, if it exists on any \code{imageOutput} or \code{plotOutput} in the app.