Possibly breaking changes
-
For
reactiveValues()
objects, whenever the$names()
or$values()
methods are called, the keys are now returned in the order that they were inserted. (#3774) -
The value provided to
options(shiny.json.digits)
is now interpreted as number of digits after the decimal instead of significant digits. To treat the value as significant digits, wrap it inI()
(e.g.,options(shiny.json.digits = I(4))
). This new default behavior not only helps with reducing digits in testing snapshots, but is also more consistent with{jsonlite}
's default behavior. (#3819)
New features and improvements
-
Closed #789: Dynamic UI is now rendered asynchronously, thanks in part to the newly exported
Shiny.renderDependenciesAsync()
,Shiny.renderHtmlAsync()
, andShiny.renderContentAsync()
. Importantly, this means<script>
tags are now loaded asynchronously (the old way usedXMLHttpRequest
, which is synchronous). In addition,Shiny
now manages a queue of async tasks (exposed viaShiny.shinyapp.taskQueue
) so that order of execution is preserved. (#3666) -
Fixes #3840:
updateSliderInput()
now warns when attempting to set invalidmin
,max
, orvalue
values. Sending an invalid update message to an input no longer causes other update messages to fail. (#3843) -
sliderInput()
now has a larger target area for clicking or tapping on the slider handle or range. (#3859) -
Closed #2956: Component authors can now prevent Shiny from creating an input binding on specific elements by adding the
data-shiny-no-bind-input
attribute to the element. The attribute may have any or no value; its presence will prevent binding. This feature is primarily useful for input component authors who want to use standard HTML input elements without causing Shiny to create an input binding for them. Additionally, Shiny now adds custom classes to its inputs. For example,checkboxInput()
now has ashiny-input-checkbox
class. These custom classes may be utilized in future updates to Shiny's input binding logic. (#3861) -
Map
objects are now initialized at load time instead of build time. This avoids potential problems that could arise from storingfastmap
objects into the built Shiny package. (#3775)