Upgrade notes for Shiny 1.11.0
Improvements
When auto-reload is enabled, Shiny now reloads the entire app when support files, like Shiny modules, additional script files, or web assets, change. To enable auto-reload, call
devmode(TRUE)to enable Shiny’s developer mode, or setoptions(shiny.autoreload = TRUE)to specifically enable auto-reload. You can choose which files are watched for changes with theshiny.autoreload.patternoption. (#4184)When busy indicators are enabled (i.e.,
useBusyIndicators()), Shiny now:- Shows a spinner on recalculating htmlwidgets that have previously rendered an error (including
req()andvalidate()). (#4172) - Shows a spinner on
tableOutput(). (#4172) - Places a minimum height on recalculating outputs so that the spinner is always visible. (#4172)
- Shows a spinner on recalculating htmlwidgets that have previously rendered an error (including
Shiny now uses cli instead of crayon for rich log messages. (thanks @olivroy, #4170)
renderPlot()was updated to accommodate changes in ggplot2 v4.0.0. (#4226)When adding the new tab via
insertTab()orbslib::nav_insert(), the underlying JavaScript no longer renders content twice. (#4179)
New features
textInput(),textAreaInput(),numericInput()andpasswordInput()all gain anupdateOnoption.updateOn = "change"is the default and previous behavior, where the input value updates immediately whenever the value changes. WithupdateOn = "blur", the input value will update only when the text input loses focus or when the user presses Enter (or Cmd/Ctrl + Enter fortextAreaInput()). (#4183)textAreaInput()gains aautoresizeoption, which automatically resizes the text area to fit its content. (#4210)The family of
update*Input()functions can now render HTML content passed to thelabelargument (e.g.,updateInputText(label = tags$b("New label"))). (#3996)ExtendedTasknow catches synchronous values and errors and returns them via$result(). Previously, the extended task function was required to always return a promise. This change makes it easier to useExtendedTaskwith a function that may return early or do some synchronous work before returning a promise. (#4225)The
callbackargument of Shiny.js’InputBinding.subscribe()method gains support for a value of"event". This makes it possible for an input binding to use event priority when updating the value (i.e., send immediately and always resend, even if the value hasn’t changed). (#4211)
Changes
Shiny no longer suspends input changes when any
<input type="submit">or<button type="submit">is on the page. Instead, it now only suspends when asubmitButton()is present. If you have reason for creating a submit button from custom HTML, add a CSS class ofshiny-submit-buttonto the button. (#4209)Shiny’s JavaScript assets are now compiled to ES2021 instead of ES5. (#4066)
Upgraded jQuery from 3.6.0 to 3.7.1. (#3969)
Updated jQuery UI from 1.13.2 to 1.14.1. (#4175)
Bug fixes
The Shiny Client Console (enabled with
shiny::devmode()) no longer displays duplicate warning or error message. (#4177)Synchronous errors that occur inside a
ExtendedTaskno longer stop the session. (#4225)Calling
removeModal()immediately aftershowModal()no longer fails to remove the modal (this would sometimes happen if the remove message was received while the modal was in the process of being revealed). (#4173)runExample("08_html")now (correctly) requests to ‘shiny.min.css’, eliminating a network request failure. (#4220)shiny::shinyAppTemplate()no longer errors without a call tolibrary(shiny). (#3870)