Upgrade notes for Shiny 1.7.5

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 in I() (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(), and Shiny.renderContentAsync(). Importantly, this means <script> tags are now loaded asynchronously (the old way used XMLHttpRequest, which is synchronous). In addition, Shiny now manages a queue of async tasks (exposed via Shiny.shinyapp.taskQueue) so that order of execution is preserved. (#3666)

  • Fixes #3840: updateSliderInput() now warns when attempting to set invalid min, max, or value 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 a shiny-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 storing fastmap objects into the built Shiny package. (#3775)

Bug fixes

  • Fixed #3771: Sometimes the error ion.rangeSlider.min.js: i.stopPropagation is not a function would appear in the JavaScript console. (#3772)

  • Fixed #3833: When width is provided to textAreaInput(), we now correctly set the width of the <textarea> element. (#3838)